0

次のコードの実行中に問題が発生しました。変数 't' は、1 回の実行が完了すると null 値を取ります。この問題は、scanf() の代わりに getch() を使用することで解決されました。しかし、なぜそれが起こっているのかわかりません。説明はありますか?動かなかったプログラムです。

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
char t;
void main()
{
    while(1)
    {
        scanf("%c",&t);
        printf("\nValue of t = %c",t);
        printf("\nContinue (Y/N):");
        char a=getche();
        if(a=='n' || a=='N')
        exit(0);
   }
}

さて、これは正しく実行されるプログラムです。

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
char t;
void main()
{
    while(1)
    {
         t=getch();
         printf("\nValue of t = %c",t);
         printf("\nContinue (Y/N):");
         char a=getche();
         if(a=='n' || a=='N')
         exit(0);
    }
}
4

1 に答える 1

9

文字を読むと、

scanf("%c",&t);

入力ストリームに改行が残っているため、後続の scanf() がループ内の入力をスキップします。

getch()非標準機能であることに注意してください。代わりに使用できますgetchar()

または、次のように変更します。

scanf(" %c",&t); 

の文字を読み取る前に、すべての空白が scanf() によってスキップされることを保証するフォーマット指定子のスペースに注意してください%c

于 2013-02-18T19:03:59.347 に答える