0

以下のコードをコーディングしましたが、問題がありました

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);
}
4

1 に答える 1

3
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);
}
于 2012-04-24T15:52:58.413 に答える