printfが後で実行されます。エクリプスで実行結果が思いと違う問題について

このQ&Aのポイント
  • エクリプスを使用してプログラムを作成しましたが、実行結果が予想と異なる問題が発生しました。
  • プログラムのコードは正しいと思われますが、printfの内容が入力後でなければ表示されないという問題が発生しています。
  • 初心者のため、解決策がわからず困っています。ご協力いただける方がいらっしゃいましたら、お願いいたします。
回答を見る
  • ベストアンサー

printfが後で実行されます。

最近、プログラミングを始めた初心者です。 エクリプスを使い、次のようなプログラムを作ったのですが、 実行結果が思いと違うのです。 #include<stdio.h> int main(void) { int i, dt; printf("数値を入力:"); scanf("%d", &dt); i = 2; while(dt != 1) { while(dt % i == 0) { dt = dt / i; printf("%d\n", i); } i ++; } return 0; } 実行結果 60 数値を入力:2 2 3 5 数値を入力:の後に、scanfで入力したいのですが、 入力したあとでないと、printfの内容が表示されないのです。 コードは大丈夫だと思うのですが、、、 初心者なので、何をどうすれば解決するのか検討もつきません。 どなたかお分かりになる方、よろしくお願いいたします。

  • ferc
  • お礼率69% (49/71)

質問者が選んだベストアンサー

  • ベストアンサー
  • PED02744
  • ベストアンサー率40% (157/390)
回答No.2

scanf()のまえに、fflush() をSTDOUTに対して実施すればよいのではないでしょうか。

ferc
質問者

お礼

ご回答ありがとうございます。 ご指摘のとおりにやってみたら、できました。 ありがとうございました。 本当に助かりました。

その他の回答 (1)

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.1

bufferingのせいですね。 fprintf(stderr, "数値を入力:"); なら希望通りになりますか?

ferc
質問者

お礼

ご回答ありがとうございます。 ご指摘のとおりにやってみましたが、 状況は変わらずです・・・。

