以下のコードをコーディングしましたが、問題がありました
char p[20];
int n;
errno = 0;
n = scanf("%[^\n]",p);
if (1 == n)
{
printf("%s\n",p);
scanf("%[^\n]",p); /*no waiting for input*/
printf("%s\n",p);
}
以下のコードをコーディングしましたが、問題がありました
char p[20];
int n;
errno = 0;
n = scanf("%[^\n]",p);
if (1 == n)
{
printf("%s\n",p);
scanf("%[^\n]",p); /*no waiting for input*/
printf("%s\n",p);
}
n = scanf("%[^\n]",p);
\n
これは、つまりENTERキーを除くすべての文字をスキャンすることを示しています。したがって、文字列を入力することができ、 を押したはずENTERです。このENTER文字はまだstdin
バッファ内にあり、次のscanf
ステートメントを終了します
scanf("%[^\n]",p);/*no executed*/
したがって、それが実行されないように思われます。scanf
、最初にバッファーから読み取り、そこに十分なデータが見つからない場合は、入力を待ちます。
ENTER最初に入力した を のような関数にフィードしますgetchar()
。getchar()
つまり、秒の前に a を追加するscanf
と、秒scanf
はからの入力を受け入れるようになりますstdin
何かのようなもの
if (1 == n)
{
printf("%s %d\n",p,n);
getchar();
scanf("%[^\n]",p);/*no executed*/
printf("%s\n",p);
}