• ベストアンサー
  • 困ってます

scanfについて

文字を取り込むときに、scanfなどでは、Enterきーを押さないと、文字の取り込みができないのですが、もし文字を打ち込んだ瞬間に(Enterキーを押さなくても)取り込める方法がありましたら、おしえてください。よろしくお願いします。 -たとえば- #include<stdio.h>     :     : scanf("%s",&a); /*ここでEnterキーを押さないと文字を取り込めない*/

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数758
  • ありがとう数5

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

  • ベストアンサー
  • 回答No.1
  • Nickee
  • ベストアンサー率15% (14/93)

getcheがつかえると思いますよ。 構文 #include <conio.h> int getche(void); 解説 キーボードからエコー付きで文字を読み込みます。 getche は,キーボードから 1 文字読み込み,テキストウィンドウにエコーバックします。 戻り値 getche は,キーボードから読み込んだ文字を返します。

共感・感謝の気持ちを伝えよう!

その他の回答 (1)

  • 回答No.2

環境の指定が無いので答えにくいのですが…。 まず最初に、文字列入力に付いては“ここまで”という指定が必要な為enterによる区切りは必要だと思います。 文字入力(scanf()の"%c"やgetchar())の場合は可能性があります。 UNIX系の場合: sttyでコンソールをrawモードにしておけばgetchar()でenterなし1文字入力できます。 ある種のUNIX(ネイティブ系ではOK、linuxでは未確認)ではsetbuf(stdin, NULL)を実行する事でgetchar()でenetrなし1文字入力可能です。 MS-DOS及びDOS窓16ビットの場合: KeyBIOSを使った方が手っ取り早いので通常KeyBIOSを使います。 拡張ライブラリ関数getch()が利用可能なコンパイラならgetch()でもオッケーです。 DOS窓32ビットの場合: getch()を使います。 Macの場合(MPWシェル): 最近のバージョンは使ったことが無いのですが、昔はsetbuf(stdin, NULL)の後にgetchar()すれば出来ました。 昔のDOS環境にはバッファリング無しの入力として標準エラー入力というものがあったのですがWindows上のDOS環境でサポートされているんでしょう? > 識者の方

共感・感謝の気持ちを伝えよう!

関連するQ&A

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

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

  • scanfの後のfgetsについて

    #include <stdio.h> int main(void) { char name[10]; int no; printf("ナンバーを入力してください: "); scanf("%d",&no); /* 35を入力 */ printf("文字列を入力してください: "); fgets(name,10,stdin); /*入力できない*/ return 0; } この例文だと、fgets関数が改行コードを読み取って、終了してしまい文字列入力が出来ないみたいなんですが、scanfの後にfgetsを使うような(scanfとfgetsの間にscanfの残した?改行コードを取り除く方法)処理はどのような方法があるのでしょうか? 試しにfgets文を2度書いたら思っていた動作をしてくれたのですが、はたしてfgets文を2度書くというような事をしていいものなのでしょうか?見た目もなんだか変な感じですし。。↓ #include <stdio.h> int main(void) { char name[10]; int no; printf("ナンバーを入力してください: "); scanf("%d",&no); /* 35を入力 */ printf("文字列を入力してください: "); fgets(name,10,stdin); fgets(name,10,stdin);  /*入力できる*/ return 0; }

  • scanfの謎

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

  • c言語 scanf

    下のソースを実行したらおかしなことになったんですがなんででしょうか?? #include<stdio.h> int main(void){ int i; char c[1000]; for(i=0;;i++){ printf("文字>>>>"); scanf("%c",&c[i]); printf("result = %c \n",c[i]); } } ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓実行↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 文字>>>>a result = a 文字>>>>result = 文字>>>>b result = b 文字>>>>result = 文字>>>>c result = c 文字>>>>result = 文字>>>>d result = d 文字>>>>result = 文字>>>>^C

  • scanf関数のループについて

    ソースコード---------------------------- #include<stdio.h> int main(){ char c; while(scanf("%c", &c) != 1){;} return(0); } -------------------------------------- 入力された文字数が1文字でない間入力待ちになるようなプログラムを意図しているのですが、 例えばaと打ってもaaと打ってもプログラムが終了してしまいます。 意図したようにプログラムが動作するにはどのように書き換えればよいのでしょうか。

  • C++でscanfは使えない?

    お盆休みを利用してC言語の勉強をしようと思っています。 さわり程度にはわかるのですが、ポインタなどを本気で理解してみようと思っています。 PCにvisual studio2013が入っているので、2013のC++のプロジェクトを使って勉強していこうと思っているのですが、下記のように入力すると、scanfでエラーが出てしまいます。 #include "stdafx.h" #include <stdio.h> void main() { int n; scanf("%d",&n); } C++ではC言語の文法は全て使えると聞いていたのですが、ある程度例外もあるということなのでしょうか?それともなにか原因があるのでしょうか?

  • scanf()で、エラー対応

    scanf()を使用して、入力で例えば「5462fa」数字ではなく文字を入力してしまった場合エラー(無限ループ)になりますが、 これをscanf()を使用したまま再入力を促すことが可能でしょうか?よろしくお願いします。 #include <stdio.h> int main(){   int a , kazu;   for(a=0;a<1;){     printf("値入力せよー>");       scanf ("%d", &kazu);         if( kazu >= 1 && kazu <=100 ){           a = a + 1 ;         }else{           printf("1から100で入力せよ\n");         }   }   printf ("kazu = %d", kazu);   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種類の違いが分かりません. 教えてもらえないでしょうか?

  • for文,scanfについて

    以下のプログラムを実行したのですが #include<stdio.h> #include<math.h> main(){ int i,b=5; char c; for(i=0;i<=9;++i){ printf("%d\n",b); scanf("%c",c);←入力は自由 } return 0; } 結果 | 予想 5  |  5 a   |  a 5  |  5 5  |  a a   |  5 5  |  a 5  |  5 a   |  a と予想と違う結果が繰り返されるんですが なぜか分かりません。アドバイスを頂けな いでしょうか?

  • 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; }