###前提・実現したいこと
C言語でファイルを読み込み、一部の要素を取り出してそれを演算しようとしています。
test.dat(読み込むファイル)
2017/5/1,spring,1 ,3800 2017/5/2,spring,2 ,1000 2017/5/3,spring,1 ,50 2017/5/4,spring,2 ,1079 2017/5/5,,1 ,3833 2017/5/7,,2 ,989
実現したいこと
% ./trial test.dat 1 ,3800 2 ,1000 1 ,50 2 ,1079 1 ,3833 2 ,989 sum of third line is 1 =7683 sum of third line is 2 =3068
###発生している問題・エラーメッセージ
コードでは4列目の値をnum2として取得しているのですが、実行結果は全く異なる値が表示されます。
(コメントアウトしている部分は表示されていません)
% ./trial test.dat 1,6295600 2,6295600 1,6295600 2,6295600 1,6295600 2,6295600 sum of third line is 1 =18886800 //3列目が1の時の総和 sum of third line is 2 =18886800 //3列目が2の時の総和
###該当のソースコード
c
1#include <stdio.h> 2#include <stdlib.h> 3 4int main(int argc, char *argv[]) { 5 FILE* fp; // ファイルポインタ 6 7 char *fname = argv[1]; 8 fp = fopen(fname, "r"); // ファイルを開く 9 10 char line[256]; 11 int num1, num2; 12 int sum1, sum2; // *追加 13 char *p; 14 int c; 15 16 //3列目と4列目の値を取得し、表示 17 sum1 = 0; // *追加 18 sum2 = 0; // *追加 19 while (fgets(line, sizeof(line), fp) != NULL) { 20 p = line; 21 c = 0; 22 while (p) { 23 if (*p == ',') c++; 24 p++; 25 if (c == 2) break; 26 } 27 sscanf(p, "%d,%d", &num1, &num2); // *変更 "%d,%d\n" -> "%d,%d" 28 printf("%d,%d\n", num1, num2); 29 30 //ここで総和を計算し、表示する 31 switch (num1) { 32 case 1: 33 sum1 += num2; // *変更 int 1sum -> sum1 34 break; 35 case 2: 36 sum2 += num2; // *変更 int 2sum -> sum2 37 break; 38 } 39 40 } 41 printf("sum of third line is 1 =%d\n", sum1); // *変更 1sum -> sum1 42 printf("sum of third line is 2 =%d\n", sum2); // *変更 2sum -> sum2 43 44 fclose(fp); 45 return 0; 46}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/17 01:40
2018/01/17 01:49
2018/01/17 01:55