• 締切済み

プログラミングについて質問

現在、ストップウォッチの機能をもつプログラムを拡張して出力結果をテキストファイルに書き出すプログラムを作っているのですが、どうしても最後だけの「終了」部分のタイマーだけしかテキストファイルに書き出せません。(ストップウォッチの機能自体は完成しています) 理想としては下の出力結果(コンパイル)そのまま、テキストファイルに書き出したいです。 (「計測開始」や「一時停止」などの言葉部分も含む)(「使い方:」の部分は除く) ソースコードの適宣追加・修正をしてくだされば幸いです。 //ソースコード #include <windows.h> #include <mmsystem.h> #include <stdio.h> #include <stdlib.h> #include <conio.h> #pragma comment(lib, "winmm.lib") void disp(DWORD ms) //関数の定義 { printf("%02d:%02d:%02d:%03d\r",ms/3600000,(ms/60000)%60,(ms/1000)%60,ms%1000); } int main(void) { int c_flag = 0; int t_flag=0; DWORD counter=0,start,cur; DWORD lap=0; FILE *fp; printf("使い方:小文字の's'でカウントスタート.カウント中,小文字の's'で停止.次の's'でまた0からスタート\n"); printf("使い方:どんな状態でも小文字の'r'でカウントリセットして停止\n"); printf("使い方:qでプログラム終了\n"); printf("使い方:計測中にtを押すと一時停止.一時停止中にtで計測再開\n"); printf("使い方:計測中にlを押すとラップをとる\n\n"); if((fp=fopen("time.txt","wt"))==NULL){ printf("error"); exit(0); } disp(counter); //関数の呼び出し for (;;){ //無限ループ start = timeGetTime(); while (start == (cur = timeGetTime())) { if (kbhit()) { switch (_getch()){ //分かりやすくするためにswitch文に書き換えた case 's': disp(counter); printf(c_flag ? "\n計測中止\n" : "\n計測開始\n"); c_flag = !c_flag; t_flag=1; start = cur = timeGetTime(); counter = 0; break; fprintf(fp,"%02d:%02d:%02d:%03d\n",counter/3600000,(counter/60000)%60,(counter/1000)%60,counter%1000); fclose(fp); case 't': if(counter!=0){ //counterが働いているときに動作する。 disp(counter); printf(c_flag ? "\n一時停止\n":"\n計測再開\n"); c_flag = !c_flag; t_flag=!t_flag; start = cur = timeGetTime(); } break; fprintf(fp,"%02d:%02d:%02d:%03d\n",counter/3600000,(counter/60000)%60,(counter/1000)%60,counter%1000); fclose(fp); case 'r': disp(counter); printf("\nカウンタリセット,停止\n"); c_flag = 0; counter = 0; start = cur = timeGetTime(); break; fprintf(fp,"%02d:%02d:%02d:%03d\n",counter/3600000,(counter/60000)%60,(counter/1000)%60,counter%1000); fclose(fp); case 'l': if(counter!=0){ //counterが働いているときに動作する。 printf("\nラップ\n"); disp(counter-lap); lap=counter; printf("\n計測\n"); } break; fprintf(fp,"%02d:%02d:%02d:%03d\n",(counter-lap)/3600000,((counter-lap)/60000)%60,((counter-lap)/1000)%60,(counter-lap)%1000); fclose(fp); case 'q': printf("\n終了\n"); fprintf(fp,"%02d:%02d:%02d:%03d\n",counter/3600000,(counter/60000)%60,(counter/1000)%60,counter%1000); fclose(fp); return 0; //プログラム終了 } disp(counter); } } if ((c_flag != 0)&&(t_flag!=0)){ //それぞれのフラグが0でないときカウンタが働く counter += cur - start; disp(counter); } } } /* このソースコードの出力結果の例(コンパイル) 使い方:小文字の's'でカウントスタート.カウント中,小文字の's'で停止.次の's'で また0からスタート 使い方:どんな状態でも小文字の'r'でカウントリセットして停止 使い方:qでプログラム終了 使い方:計測中にtを押すと一時停止.一時停止中にtで計測再開 使い方:計測中にlを押すとラップをとる 00:00:00:000 計測開始 00:00:00:500 一時停止 00:00:00:500 計測再開 00:00:01:717 一時停止 00:00:01:717 計測再開 00:00:02:559 ラップ 00:00:02:559 計測 00:00:03:682 ラップ 00:00:01:123 計測 00:00:04:837 ラップ 00:00:01:155 計測 00:00:08:877 カウンタリセット,停止 00:00:00:000 計測開始 00:00:01:809 カウンタリセット,停止 00:00:00:000 計測開始 00:00:00:780 終了 */ /* テキストファイルの書き出し 00:00:00:780 */ という結果の状態です。

