teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

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

2021/09/01 08:34

投稿

yatai
yatai

スコア4

title CHANGED
File without changes
body CHANGED
@@ -39,21 +39,22 @@
39
39
  float ave = 0;
40
40
  float sqave = 0;
41
41
  float sd =0;
42
- **const char* file1 = "input.txt";
42
+ const char* file1 = "input.txt";
43
- const char* file2 = "output.txt";**
43
+ const char* file2 = "output.txt";
44
44
  FILE *fp1,*fp2;
45
45
 
46
- **//出力時の文字化けを直したい**
46
+ //出力時の文字化けを直したい
47
47
 
48
+ //引数で受け取ったファイル名は別変数にコピーしてargvのまま用いないようにしたい
49
+ file1 = argv[1];
50
+ file2 = argv[2];
51
+
48
52
  //引数の数のチェックをして足りないときはusageを表示して終了したい
49
- if (argc != N){
53
+ if (argc < 3){
50
- printf("usage: %s in_file out_file\n", argv[0]);
54
+ printf("usage: %s in_file out_fileを用いてください\n", argv[0]);
51
55
  return 1;
52
56
  }
53
57
 
54
- //引数で受け取ったファイル名は別変数にコピーしてargvのまま用いないようにしたい
55
- **char *ifile = argv[1], *ofile = argv[2];**
56
-
57
58
  //ファイルを開いて読み込み
58
59
  if( (fp1=fopen(file1,"r")) == NULL){
59
60
  printf("%sファイルを開くことが出来ませんでした\n",file1);
@@ -98,6 +99,5 @@
98
99
  return 0;
99
100
  }
100
101
  ```
101
- コンパイル出来たものの、プログラムが動きませんでした。
102
- どこが間違っているのか教えていだきたいです。
102
+ 文字化けを直したいです。
103
103
  よろしくお願いします。

2

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

2021/09/01 08:34

投稿

yatai
yatai

スコア4

title CHANGED
File without changes
body CHANGED
@@ -25,73 +25,75 @@
25
25
  ```txt
26
26
  //空
27
27
  ```
28
- 現在自分で書いたコードは以下です
28
+ 現在自分で書いたコードは以下です(8/31追記を元に修正しました)
29
29
  ```c
30
30
  #include <stdio.h>
31
+ #include <stdlib.h>
31
32
  #include <math.h>
33
+ #define N 10
32
34
 
33
35
  int main(int argc, char *argv[])
34
36
  {
35
- int i,data[i];
37
+ int i,data[N];
36
38
  int sum = 0;
37
39
  float ave = 0;
38
40
  float sqave = 0;
39
41
  float sd =0;
42
+ **const char* file1 = "input.txt";
43
+ const char* file2 = "output.txt";**
40
44
  FILE *fp1,*fp2;
45
+
46
+ **//出力時の文字化けを直したい**
47
+
48
+ //引数の数のチェックをして足りないときはusageを表示して終了したい
49
+ if (argc != N){
50
+ printf("usage: %s in_file out_file\n", argv[0]);
51
+ return 1;
52
+ }
41
53
 
54
+ //引数で受け取ったファイル名は別変数にコピーしてargvのまま用いないようにしたい
55
+ **char *ifile = argv[1], *ofile = argv[2];**
56
+
42
- //input.txtを読み込
57
+ //ファイル開いて読み込
43
- fp1 = fopen("input.txt","r");
58
+ if( (fp1=fopen(file1,"r")) == NULL){
44
- if(fp1 == NULL)
45
- {
46
- printf("input.txtファイルを開くことが出来ませんでした\n");
59
+ printf("%sファイルを開くことが出来ませんでした\n",file1);
47
60
  return 1;
61
+ }else{
62
+ printf("%sファイルをオープンしました\n",file1);
63
+ printf("%d 個の整数の合計を出力します\n", N);
48
- }
64
+ }
49
- else
65
+
50
- {
51
- printf("input.txtファイルをオープンしました\n");
52
- printf("10個の整数をこのファイルに読み込みます\n");
53
- }
54
-
55
- for(i=0; i < argc ; i++)
66
+ for(i=0; i < N ; i++){
56
- {
57
- data[i] = (int)argv[i];
58
67
  fscanf(fp1,"%d\n", &data[i]);
59
68
  printf("読み込みデータ = %d\n", data[i]);
60
69
  sum += data[i];
61
- sqave +=data[i]*data[i];
70
+ sqave += data[i]*data[i];
62
- }
71
+ }
63
72
  fclose(fp1);
64
- printf("input.txtファイルをクローズしました\n");
73
+ printf("%sファイルをクローズしました\n", file1);
65
74
 
66
- //平均と標準偏差を計算して出力
75
+ //計算部分
67
- printf("10個の整数の平均と標準偏差を出力します\n");
76
+ printf("%d 個の整数の平均と標準偏差を出力します\n", N);
68
- ave = (float)sum/10;
77
+ ave = (float)sum/N;
69
- sqave /= 10;
78
+ sqave /= N;
70
- sd = (sqave - ave*ave)*10/(10-1);
79
+ sd = (sqave - ave*ave)*N/(N-1);
71
- if(sd >= 0)
80
+ if(sd >= 0){
72
- {
73
81
  printf("平均 = %.1f\n標準偏差 = %.1f\n", ave, sqrt(sd));
74
- }
75
- else
82
+ }else{
76
- {
77
83
  printf("平均 = %.1f\n標準偏差 = 存在しない値です\n", ave);
78
- }
84
+ }
79
85
 
80
- //output.txt平均と標準偏差を書き出
86
+ //新規ファイルに書き出
81
- fp2 = fopen("output.txt","w");
87
+ if( (fp2=fopen(file2,"w")) == NULL){
82
- if(fp2 == NULL)
83
- {
84
- printf("output.txtファイルを開くことが出来ませんでした\n");
88
+ printf("%sファイルを開くことが出来ませんでした\n",file2);
85
89
  return 1;
86
- }
87
- else
90
+ }else{
88
- {
89
- printf("output.txtファイルをオープンしました\n");
91
+ printf("%sファイルをオープンしました\n", file2);
90
92
  fprintf(fp2,"平均 = %.1f\n標準偏差 = %.1f\n", ave, sqrt(sd));
91
- printf("平均と標準偏差をoutput.txtに書き込みました\n");
93
+ printf("平均と標準偏差を%sファイルに書き込みました\n", file2);
92
- }
94
+ }
93
95
  fclose(fp2);
94
- printf("output.txtファイルをクローズしました\n");
96
+ printf("%sファイルをクローズしました\n", file2);
95
97
 
96
98
  return 0;
97
99
  }

1

誤字、解釈ミス

2021/08/31 09:03

投稿

yatai
yatai

スコア4

title CHANGED
File without changes
body CHANGED
@@ -3,8 +3,8 @@
3
3
  やりたいこと
4
4
  ・読み込み/書き出しのファイルを実行する時にargc,argvを用いて
5
5
   コマンド行の引数で指定できるようにしたい
6
- 数の数のチェックをして足りないときはusageを表示して終了、
6
+ 数の数のチェックをして足りないときはusageを表示して終了、
7
-  引数で受け取ったファイル名は別数にコピーしてargvのまま用いないようにしたいです
7
+  引数で受け取ったファイル名は別数にコピーしてargvのまま用いないようにしたいです
8
8
 
9
9
  補足
10
10
  ・読み込むファイル名は"input.txt"