• ベストアンサー

ファイル入力のエラー

takebouの回答

  • takebou
  • ベストアンサー率43% (27/62)
回答No.1

コンパイルしただけで実行してないなんてことは無いですよね? 気づく点といえば、iを初期化していないことでしょうか。 このままですと、iがでたらめな数字になっていて、それでもプログラムは実行してしまいますから、 実行プログラム自体を書き換えたりします。 何も表示されないのかプログラムが動いてないのか判断するには、 printf に間違いなく表示される文字列(%を使わない)を入れてみると良いですよ。

関連するQ&A

  • 関数の作り方(初心者です)

    バブルソートをするプログラムを作っています。 以下の部分を関数として、作って挿入したいのですがどのようにすれば 読み出すことができるのでしょうか。 { int a,b,c,d; float e,f; a=year[l+1] year[l+1]=year[l] year[l]=a b=month[l+1] month[l+1]=month[l] month[l]=a c=day[l+1] day[l+1]=day[l] day[l]=c d=code[l+1] [l+1]=code[l] code[l]=d e=latitude[l+1] [l+1]=latitude[l] latitude[l]=d f=longitude[l+1] [l+1]=longitude[l] longitude[l]=f }

  • 平均、分散を求めたときの入力エラー

    入力された10個の数字について平均、分散を求めるため素朴に書いてみました。 #include<stdio.h> int main(){ char buf[256]; double a,b,c,d,e,f,g,h,i,j,mean,variance; fgets(buf,256,stdin); sscanf(buf,"%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j); if(!sscanf(buf,"%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j)){ printf("数字を入力してください。\n"); }else{ mean=(a+b+c+d+e+f+g+h+i+j)/10; variance=((a-mean)*(a-mean)+(b-mean)*(b-mean)+(c-mean)*(c-mean)+(d-mean)*(d-mean)+(e-mean)*(e-mean)+(f-mean)*(f-mean)+(g-mean)*(g-mean)+(h-mean)*(h-mean)+(i-mean)*(i-mean)+(j-mean)*(j-mean))/10; printf("平均=%lf\n",mean); printf("分散=%lf\n",variance); return 0; } } 途中、数字が入力されなかったときに”数字を入力してください。” と書きたかったのですがうまくいきません。あと、10個より少なく入力したときのエラー表示もしたいのですが… 教えてください。よろしくお願いします。

  • csvファイルの読み込み

    fscanf関数を用いて、csvファイルの内容を構造体のそれぞれのメンバに読み込んで表示させようとしているのですが、4列目以降が上手く読み込めません。初歩的な質問で申し訳ありませんがどなたか教えてください。 ****************************ソース************************************************ #include <stdio.h> #include <string.h> #include <stdlib.h> #define SIZE 64 #define FILE_NAME "view_001_McdlData.csv" #define FILE_SIZE 819200 struct Data{ int DataNo; int FrameNo; int SampleNo; char Digital; double voltage; double trigger; double C; double D; }; int main(int argc, char *argv[]) { FILE* fp,*fo, *fi; // ファイルポインタ用 int n, i, file_size; double time,vel[FILE_SIZE]; struct Data *dat; char buff[SIZE]; if ((fp = fopen(FILE_NAME,"r")) == NULL) { printf( "file open error\n" ); exit(EXIT_FAILURE); } fseek(fp, 0, SEEK_END); file_size = ftell(fp); dat = (struct Data*)malloc(file_size); printf("malloc address= %p, file size= %d\n", dat, file_size); fseek(fp, 0, SEEK_SET); i = 0; //データの読み込み while((fscanf(fp, "%d,%d,%d,%s,%lf,%lf,%lf,%lf",&dat[i].DataNo,&dat[i].FrameNo,&dat[i].SampleNo,&dat[i].Digital,&dat[i].voltage,&dat[i].trigger,&dat[i].C,&dat[i].D)) !=EOF ){ printf("%d %d %d %s %lf %lf %lf %lf\n",dat[i].DataNo,dat[i].FrameNo,dat[i].SampleNo,dat[i].Digital,dat[i].voltage,dat[i].trigger,dat[i].C,dat[i].D); i++; } fclose(fp); return 0; } ***********************************csvファイルの内容************************************ 0,1,0,0x3F,2.270000,0.000000,-1.000000,-1.000000 1,1,1,0x3F,2.260000,0.010000,-1.000000,-1.000000 2,1,2,0x3F,2.260000,0.010000,-1.000000,-1.000000 3,1,3,0x3F,2.260000,0.010000,-1.000000,-1.000000 4,1,4,0x3F,2.260000,0.010000,-1.000000,-1.000000 5,1,5,0x3F,2.260000,0.000000,-1.000000,-1.000000 ***************************************************************************************************

  • 20日締めの表示がずれる

    いつもお世話になります。 WIN7 EXCELLL2010 です。 添付図で説明さていただくと、 A2 A3 は20日の締めで翌月の入金の設定したいのです。 ところが 「I6」に「2,500」が1列ずれて表示されます。 これを  「J6」に「2,500」に修正したい。 どこか私のやり方に問題があると思いますが御指導をいただけませんでしょうか。 参考に I1 =DATE($D$1-1,12,1) J1 =DATE($D$1,1,1) I6 =SUMPRODUCT(($A$2:$A$1000>=DATE(YEAR($I$1),MONTH($I$1)-1,VLOOKUP($E7,$E$3:$G$7,2,0)))*($A$2:$A$1000<=DATE(YEAR($I$1),MONTH($I$1),VLOOKUP($E7,$E$3:$G$7,3,0)))*($B$2:$B$1000=$E7)*($C$2:$C$1000))

  • C言語の計算についての質問です.

    C言語の計算についての質問です. 1 2 3 4 5 6 2 3 4 5 6 7 3 4 5 6 7 8 というようなファイルを行ごとに読み込んで、列ごとの和を算出させたいと考えています. 以下のようなプログラムをテスト作成してみたのですが,『 b=1のときのa[1] + b=2のときのa[1] 』のような計算ができません. どのようなプログラムを作成すればこの問題が解決できるか教えてください. #include <stdio.h> #include <string.h> int main(void) { FILE *fp; int i, j, k, no, b; double a[12]; double c[3]; char buffer[1024]; for(i=1; i<=2; i++) { sprintf(buffer, "PIVdemo_00%d%d.txt", i/10, i%10); printf("%s \n", buffer); fp = fopen(buffer,"r"); for(b=1; b<=12; b++) { fscanf(fp, "%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf", &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7], &a[8], &a[9], &a[9], &a[10], &a[11], &a[12]); printf("%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf \n", a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[9], a[10], a[11], a[12]); } for(b=0; b<=2; b++){ c[3]=a[b] + a[b+1]; printf("%lf", c[3]); putchar('\n'); } fclose(fp); } return (0); }

  • テキストファイルの出力について

    今、学校の課題でC言語を使ってプログラムを作っています。 20000個のデータを読み込んで、200個ずつに区切り、別々のテキストファイルで出力するというものです。 最初につくったのは、以下の通りです。 *********************************************** FILE *fp; { int b,i=0; data[0][i]=trend_data[0][i]; data[1][i]=trend_data[1][i]; fp = fopen("D1.txt","w"); for(i=0;i<=199;i++){ fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); } fclose(fp); fp = fopen("D2.txt","w"); for(i=200;i<=399;i++){ fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); } fclose(fp); ・・・ ***************************************** これだと20000まで繰り返し記述しなければならずかなり困難だと思いました。そこで、ループを作ろうとしたのですが、テキストファイルをループを使って複数作成する方法がわかりません。 以下のようなプログラムを作ったのですが、テキストファイルが一つしか作られませんでした。 どのように記述すればよいのでしょうか? **************************************** FILE *fp; { int a,i=0; int b=1; int c=199; data[0][i]=trend_data[0][i]; data[1][i]=trend_data[1][i]; start: fp = fopen("D[1+b].txt","w"); for(i=a;i<=c;i++){ fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); if(i > c) c = c+200; a = a+200; b++; goto start; fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); fclose(fp); } } ****************************************** よろしくお願い致します。

  • セグメンテーションエラーです

    行列の積の計算のプログラムです #include <stdio.h> #include <math.h> #define MN 1200 int main() { double A[MN][MN],B[MN][MN],C[MN][MN]; int i,j,k; double an=0,am=0,bn=0,bm=0; FILE *fp1; FILE *fp2; FILE *fp3; fp1 = fopen("1200A.dat", "r"); for(i=0;i<am;i++){ for(j=0;j<an;j++){ fscanf(fp1,"%lf",&A[i][j]); } } fclose(fp1); fp2=fopen("1200B.dat","r"); for(i=0;i<bm;i++){ for(j=0;j<bn;j++){ fscanf(fp2,"%lf",&B[i][j]); } } fclose(fp2); for(i=0;i<am;i++){ for(j=0;j<bn;j++){ C[i][j]=0.0; for(k=0;k<bm;k++){ C[i][j]+=A[i][k]*B[k][j]; } } } fp3=fopen("ans1200C.dat","w"); for(i=0;i<am;i++){ for(j=0;j<bn;j++){ fprintf(fp3,"%lf ",C[i][j]); } fprintf(fp3, "\n"); } fclose(fp3); return 0; }

  • この動画ファイルが見れないのです。

    GOMPlayerを使っています。サイトからダウンロードした動画なんですが、真空波動研で調べると、[9D 8B 5A 4B75 7E 93 4A D7 F4 6E 1A 49 F0 9E C2]: ZKu~ J n I [未対応形式] と出てしまいます。拡張子は一応AVIなんですが、極窓では ? となってしまいます。ファイルサイズは500MBです。これはもうあきらめたほうがいいのでしょうか?見れる物なら見たいのですが。よろしくお願いします。

  • スケジュール管理表を作っています。数式があれば教えてください。

    たとえば、下記のような表があります。 E 総数量 に対し、A~B期間内の日数を F~の月ごとのカレンダーに数量を反映させる事は出来ますでしょうか。 現在、数式を入れた例をのせましたが、F2 ~ I2 までに入る数式に苦戦しています。現在、数式例を載せましたが、一日の本数が反映するようになってしまいました。 A、Bを読み取る事はできたのですが、下のように、G2=93 H2=6というような結果になるように、どなたか知恵をお貸しください。 m( _ _ )m    A    B     C     D     E     F    G   H   I 1  開始  終了 期間日数 一日本数 総数量本 7月  8月  9月  10月 2   8/1  9/2     33     3     100      93  6 C2=(DATEDIF(A3,B3,"d")+1) D2=ROUNDDOWN(D3/C3,0) F2=IF(AND(MONTH(G$1)>=MONTH($A3),MONTH(G$1)<=MONTH($B3)),$E3,"")   

  • gifファイルの誤表示

    下のgifファイルをペイントで表示すると「6906」と表示されるのに、 Microsoft Photo Ediditorでは、「6」と表示されます。 これは何故でしょうか? これが原因で、あるサイトの画像が変に表示されます。 (迷惑がかかるといけないので、サイト名は言えませんが) gifファイルをアップできないので、16進数で示します。 宜しくお願い致します。 00000000 47494638 39611C00 0800B300 00000000 GIF89a.......... 00000010 FFFFFF00 00000000 00000000 00000000 ................ 00000020 00000000 00000000 00000000 00000000 ................ 00000030 00000000 00000000 00000000 0021F904 .............!.. 00000040 00000000 002C0000 00000700 08000004 .....,.......... 00000050 10304840 650076E6 49B1FEDE F5899C17 .0H@e.v.I....... 00000060 010021F9 04000000 00002C00 00000007 ..!.......,..... 00000070 00080000 04103048 40650076 E649B1FE ......0H@e.v.I.. 00000080 DEF5899C 17010021 F9040000 0000002C .......!......., 00000090 07000000 07000800 00041030 0440E5B4 ...........0.@.. 000000a0 4066CDFB A49B7589 21B84500 21F90400 @f....u.!.E.!... 000000b0 00000000 2C0E0000 00070008 00000410 ....,........... 000000c0 300440E5 B44066CD FBBE20F8 8D551001 0.@..@f... ..U.. 000000d0 0021F904 00000000 002C1500 00000700 .!.......,...... 000000e0 08000004 10304840 650076E6 49B1FEDE .....0H@e.v.I... 000000f0 F5899C17 01003B ......;