質問編集履歴

2

コメントを追加しました

2015/02/28 03:52

投稿

senbe
senbe

スコア27

test CHANGED
File without changes
test CHANGED
@@ -1,10 +1,22 @@
1
- プログラミング初心者です。
1
+ ****プログラミング初心者です。
2
2
 
3
3
  プログラミング言語C(K&R)の演習1-18の解答例を見たのですが、わからないです。
4
4
 
5
5
  (http://www.c-program-example.com/2011/11/k-r-c-exercise-1-18.html)
6
6
 
7
7
  関数 get_line と char_remove のしくみを教えて頂けるとありがたいです!
8
+
9
+
10
+
11
+ 特に
12
+
13
+ 関数 char_remove で配列の中の文字が
14
+
15
+ ’\n’ ' ' '\t'
16
+
17
+ のときにどうして、i の値をを +1 にしたり、-1
18
+
19
+ するのかがよくわかりません。
8
20
 
9
21
 
10
22
 

1

コメントを追加しました

2015/02/28 03:52

投稿

senbe
senbe

スコア27

test CHANGED
File without changes
test CHANGED
@@ -16,15 +16,17 @@
16
16
 
17
17
  ...c
18
18
 
19
+
20
+
19
21
  #include <stdio.h>
20
22
 
21
- #define MAXLINE 1000
23
+ #define MAXLINE 1000 /* 入力行の最大長*/
22
24
 
23
25
 
24
26
 
25
- int get_lines(char line[], int maxline);
27
+ int get_lines(char line[], int maxline); /* 関数 get_lines の宣言 */
26
28
 
27
- int char_remove(char str[]);
29
+ int char_remove(char str[]); /* 関数 char_removeの宣言 */
28
30
 
29
31
 
30
32
 
@@ -42,7 +44,7 @@
42
44
 
43
45
  if (char_remove(line) > 0)
44
46
 
45
- printf("%s",line);
47
+ printf("%s",line);
46
48
 
47
49
  return 0;
48
50
 
@@ -62,37 +64,39 @@
62
64
 
63
65
  {
64
66
 
65
- int i = 0;
67
+ int i = 0; /* i の初期値は 0*/
66
68
 
67
- while (str[i] != '\n')
69
+ while (str[i] != '\n') /* 文字が '\n'以外なら*/
70
+
71
+ ++i;/*i = i + 1*/
72
+
73
+
74
+
75
+ --i; /* 文字が'\n'なら、i = i -1*/
76
+
77
+
78
+
79
+ while (i >= 0 && (str[i] == ' '|| str[i] == '\t'))/*i が0以上 かつ
80
+
81
+ 文字が空白 あるいは タブなら*/
82
+
83
+ --i;/* i = i -1*/
84
+
85
+ if (i >= 0)/*i が0以上なら(文字は空白あるいはタブではない)*/
86
+
87
+ {
88
+
89
+ ++i;/*i = i + 1*/
90
+
91
+ str[i] = '\n';/* str[i] に '\n' を代入*/
68
92
 
69
93
  ++i;
70
94
 
71
-
72
-
73
- --i;
74
-
75
-
76
-
77
- while (i >= 0 && (str[i] == ' '|| str[i] == '\t'))
95
+ str[i] = '\0';/* str[i]'\0'を代入*/
78
-
79
- --i;
80
-
81
- if (i >= 0)
82
-
83
- {
84
-
85
- ++i;
86
-
87
- str[i] = '\n';
88
-
89
- ++i;
90
-
91
- str[i] = '\0';
92
96
 
93
97
  }
94
98
 
95
- return i;
99
+ return i;/*i の値を返す*/
96
100
 
97
101
  }
98
102
 
@@ -110,23 +114,25 @@
110
114
 
111
115
  for (i = 0, j = 0; (c = getchar()) != EOF && c != '\n'; ++i)
112
116
 
117
+ /*i ,jの初期値は0.とってきた文字がファイルの終わりではない かつ '\n'でなければ*/
118
+
113
119
  {
114
120
 
115
- if (i < line - 1)
121
+ if (i < line - 1) /*i が 999よりも小さければ */
116
122
 
117
123
  {
118
124
 
119
- str[j++] = c;
125
+ str[j++] = c;/*str[j = j +1] に c を代入*/
120
126
 
121
127
  }
122
128
 
123
129
  }
124
130
 
125
- if (c == '\n')
131
+ if (c == '\n') /*とってきた文字が '\n'なら*/
126
132
 
127
133
  {
128
134
 
129
- if (i <= line -1)
135
+ if (i <= line -1) /*iが998以下なら*/
130
136
 
131
137
  {
132
138
 
@@ -138,17 +144,19 @@
138
144
 
139
145
  }
140
146
 
141
- str[j] = '\0';
147
+ str[j] = '\0';/*str[j]に'\0'を代入*/
142
148
 
143
- return i;
149
+ return i;/*iの値を返す */
144
150
 
145
151
  }
146
152
 
153
+
154
+
147
155
  コマンドプロンプトで
148
156
 
149
- >a.exe<hello.c
157
+ >a.exe < hello.c
150
158
 
151
- hello.c をリダイレクトすると
159
+ 実行すると
152
160
 
153
161
 
154
162