• ベストアンサー

"scanf"でエンターで改行させない方法

#include<stdio.h> int main(void){ int x; scanf("%d", &x); printf("%d\n", x); } scanfの入力カーソルの所で何も入力せずにエンターを押すと1行下にカーソル位置が行ってしまいます。 それをエンターを押してもカーソル位置を変えないようにしたいのですがどうすればいいでしょうか?

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

  • ベストアンサー
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

scanfの仕様上、回避不能だね。 ただ、ちょっとだけ別の逃げ方が有るよ。 それは直後に中身を調べて空っぽだったらカーソルを↑に移動するコントロールコードを出力する方法。 時々さ、プロンプトの処理なのに同じ行のまま「○%進行中」みたいのを維持してるのが有るでしょ? あれはその方法で元の行に無理矢理戻して上書きしてるんだよ。

wachi888
質問者

お礼

>時々さ、プロンプトの処理なのに同じ行のまま「○%進行中」みたいのを維持してるのが有るでしょ? あれはその方法で元の行に無理矢理戻して上書きしてるんだよ。 そういうことだったんですか。勉強になります。 色々試してみたいと思います。ありがとうございました。

関連するQ&A

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

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

  • 簡単なscanf文が、わかりません。

    #include <stdio.h> int main(void) { int data; scanf("%d",&data); /*入力部分*/ printf("%d\n",data); return 0; } 参考書には、キーで入力、enterキー押すと、はじめて文字が画面に表示されるとなってましたが。 実際は、enter押さずに、キーボードでキー入力した時点で文字が表示されますが、 どこが間違っているんでしょうか? コンパイラは、 Borland C++ Compiler です。 お願いします。

  • scanf が無視されます

    例えば下のようなプログラムを実行するとmain関数の scanf が無視 されてしまいますが何故なのでしょうか。コンパイラはLSI C-86試食版です。 ----------------------------- #include <stdio.h> int main ( ) ; void aa ( ) ; int main ( ) { int i ; aa ( ) ; printf ( " input i. \n " ) ; scanf ( " %d ", &i ) ; printf ( " i = %d\n ", i ) ; } void aa ( ) { int x, y ; while ( scanf ( " %d ", &x ) ! = EOF ) { y = x ; printf ( " y= %d\n ", y ) ; } } --------------------------------

  • scanf文がうまくいかないのですが・・・

    下のようなプログラムを実行するとうまくいかないのですが、何故なのでしょう。 どうかお教えください。 #include<stdio.h> int main(void) { int i; char n; for(i = 0; i < 10; i++) { printf("nを入力してください>>>"); scanf("%c",&n); printf("%c\n",n); } return 0; }

  • scanf()関数の使い方について

    はじめまして。 質問があります。 まずは、以下のコードを見てください。 ---------------------------------------------------------------- #include<stdio.h> int main(void) { char c; int i; printf("0を入力すると終了します。\n"); while(1) { printf("文字を入力してください=>"); scanf("%c",&c); printf("入力した文字は %c です。\n",c); printf("数字を入力してください=>"); scanf("%d",&i); if(i==0) { break; } printf("入力した数字は %d です。\n",i); } return 0; } ---------------------------------------------------------------- 上のコードを実行すると、初回はscanf()はcharとintの両方とも 入力待ちになってくれるのですが、2回目以降はcharは入力待ちに なってくれません。これは、なぜなのでしょうか? ご教授お願いします。 現在VC++6.0を使用しております。

  • scanf関数 バッファに残ったエンター入力の扱い

    前日質問にて以下のプログラムで、二度目のscanf()が無視されてしまう 旨質問したところ、1度目のscanfでの入力でエンターがバッファに残って いるため、それを取り込んでしまうという回答いただきました。 改善方法として(*)のscanf関数で「%c」の前に空白を入れたところ 正常に動作し、改善されたのですが、なぜ改善されたのかご教示願えませんでしょうか? よろしくお願いします #include <stdio.h> int main(void) {   int g;   char ch;      do {     printf("何ガロンですか?: ");     scanf("%d", &g);     printf("%.2fリットルです\n", 3.7854 * g);     printf("また計算しますか?Y/N : "); (*) scanf("%c", &ch);   } while(ch == 'Y' || ch == 'y');   return 0; }

  • scanf関数について

    scanfで数字を入力し「CTRL+D」で入力終了となるプログラムを考えています. 調べてみると以下の様なプログラムでは入力終了となります. #include <stdio.h> int main(void) { int a[256]; int i = 0; while(1) { printf("Input%d = ", i); if ( scanf("%d", &a[i]) == EOF || i > 255) { break; } i++; } return 0; } しかし,次の様にすると「CTRL+D」では終了しません. #include <stdio.h> int main(void) { int a[256]; int i = 0; while(1) { printf("Input%d = ", i);   scanf("%d", &a[i]); <-----追加 if ( a[i] == EOF || i > 255) {   <-----変更 break; } i++; } return 0; } この場合は,環境がUNIXのため「-1」と入力すると終了します. 2種類の違いが分かりません. 教えてもらえないでしょうか?

  • scanfの謎

    C言語の以下のプログラムがありまして、 #include <stdio.h> main() { int i; scanf("%d ", &i);printf("d=%d\n", i); } これを実行すると、 1 2 d=1 のように、入力を2回受け付けてしまいます。 一体なんでこのようなことが起こるのでしょうか?教えてください。

  • 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になっているのかわかりません。 入力バッファに何か残ってしまっているということなのでしょうか? 以上教えていただけると嬉しいです。

  • scanfについて

    いつもお世話になっております ------------------------ #include<stdio.h> #include<stdlib.h> int main(void){ int age , kyoku; char buff[16]; while(age){ printf("0で終了/年齢を入力して下さい"); scanf("%d",buff); age = atoi(buff); if( age == 0 ){ printf("終了します\n"); break; } ・ ・ ・ ------------------------ 上記のプログラムは、 年齢を入力させて もしも0だったら処理を終了させるという プログラムです。(つもり) scanfで入力された値を いったんバッファに蓄えて atoiで整数に変換させているつもりなんですが 例えば、「20」と入力しても ageの値が0、buffの値がエラーになってしまいます どこがおかしいのが ご教授して頂けたら幸いです。

専門家に質問してみよう