みんなの回答

  • suzukikun
  • ベストアンサー率28% (372/1325)
回答No.1

出力したいのを計測結果と同じようにfprintfで出力したら?

関連するQ&A

  • C言語

    現在、ストップウォッチの一時停止およびラップをとる機能のプログラムを作成しているのですが、 「計測中にtを押すと一時停止.一時停止中にtで計測再開」の部分は計測していないときに計測が開始されてしまいます。(計測中の処理は上手く動作できました) 「計測中にlを押すとラップをとる」という使い方の部分も同様に計測していないときに計測が開始されてしまいます。それから、実際に計測中にlを押したとき、ラップタイムではなく、スピリットタイムで表示されてしまい、上手く動作しません。 至急、修正または追加のほうお願いします。 #include <windows.h> #include <mmsystem.h> #include <stdio.h> #include <conio.h> #pragma comment(lib, "winmm.lib") void disp(DWORD time_value) { printf("%02d:%02d:%02d:%03d\r",time_value/3600000,(time_value/60000)%60,(time_value/1000)%60,time_value%1000); } int main(void) { int add_flag = 0; DWORD counter=0,start_time,cur_time; printf("使い方:小文字の's'でカウントスタート.カウント中,小文字の's'で停止.次の's'でまた0からスタート\n"); printf("使い方:どんな状態でも小文字の'r'でカウントリセットして停止\n"); printf("使い方:qでプログラム終了\n\n"); printf("使い方:計測中にtを押すと一時停止.一時停止中にtで計測再開\n"); printf("使い方:計測中にlを押すとラップをとる\n"); disp(counter); for (;;){ start_time = timeGetTime(); while (start_time == (cur_time = timeGetTime())) { if (kbhit()) { switch (_getch()){ case 's': disp(counter); printf(add_flag ? "\n計測中止\n" : "\n計測開始\n"); add_flag = !add_flag; start_time = cur_time = timeGetTime(); counter = 0; break; case 't': disp(counter); printf(add_flag ? "\n一時停止\n" : "\n計測再開\n"); add_flag = !add_flag; start_time = cur_time = timeGetTime(); break; case 'r': disp(counter); printf("\nカウンタリセット,停止\n"); add_flag = 0; counter = 0; start_time = cur_time = timeGetTime(); break; case 'l': disp(counter); printf("\nラップ\n"); add_flag = 1; break; case 'q': printf("\n終了\n"); return 0; } disp(counter); } } if (add_flag != 0){ counter += cur_time - start_time; disp(counter); } } }

  • C言語

    ストップウォッチの一時停止の機能をもつプログラムを作成しているのですが、上手く動作しません。 (一時停止し、再開してもその状態から再開できない状態) #include <windows.h> #include <mmsystem.h> #include <stdio.h> #include <conio.h> #pragma comment(lib, "winmm.lib") int main(void) { int command;//キーボード入力の文字判別用変数 int quit_flag = 1;//プログラム終了フラグ 0で停止 int c_flag = 0;//カウント状態取得用フラグ 1:カウント中,0:停止中 int h,m,s,ms;//左から,時間,分,秒,ミリ秒 int b,c,d,e; int a; int f,g,i; DWORD start,cur; printf("使い方:小文字の's'でカウントスタート.カウント中,小文字の's'で停止.次の's'でまた0からスタート\n"); printf("使い方:どんな状態でも小文字の'r'でカウントリセットして停止\n"); printf("使い方:qでプログラム終了\n\n"); printf("使い方:tを押すと一時停止.一時停止中,tで計測再開\n"); h=m=s=ms=0; b=c=d=e=0; while(quit_flag != 0)//quit_flagが0以外ならループ { while(!_kbhit())//何かキーが押されるまでループ { if(c_flag != 0)//c_flagが0以外であればカウント中ということ. { h=m=s=ms = timeGetTime() - start; b=h/3600000; c=(m/60000)%60; d=(s/1000)%60; e=ms%1000; cur=timeGetTime(); ms=(cur-g); f=ms; } printf("%02d:%02d:%02d:%03d\r",b,c,d,e); } command=_getch();//ループを抜けるために押されたキーの内容をcommandに代入. if(command=='s' && c_flag == 0) { printf("\n計測開始\n"); c_flag = 1; start = timeGetTime() ; h=m=s=ms=0; } else if(command=='t' && c_flag != 0) { printf("\n一時停止\n"); c_flag = 0; a=c_flag; //計測開始時にtを押すとバグが発生するため } else if(command=='t' && a==0) { printf("\n計測再開\n"); c_flag = 1; f=timeGetTime(); } else if(command=='s') { printf("\n計測中止\n"); c_flag = 0; } else if(command=='r') { printf("\nカウンタリセット,停止\n"); c_flag = 0; h=m=s=ms=0; } else if(command=='q') { printf("\n終了\n"); quit_flag = 0; } else if(command=='l' && c_flag==1) { c_flag=0; printf("\nラップ\n"); printf("%02d:%02d:%02d:%03d\n",h/3600000,(m/60000)%60,(s/1000)%60,ms%1000); c_flag=1; } } return 0; } 差分をとれば良いと聞いたのですが、どのようにとれば良いか全く分からなくて困っています。 ソースコードを修正または適宣追加をしてくだされば幸いです。

  • C言語

    ストップウォッチの一時停止の機能およびラップ機能をもつプログラムを作成しているのですが、上手く動作しません。 (一時停止し、再開してもその状態から再開できない状態) (ラップのほうはスピリットで出力されてしまう) #include <windows.h> #include <mmsystem.h> #include <stdio.h> #include <conio.h> #pragma comment(lib, "winmm.lib") int main(void) { int command;//キーボード入力の文字判別用変数 int quit_flag = 1;//プログラム終了フラグ 0で停止 int c_flag = 0;//カウント状態取得用フラグ 1:カウント中,0:停止中 int h,m,s,ms;//左から,時間,分,秒,ミリ秒 int b,c,d,e; int a; int f,g,i; DWORD start,cur; printf("使い方:小文字の's'でカウントスタート.カウント中,小文字の's'で停止.次の's'でまた0からスタート\n"); printf("使い方:どんな状態でも小文字の'r'でカウントリセットして停止\n"); printf("使い方:qでプログラム終了\n\n"); printf("使い方:tを押すと一時停止.一時停止中,tで計測再開\n"); printf("使い方:lを押すとラップをとる.\n"); h=m=s=ms=0; b=c=d=e=0; while(quit_flag != 0)//quit_flagが0以外ならループ { while(!_kbhit())//何かキーが押されるまでループ { if(c_flag != 0)//c_flagが0以外であればカウント中ということ. { h=m=s=ms = timeGetTime() - start; b=h/3600000; c=(m/60000)%60; d=(s/1000)%60; e=ms%1000; cur=timeGetTime(); ms=(cur-g); f=ms; } printf("%02d:%02d:%02d:%03d\r",b,c,d,e); } command=_getch();//ループを抜けるために押されたキーの内容をcommandに代入. if(command=='s' && c_flag == 0) { printf("\n計測開始\n"); c_flag = 1; start = timeGetTime() ; h=m=s=ms=0; } else if(command=='t' && c_flag != 0) { printf("\n一時停止\n"); c_flag = 0; a=c_flag; //計測開始時にtを押すとバグが発生するため } else if(command=='t' && a==0) { printf("\n計測再開\n"); c_flag = 1; f=timeGetTime(); } else if(command=='s') { printf("\n計測中止\n"); c_flag = 0; } else if(command=='r') { printf("\nカウンタリセット,停止\n"); c_flag = 0; h=m=s=ms=0; } else if(command=='q') { printf("\n終了\n"); quit_flag = 0; } else if(command=='l' && c_flag==1) { c_flag=0; printf("\nラップ\n"); printf("%02d:%02d:%02d:%03d\n",h/3600000,(m/60000)%60,(s/1000)%60,ms%1000); c_flag=1; } } return 0; } 差分をとれば良いと聞いたのですが、どのようにとれば良いか全く分からなくて困っています。 上記のソースコードを基に適宣追加をしてくだされば幸いです。

  • C言語に関する質問

    初期位置を1mとして、ある物体の自由落下をシミュレートするプログラムを 「高さ=1-1/2×重力加速度×経過時間の二乗」 という考え方を 「初期位置を1m,落下速度を「重力加速度×1ループにかかる時間」とし, 高さを,「1ループ前の高さ」+「落下速度×1ループにかかる時間」」という考え方に変更して計算するようなプログラムにしたいのですが、どのように変えれば分かりません。(というか意味が分からないです) 何か公式などのヒントやソースコードより、どの部分をこのように変えれば良いという指摘があれば分かりやすく教えてください。 #include <windows.h> #include <mmsystem.h> #include <stdio.h> #include <conio.h> #pragma comment(lib, "winmm.lib") int main(void) { int command;//キーボード入力の文字判別用変数 int quit_flag = 1;//プログラム終了フラグ 0で停止 int c_flag = 0;//カウント状態取得用フラグ 1:カウント中,0:停止中 int h,m,s,ms;//左から,時間,分,秒,ミリ秒 double y=1; DWORD start; printf("使い方:小文字の's'でカウントスタート.カウント中,小文字の's'で停止.次の's'でまた0からスタート\n"); printf("使い方:どんな状態でも小文字の'r'でカウントリセットして停止\n"); printf("使い方:qでプログラム終了\n\n"); h=m=s=ms=0; while(quit_flag != 0)//quit_flagが0以外ならループ { while(!_kbhit())//何かキーが押されるまでループ { if(c_flag != 0)//c_flagが0以外であればカウント中ということ. { h=m=s=ms = timeGetTime() - start; y=1-(1.0/2.0)*(9.8/1000000)*ms*ms; printf("t=%d[ms],y=%f[m]\r",ms,y); //printf("t=%02d:%02d:%02d:%03d,y=%f[m]\r",h/3600000,(m/60000)%60,(s/1000)%60,ms%1000,y); } //printf("%02d:%02d:%02d:%03d\r",h/3600000,(m/60000)%60,(s/1000)%60,ms%1000); if(c_flag==0){ printf("t=%d[ms],y=%f[m]\r",ms,y); //printf("t=%02d:%02d:%02d:%03d,y=%f[m]\r",h/3600000,(m/60000)%60,(s/1000)%60,ms%1000,y); } } command=_getch();//ループを抜けるために押されたキーの内容をcommandに代入. if(command=='s' && c_flag == 0) { printf("\n計測開始\n"); c_flag = 1; start = timeGetTime() ; h=m=s=ms=0; /* if(y==0){ printf("\n終了\n"); quit_flag = 0; } */ } else if(command=='s') { printf("\n計測中止\n"); c_flag = 0; } else if(command=='r') { printf("\nカウンタリセット,停止\n"); c_flag = 0; h=m=s=ms=0; } else if(command=='q') { printf("\n終了\n"); quit_flag = 0; } } return 0; }

  • プログラミングの変数について質問です。

    プログラミングの変数について質問です。 次のプログラミングは自分で書いたプログラムの一部です。 void inputmonster(int x[][3], struct monster monster) { int i, s, t, m, n; for(t = 0; t < 2; t++){ s = 0; while (s < 1){ printf("player%dは好きなモンスターを3つ選んでください\n\n", t+1); for (i = 0; i<3; i++){ printf("%d体目を選んでください。\n\n", i+1); for(m = 0; m < 5; m++) printf("%d, %s\n", m+1, monster[m].name); scanf("%d", &x[t][i]); printf("%d体目 : %s\n\n", i+1, monster[x[t][i]-1].name); } printf("これでよろしいですか?\n"); for(i = 0; i<3; i++) printf("%d体目 : %s ", i+1, monster[x[t][i]-1].name); printf("1、はい 2、いいえ\n"); scanf("%d", &n); if(n == 1) s = 1; else s = 0; } } } これをコンパイルすると次のようなエラーが表示されます。 monsterbattle.c: 関数 ‘inputmonster’ 内: monsterbattle.c:497:63: エラー: 添字が付けられた値が、配列、ポインタまたはベクト ルではありません for(m = 0; m < 5; m++) printf("%d, %s\n", m+1, monster[m].name); ^ monsterbattle.c:499:45: エラー: 添字が付けられた値が、配列、ポインタまたはベクト ルではありません printf("%d体目 : %s\n\n", i+1, monster[x[t][i]-1].name); ^ monsterbattle.c:503:68: エラー: 添字が付けられた値が、配列、ポインタまたはベクト ルではありません for(i = 0; i<3; i++) printf("%d体目 : %s ", i+1, monster[x[t][i]-1].na me); どのように改変すればこのようなエラーを表示しないようにできるのでしょうか? 基本的な質問ではあると思いますが、是非教えていただけるとありがたいです。 よろしくお願いします。

  • C言語のプログラミングで困っています

    C言語を勉強しています。まだまだ初心者で分からないことだらけなのですが、今回はファイル入出力の部分が分からず苦戦しています。 『100個の実数が入った2つのテキストファイルから数値を読み込み、  絶対値を求めるなどの計算をする』プログラムを作成しているのですが、 コンパイルし実行すると強制終了してしまいます。 プログラムは、 void main(void) { FILE *fp; double c[50000];   double d[50000];   double e[50000]; int n = 0;   int m = 0;   int i = 0;   char fname[80];   char fname2[80]; printf("ファイル名 : ");    gets(fname); if((fp = fopen(fname, "r")) == NULL){ printf("ファイルがオープンできません\n"); exit(1); } printf("\n"); while (fscanf(fp,"%lf",&c[i])!=EOF){ printf("%3d : %3lf",++n,c[i]); printf("\n"); i++; } printf("\n"); i=0; n=0; printf("ファイル名 : ");    gets(fname2); if((fp = fopen(fname2, "r")) == NULL){ printf("ファイルがオープンできません\n"); exit(1); } printf("\n"); while (fscanf(fp,"%lf",&d[i])!=EOF){ printf("%3d : %3lf",++n,d[i]); printf("\n"); i++; } …(以下計算) のようになっています。 整数のデータで計算を行うと、正常に動くのですが…。 コンパイルしてもエラーが出ないので、どこが悪いのかわからず困っています。 どなたか教えていただけないでしょうか。お願いしますm(_ _)m

  • c言語 

    答えを0にするこまち算のプログラムを組んでみたのですが、ここからどうしても進まなくなってしまいました。 自分ではいけるかなと思ったのですが、9-8-7+65-4321=9など答えがありえない数になってしまいます。 どこがいけないか教えてください。むしろ最初から組み直した方がよいのでしょうか… #include <stdio.h> int cul(); int num[9] ={9,8,7,6,5,4,3,2,1}; int total;/**/ int kigou[8]={0,0,0,0,0,0,0,0}; int main(){ for(kigou[0]=0;kigou[0]<3;kigou[0]++){ for(kigou[1]=0;kigou[1]<3;kigou[1]++){ for(kigou[2]=0;kigou[2]<3;kigou[2]++){ for(kigou[3]=0;kigou[3]<3;kigou[3]++){ for(kigou[4]=0;kigou[4]<3;kigou[4]++){ for(kigou[5]=0;kigou[5]<3;kigou[5]++){ for(kigou[6]=0;kigou[6]<3;kigou[6]++){ for(kigou[7]=0;kigou[7]<3;kigou[7]++){ keisan(); } } } } } } } } return 0; } int keisan(){ int n =0; int flag = 0; int t = 0; int i = 0; total = num[0]; /* for (n=0;n<9;n++) printf("kigou[%d] == %d",n,kigou[n]);確かめ*/ for(;n<8;n++){ if(kigou[n] == 0 && n == 0){ total = total * 10 + num[n+1]; for(flag=1;kigou[n+flag]==0 && (n+flag)<9 ;flag++){ total = total * 10 + num[n+flag+1]; } n = n + flag; } flag=0; if(kigou[n]!= 0){ for(flag=1;kigou[n+flag]==0 && (n+flag)<9 ;flag++){ t = num[n+1] * 10 + num[n+flag+1]; } n = n+ flag; total = total + t; } } /*0になる計算式の表示*/ kigou[8]=2;/*表示しないために空白を入れる*/ if(total==0){ for(i=0;i<9;i++){ printf("%d",num[i]); if(kigou[i]==0) printf("+"); if(kigou[i]==1) printf("-"); if(kigou[i]==2) printf(""); } printf("=%d\n",total); } return 0; }

  • プログラムについて質問です。

    プログラム初心者なのですが最短経路を探すプログラムを書きました。実行もできるのですが時間がかなりかかるので時間を短縮したいのですがどうすればいいでしょうか。環境はvisualC++2008を使ってます。 #include<stdio.h> #include<limits.h> #include<stdlib.h> #include<time.h> #define N 1000 #define E 3998 int e[N+1][N+1]; int w[N+1][N+1]; int s, sink; int minLen;//始点sからどの点に移るか決める int j; int m; int u[N+1];//距離 int f[N+1]={0}; int prev[N+1];//通ったノード int start = 1; int goal = 4; void tansaku(int start) { for ( j=0 ; j<=N ; j++ ){ u[j] = 1000; } //始点s=0とする s = start; f[s] = 1; u[s] = 0; for( m=1 ; m<=N ; m++ ){ printf("現在位置[%d]\n", s); //点sは最短経路決定 for( j=1 ; j<=N ; j++ ){ printf("e[%d][%d]=%d \nw[%d][%d]=%d\n\n", s, j, e[s][j], s, j, w[s][j]); if( e[s][j] != 1 ){ //printf("[%d]には繋がってない\n", j); //printf("-----------------------------------------\n"); continue; //枝(s,j)が存在しなければ以下の処理をスキップする } printf("[%d]に繋がってる→", j); if( u[s]+w[s][j] < u[j] ){ printf("重み更新!\n"); u[j]=u[s]+w[s][j]; prev[j]=s; //点jへの経路長を更新、最短経路規定の点は除外 printf("u[%d] = %d\n", j, u[j]); printf("prev[%d] = %d\n", j, prev[j]); }else{ printf("重み更新なし...\n"); } printf("-----------------------------------------\n"); } /***************** 点sからどの点に移るか決める工程*******************/ minLen = 1000; for( j=1 ; j<=N ; j++ ){ if( f[j] == 1 ){ printf("%dは通過済み\n", j); continue; } printf("u[%d] = %d\n", j, u[j]); if( u[j] < minLen ){ //点sは経路長が最短 minLen = u[j]; f[j] = 1; s = j; } //ヒープを使う } if(s == goal){ printf("到着!!!!!\n"); minLen = 0; printf("[経路]:"); while(s != start){ printf("%d ←", s); s = prev[s]; } printf("%d\n距離=%d\n", start, u[goal]); exit(1); } printf("次は%dです。\n", s); } printf("%d\n", prev[N]); } int main(void) { FILE *fp; fopen_s(&fp, "text2.txt","r"); while ((fscanf_s(fp, "%d %d %d", &s, &j, &minLen)) != EOF){ printf("read\n"); e[s][j] = 1; //以下は1→2と2→1を同一に見なす w[s][j] = minLen; e[j][s] = 1; w[j][s] = minLen; } fclose(fp); tansaku(1); return 0; }

  • ファイル処理について

    大学の課題なのですが、何度取り組んでもエラーになるため、間違いのご指摘、または正答を教えていただけないでしょうか。 問題は以下のものです。 【問題】 ファイルから整数を読み込み,その値によってfpの読み込み位置をかえ,何度目の読み込みで0を読み込んだかを表示するプログラムを作成せよ. ファイルの内容の例 2,4,0, fpの読み込み位置を変えるにはfseekという関数を利用する. fseekの使い方: 現在の読み取り位置xだけずらすには, fseek(ファイルポインタ, x, SEEK_CUR); と記述する. STEP 1 データを一区切りで読み取る("2,"や"-4,"などの整数とコンマの組) 2 読み取ったデータに応じてfpを移動させる("2,"なら2移動,"-4,"なら-4移動) 3 0を読むまで繰り返す +++++*+++++fseek-exercise.c+++++*+++++ #include <stdio.h> int main(void){ FILE *fp; int c; int i; int count=0; char filename[60]; printf("ファイル名 :"); scanf("%s",filename); //ファイルを開く // (* ここに解答を書き加える *) while(1){ printf("読み込み前 : %ld\n",ftell(fp)); //fpから値を読む // (* ここに解答を書き加える *) printf("読み込んだ値は%dです\n",c); printf("読み込み後 : %ld\n\n",ftell(fp)); //読み込み位置をずらす // (* ここに解答を書き加える *) } printf("%d回目です.",count); fclose(fp); return(0); } // 以上になります。 自分で作ったプログラムは以下のようになりました。 #include <stdio.h> int main(void){ FILE *fp; int c; int i; int count=0; char filename[60]; printf("ファイル名 :"); scanf("%s",filename); //ファイルを開く // fp = fopen(filename,"r"); if(fp == NULL){ printf("cannot open\n"); exit(1); } while(1){ printf("読み込み前 : %ld\n",ftell(fp)); //fpから値を読む // c = fgetc(fp); printf("読み込んだ値は%dです\n",c); printf("読み込み後 : %ld\n\n",ftell(fp)); //読み込み位置をずらす // if(c > '0' || c< '9'){ i = atoi(&c); count++; if(i == 0){ break; } fseek(fp,i,SEEK_CUR); } } printf("%d回目です.",count); fclose(fp); return(0); } // どこを訂正していいのかわかりません。 どうぞ、よろしくお願いいたします。

  • プログラムを組んだのにエラーが出る!!!

    #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void) { int i, j; int m, flag, count; FILE *fp; if (NULL == (fp = fopen("prime.txt", "w"))) { printf("Cannot open output file\n"); exit(1); } count = 0; for (i = 2; i < 1000; i++) { m =sqrt(i); flag = 1; for (j = 2; j <= m; j++) { if (i % j == 0) { flag = 0; break; } count++; } if (flag) { printf("%4d ", i); fprintf(fp," %4d", i); } } printf("\n乗除回数:%d\n", count); fprintf(fp,"\n乗除回数 %d\n", count); fclose(fp); return 0; } (通常課題2-3 1000以下の正の整数値のうち,素数をすべて計算し,結果をファイルに格納するプログラムを作れ. .また、計算の実行の中で乗除を行った回数もあわせて表示し、ファイルに格納すること 実行結果 2 3 5 7 11 13 17 … 991 997 乗除回数:78022 どこが間違ってるのか指摘してください お願いします!