質問編集履歴

3

引数のチェック部分を修正

2021/09/01 08:34

投稿

yatai
yatai

スコア4

test CHANGED
File without changes
test CHANGED
@@ -80,23 +80,31 @@
80
80
 
81
81
  float sd =0;
82
82
 
83
- **const char* file1 = "input.txt";
83
+ const char* file1 = "input.txt";
84
-
84
+
85
- const char* file2 = "output.txt";**
85
+ const char* file2 = "output.txt";
86
86
 
87
87
  FILE *fp1,*fp2;
88
88
 
89
89
 
90
90
 
91
- **//出力時の文字化けを直したい**
91
+ //出力時の文字化けを直したい
92
+
93
+
94
+
92
-
95
+ //引数で受け取ったファイル名は別変数にコピーしてargvのまま用いないようにしたい
96
+
93
-
97
+ file1 = argv[1];
98
+
99
+ file2 = argv[2];
100
+
101
+
94
102
 
95
103
  //引数の数のチェックをして足りないときはusageを表示して終了したい
96
104
 
97
- if (argc != N){
105
+ if (argc < 3){
98
-
106
+
99
- printf("usage: %s in_file out_file\n", argv[0]);
107
+ printf("usage: %s in_file out_fileを用いてください\n", argv[0]);
100
108
 
101
109
  return 1;
102
110
 
@@ -104,12 +112,6 @@
104
112
 
105
113
 
106
114
 
107
- //引数で受け取ったファイル名は別変数にコピーしてargvのまま用いないようにしたい
108
-
109
- **char *ifile = argv[1], *ofile = argv[2];**
110
-
111
-
112
-
113
115
  //ファイルを開いて読み込み
114
116
 
115
117
  if( (fp1=fopen(file1,"r")) == NULL){
@@ -198,8 +200,6 @@
198
200
 
199
201
  ```
200
202
 
201
- コンパイル出来たものの、プログラムが動きませんでした。
202
-
203
- どこが間違っているのか教えていだきたいです。
203
+ 文字化けを直したいです。
204
204
 
205
205
  よろしくお願いします。

2

回答者様の追記を元に修正

2021/09/01 08:34

投稿

yatai
yatai

スコア4

test CHANGED
File without changes
test CHANGED
@@ -52,21 +52,25 @@
52
52
 
53
53
  ```
54
54
 
55
- 現在自分で書いたコードは以下です
55
+ 現在自分で書いたコードは以下です(8/31追記を元に修正しました)
56
56
 
57
57
  ```c
58
58
 
59
59
  #include <stdio.h>
60
60
 
61
+ #include <stdlib.h>
62
+
61
63
  #include <math.h>
62
64
 
65
+ #define N 10
66
+
63
67
 
64
68
 
65
69
  int main(int argc, char *argv[])
66
70
 
67
71
  {
68
72
 
69
- int i,data[i];
73
+ int i,data[N];
70
74
 
71
75
  int sum = 0;
72
76
 
@@ -76,41 +80,55 @@
76
80
 
77
81
  float sd =0;
78
82
 
83
+ **const char* file1 = "input.txt";
84
+
85
+ const char* file2 = "output.txt";**
86
+
79
87
  FILE *fp1,*fp2;
80
88
 
81
-
82
-
89
+
90
+
83
- //input.txt読み込む
91
+ **//出力時の文字化け直したい**
84
-
92
+
93
+
94
+
85
- fp1 = fopen("input.txt","r");
95
+ //引数の数のチェックをして足りないときはusageを表示して終了したい
86
-
96
+
87
- if(fp1 == NULL)
97
+ if (argc != N){
88
-
89
- {
98
+
90
-
91
- printf("input.txtファイルを開くことが出来ませんでした\n");
99
+ printf("usage: %s in_file out_file\n", argv[0]);
92
100
 
93
101
  return 1;
94
102
 
95
- }
103
+ }
104
+
105
+
106
+
96
-
107
+ //引数で受け取ったファイル名は別変数にコピーしてargvのまま用いないようにしたい
108
+
109
+ **char *ifile = argv[1], *ofile = argv[2];**
110
+
111
+
112
+
113
+ //ファイルを開いて読み込み
114
+
115
+ if( (fp1=fopen(file1,"r")) == NULL){
116
+
117
+ printf("%sファイルを開くことが出来ませんでした\n",file1);
118
+
119
+ return 1;
120
+
97
- else
121
+ }else{
98
-
99
- {
122
+
100
-
101
- printf("input.txtファイルをオープンしました\n");
123
+ printf("%sファイルをオープンしました\n",file1);
102
-
124
+
103
- printf("10個の整数をこのファイルに読み込みます\n");
125
+ printf("%d 個の整数の合計出力します\n", N);
104
-
126
+
105
- }
127
+ }
106
-
107
-
108
-
128
+
129
+
130
+
109
- for(i=0; i < argc ; i++)
131
+ for(i=0; i < N ; i++){
110
-
111
- {
112
-
113
- data[i] = (int)argv[i];
114
132
 
115
133
  fscanf(fp1,"%d\n", &data[i]);
116
134
 
@@ -118,73 +136,59 @@
118
136
 
119
137
  sum += data[i];
120
138
 
121
- sqave +=data[i]*data[i];
139
+ sqave += data[i]*data[i];
122
-
140
+
123
- }
141
+ }
124
142
 
125
143
  fclose(fp1);
126
144
 
127
- printf("input.txtファイルをクローズしました\n");
145
+ printf("%sファイルをクローズしました\n", file1);
128
-
129
-
130
-
146
+
147
+
148
+
131
- //平均と標準偏差を計算して出力
149
+ //計算部分
132
-
150
+
133
- printf("10個の整数の平均と標準偏差を出力します\n");
151
+ printf("%d 個の整数の平均と標準偏差を出力します\n", N);
134
-
152
+
135
- ave = (float)sum/10;
153
+ ave = (float)sum/N;
136
-
154
+
137
- sqave /= 10;
155
+ sqave /= N;
138
-
156
+
139
- sd = (sqave - ave*ave)*10/(10-1);
157
+ sd = (sqave - ave*ave)*N/(N-1);
140
-
158
+
141
- if(sd >= 0)
159
+ if(sd >= 0){
142
-
143
- {
144
160
 
145
161
  printf("平均 = %.1f\n標準偏差 = %.1f\n", ave, sqrt(sd));
146
162
 
147
- }
148
-
149
- else
163
+ }else{
150
-
151
- {
152
164
 
153
165
  printf("平均 = %.1f\n標準偏差 = 存在しない値です\n", ave);
154
166
 
155
- }
167
+ }
156
-
157
-
158
-
168
+
169
+
170
+
159
- //output.txt平均と標準偏差を書き出
171
+ //新規ファイルに書き出
160
-
172
+
161
- fp2 = fopen("output.txt","w");
173
+ if( (fp2=fopen(file2,"w")) == NULL){
162
-
163
- if(fp2 == NULL)
174
+
164
-
165
- {
166
-
167
- printf("output.txtファイルを開くことが出来ませんでした\n");
175
+ printf("%sファイルを開くことが出来ませんでした\n",file2);
168
176
 
169
177
  return 1;
170
178
 
171
- }
172
-
173
- else
179
+ }else{
174
-
175
- {
180
+
176
-
177
- printf("output.txtファイルをオープンしました\n");
181
+ printf("%sファイルをオープンしました\n", file2);
178
182
 
179
183
  fprintf(fp2,"平均 = %.1f\n標準偏差 = %.1f\n", ave, sqrt(sd));
180
184
 
181
- printf("平均と標準偏差をoutput.txtに書き込みました\n");
185
+ printf("平均と標準偏差を%sファイルに書き込みました\n", file2);
182
-
186
+
183
- }
187
+ }
184
188
 
185
189
  fclose(fp2);
186
190
 
187
- printf("output.txtファイルをクローズしました\n");
191
+ printf("%sファイルをクローズしました\n", file2);
188
192
 
189
193
 
190
194
 

1

誤字、解釈ミス

2021/08/31 09:03

投稿

yatai
yatai

スコア4

test CHANGED
File without changes
test CHANGED
@@ -8,9 +8,9 @@
8
8
 
9
9
   コマンド行の引数で指定できるようにしたい
10
10
 
11
- 数の数のチェックをして足りないときはusageを表示して終了、
11
+ 数の数のチェックをして足りないときはusageを表示して終了、
12
-
12
+
13
-  引数で受け取ったファイル名は別数にコピーしてargvのまま用いないようにしたいです
13
+  引数で受け取ったファイル名は別数にコピーしてargvのまま用いないようにしたいです
14
14
 
15
15
 
16
16