質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Q&A

1回答

3530閲覧

C言語 csvファイル読み取り 書き出し

i_syuuya

総合スコア4

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

0グッド

1クリップ

投稿2019/11/28 13:14

編集2022/01/12 10:55

前提・実現したいこと

csvファイルについて、fgetsを使って文字列としてデータを読み取り、 数値データを移動平均フィルタによって平滑化する。

発生している問題・エラーメッセージ

printfが反応しない

エラーメッセージ ない ### 該当のソースコード ```C言語 ソースコード ```#include <stdio.h> #include <stdlib.h> #include<string.h> #define N 1000 // 1行の最大文字数(バイト数) #define ROW 3 // 読み込むファイルのデータの行数 // 1列目の項目名と2列目以降のデータを格納する配列をメンバにもつ構造体 typedef struct str { char str1[12]; char str2[12]; char str3[12]; int f_data[27]; float result[27]; } data; int main(void) { FILE *fp,*fpw; // FILE型構造体 char fname[] = "saccade_ratio.csv"; char fnameout[] = "result.csv"; char line[N]; char str1[12]; char str2[12]; char str3[12]; int f[27]; int i = 0,j =0; int tmp[26]; data data[ROW]; fp = fopen(fname, "r"); // ファイルを開く。失敗するとNULLを返す。 if(fp == NULL) { printf("%s file not open!\n", fname); exit(EXIT_FAILURE); } fpw = fopen(fnameout,"w"); if((fp = fopen(fnameout,"w")) ==NULL) { printf("cannot open %s\n",fnameout); exit(EXIT_FAILURE); } while(fgets(line, N, fp) != NULL) { sscanf(line, "%[^,],%[^,],%[^,],%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", str1,str2,str3,&f[1], &f[2], &f[3], &f[4], &f[5],&f[6], &f[7], &f[8], &f[9], &f[10], &f[11], &f[12], &f[13], &f[14], &f[15], &f[16], &f[17], &f[18], &f[19], &f[20], &f[21], &f[22], &f[23], &f[24], &f[25], &f[26]); printf("%s,%s,%s\n",str1,str2,str3); for(j = 0; j < sizeof(data[i].str1) / sizeof(data[i].str1[0]); j++) { data[i].str1[j] = str1[j]; } for(j = 0; j < sizeof(data[i].str2) / sizeof(data[i].str2[0]); j++) { data[i].str2[j] = str2[j]; } for(j = 0; j < sizeof(data[i].str3) / sizeof(data[i].str3[0]); j++) { data[i].str3[j] = str3[j]; } for(i=1;i<27;i++) { tmp[i]=f[i]; } for(j = 0; j < sizeof(data[i].f_data) / sizeof(data[i].f_data[0]); j++) { data[i].f_data[j] = tmp[j]; } printf("%s,%s,%s,",str1,str2,str3); for(j=1;j<27;j++) { printf("%d,",data[i].f_data[j]); } printf("\n"); //移動平均 data[i].result[0]=(float)data[i].f_data[0]; data[i].result[1]=(float)data[i].f_data[1]; data[i].result[25]=(float)data[i].f_data[25]; data[i].result[26]=(float)data[i].f_data[26]; for(j=2;j<=24;j++) { data[i].result[j] = (float)(data[i].f_data[j-2]+data[i].f_data[j-1]+data[i].f_data[j]+data[i].f_data[j+1]+data[i].f_data[j+2]) / 5; } for(j=1;j<27;j++) { printf("%f,",data[i].result[j]); } i++; } for(j=1;j<27;j++) { printf("%f,",data[i].result[j]); fprintf(fpw,"%.1f,",data[i].result[j]); } fprintf(fpw,"\n"); fclose(fp); // ファイルを閉じる fclose(fpw); return 0; } 実行結果 [vmuser@c7vm2019 week9]$ ./a.out 0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,[vmuser@c7vm2019 week9]$

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/11/28 13:22

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
otn

2019/11/28 13:23

> printfが反応しない とはどういう意味ですか? あと、プログラムは、見る気が起きる書き方をしてください。
y_waiwai

2019/11/28 13:24

で、 > printfが反応しない とはどういうことでしょうか。 提示のコードがどういう動作をするのか詳しく説明しましょう #質問分に追記してください
yumetodo

2019/11/28 13:27

ソースコードをmakrdownのコードブロック記法で記述してください。あと読み込むcsvを(適宜抜粋して)追記してください
izmktr

2019/11/29 01:08

宣言がtmp[26]なのに、tmp[26]にアクセスしちゃだめじゃないですか?
guest

回答1

0

fpが上書きされてしまっています。
以下コード部分を見直してみてください。

test.c

1fpw = fopen(fnameout,"w"); 2if((fp = fopen(fnameout,"w")) ==NULL)

多分result.csvの中身がないのではないでしょうか?
それでループ部分に入っていかず、printfまで飛ばされていると思います。

投稿2019/12/01 11:56

za_spa

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問