関連するQ&A

  • printf()で出力したいんですが?

    #include <stdio.h> int main( void ) { int air[4]; int i; i = 0; printf( "データ入力\n" ); do{ scanf( "%d\t", &air[ i++ ]); } while(air[ i - 1 ] > 0 ); printf( "%d\n", i ); return 0; } このプログラムはコンパイル出来ますが、期待していたprintf関数での出力ができません。 その理由として何がありますか?関数の使い方が間違っているのか、DO~WHILE文が使えない場所 なのか、もし直すとすればどう直せばいいのですか。

  • 数値の連続入力終了条件について

    C言語初心者です。よろしくお願いします。 早速質問なのですが、while文を使ったscanf()関数による数値連続入力で、 ◎1---------------------------------------------- #include<stdio.h> int main(void) {      double dt,sum=0.0;      while(scanf("%lf",&dt) !=EOF){   sum=sum+dt; }   printf("合計=%f\n",sum); return 0; } ---------------------------------------------- ◎1のようにすれば、Ctrl+ZでEOFが返されたら終了とわかるのですが、今度は「0」が入力されたら処理を終了するというプログラムで、 ◎2---------------------------------------------- #include<stdio.h> int main(void) {      double dt,sum=0.0;      while(scanf("%lf",&dt) !=0.0){   sum=sum+dt; }   printf("合計=%f\n",sum); return 0; } ---------------------------------------------- ◎2のようにすると「0」が入力されても、終了せず、以下に示す◎3のように、しないと終了出来ません。 ◎3---------------------------------------------- #include<stdio.h> int main(void) {      double dt,sum=0.0;          scanf("%lf",&dt);      while(dt!=0.0){   sum=sum+dt; scanf("%lf",&dt); }   printf("合計=%f\n",sum); return 0; } ---------------------------------------------- ◎2で何故、◎1のように出来ず、◎3のようなscanf()を1回目、2回目と判定を入れなければならないか教えて下さい。

  • printfするのとしないのとで実行結果が異なる

    現在、ようやくC言語にも慣れてきてソースが自力で書けるようになってきた者です。ところが、ちょっとした問題に悩んでいます。 当該ソースは以下のとおりです。 #include<stdio.h> int main(void){ #define NINZU 5 int i,j,k,temp,va[NINZU]; for(i=0;i<NINZU;i++){ printf("va[%d]=",i); scanf("%d",&va[i]); } for(j=0;j<NINZU;j++){ for(k=0;k<NINZU;k++){ if(va[k]<va[(k+1)]){ printf("比較材料 %d\n",va[k]); printf("比較相手 %d\n",va[(k+1)]); temp=va[k]; va[k]=va[(k+1)]; va[(k+1)]=temp; } } } printf("1番の人 : %d\n",va[0]); printf("2番の人 : %d\n",va[1]); return 0; } 簡単なソースで、入力された5個の数値を並び替え1位と2位を表示するというものなのですが、実行結果が、「比較材料・比較相手」というprintfを外すと、「1番の人」の表示がどんな値を入力しても1245056になってしまいます。 printfが入っていれば正常に表示されるのですが… 大至急、知りたいです!!!

  • printf、最大値の出し方

    3つの整数を入力し、どれが最大値かを判別するプログラムを作りたいです。 #include<stdio.h> main() { int i, x, max; max = 0; i = 1; while(i <= 3) { printf("整数:"); scanf("%d",&x); if (x > max) { max = x; } i++; } printf("最も大きい整数は%d\n", max); } とすると 整数:と3回表示されますが、これを一つ目の整数:、二つ目の整数:3つ目の整数:と表示されるようなプログラムにするにはどうしたらよいでしょうか。

  • for文内でscanf関数により配列に数値を格納することについて

    プログラミング初心者です。 よろしくお願いします。 ◎1------------------------------------ #include<stdio.h> int main(void) { int i,dt[3]; for(i=0;i<3;++i){ printf("dt[0]=%d\n",dt[0]); printf("dt[1]=%d\n",dt[1]); printf("dt[3]=%d\n",dt[3]); scanf("%d",&dt[i]); printf("i=%d\n",i); puts(""); if(dt[i]==0){ break; } } printf("dt[0]=%d\n",dt[0]); printf("dt[1]=%d\n",dt[1]); printf("dt[2]=%d\n",dt[2]); printf("dt[3]=%d\n",dt[3]); printf("i=%d\n",i); puts(""); i=1; while(1){ printf("%d ",i); if(1000<i){ break; } i*=2; } puts(""); return 0; } ---------------------------------------- ◎2------------------------------------ #include<stdio.h> int main(void) { int i,dt[2]; for(i=0;i<3;++i){ printf("dt[0]=%d\n",dt[0]); printf("dt[1]=%d\n",dt[1]); printf("dt[2]=%d\n",dt[2]); scanf("%d",&dt[i]); printf("i=%d\n",i); puts(""); if(dt[i]==0){ break; } } printf("dt[0]=%d\n",dt[0]); printf("dt[1]=%d\n",dt[1]); printf("dt[2]=%d\n",dt[2]); printf("i=%d\n",i); puts(""); i=1; while(1){ printf("%d ",i); if(1000<i){ break; } i*=2; } puts(""); return 0; } ---------------------------------------- 以上2つのプログラムについて疑問があります。 まず◎1については、あえて添え字のdt[3]の値を見てみようと思ったら、iの値が入っているとわかりました。 しかし、何故添え字の番号の配列にiの値が入っているのかがわかりません。 次に◎2ですが、3回目のループで、添え字の番号の配列自身に入力した数値を格納すると、iと添え字番号配列に入力した数値が入っていました。 何故このようになっているのか疑問です。 以上のような疑問があります。 添え字の番号の配列とiが何か関連があるようですがいまいちわかりません。 教えていただけると嬉しいです。

  • C言語でscanf()が先に実行されるのはなぜですか?

    C言語でscanf()が先に実行されるのはなぜですか? #include <stdio.h> int main(void){ int intNum; printf("整数を入力してください:\n"); scanf("%d", &intNum); printf("入力値は:%d\n",intNum); return(0); }

  • プログラムがうまく動作しない

    int型変数aとbにそれぞれ値を入力し、それらをかけた結果を出力するプログラムをつくりました。もし文字が入力されたら yarinaoshi と表示し再びaに値を入力するように指示します。しかしこのプログラムはデバグしても何のエラーもないのですが、実際に実行し文字を入力すると Microsoft C++ Debug Library というダイアログボックスが出てきて Abort, Retry, Ignore の三つのボタンがでてきます。どれを選んでも作業は止まってしまい、思ったような結果が得られません。一体どうすればいいのでしょうか?  以下がそのプログラムのソースコードです。 #include <stdio.h> #include <ctype.h> #include <stdlib.h> int kakezan(int a, int b); int main(void) { int dt= 1; int a, b; while(dt !=0){ printf("Int1:"); scanf("%d", &a); if(isalpha(a) != 0) { printf("yarinaoshi"); scanf("%d", &a); } printf("Int2:"); scanf("%d", &b); dt = kakezan(a, b); printf("Result:%d\n", dt); } return 0; } int kakezan(int a, int b) { int dt; return dt = a*b; }

  • 実行結果の順番がおかしいんです・・・・・(。。;)

    現在C言語の勉強をしている初心者です。突然ですが 例えば、このようにプログラムしたら・・・ #include <stdio.h> int main(void) { int n; printf("何か数字を入力してください:"); scanf("%d",&n); printf("\n入力した数字は%dです。\n",n); return 0; } <<実行結果>>  何か数字を入力してください:2 [Enter]  入力した数字は2です。 って普通は出力されますよね??しかし、私の使っているBorland C++ Compiler 5.5 では <<実行結果>>  2 [Enter]  何か数字を入力してください:  入力した数字は2です。 っていう風に、まず、なにか入力しないとprintfの内容を出力してくれないんです。(汗)これって実行結果の順番がおかしいですよね・・・(。。;) どうかこの状態を直せるアドバイスをください。 よろしくお願い致します。m(__)m

  • printfを代入する?

    #include <stdio.h> int main(void) { int kaerichi,nyuuryokumoji; char moji[40]; printf("\n数字を入力してください:"); scanf("%d",&nyuuryokumoji); kaerichi=printf("%d",nyuuryokumoji); printf("\n入力数字の桁数は%dです\n",kaerichi); printf("\n文字を入力してください:"); scanf("%s",&moji); kaerichi=printf("%s",moji); printf("\n入力された文字は%dです\n",kaerichi); return(0); } このプログラムでkaerichi=print("d",nyuuryokumoji); とありますがどういう意味でしょうか? 変数に数字などを入れるのはわかるのですが printfをいれるというのがあまりよくわかりません あとどうして桁数がでるのでしょうか?

  • scanf関数の戻り値について

    --------------------------------------- #include<stdio.h> int main(void) { int dt; while(scanf("%d",&dt)==1){ if(dt==0){ printf("0は入力しないでください\n"); puts(""); } else if(dt<0){ dt=-dt; printf("入力値の絶対値は「%d」です\n",dt); puts(""); } else{ printf("入力値の絶対値は「%d」です\n",dt); puts(""); } } return 0; } --------------------------------------- 以上のプログラムについて疑問があります。 scanf関数の戻り値が1の間、繰り返すというもので、入力の時に整数入力ですが、あえて実数である1.1を入れたとします。 scanfの戻り値は1で、dtには整数部の1だけ設定されていたので、これでもうまくいくのかと思ったのですが、次の入力はscanfの戻り値が0になっていて出来ませんでした。 何故0になっているのかわかりません。 入力バッファに何か残ってしまっているということなのでしょうか? 以上教えていただけると嬉しいです。

専門家に質問してみよう