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

这表示扫描除\nie ENTERkey 之外的每个字符。所以它允许你输入一个字符串,你会按下ENTER。此ENTER字符仍在stdin缓冲区中,这将终止您的下一条scanf语句

scanf("%[^\n]",p);/*no executed*/

因此在您看来,它可以执行!scanf,首先从缓冲区读取,如果它没有找到足够的数据,然后等待您的输入。

ENTER您首先输入的内容提供给某些功能,例如getchar(). 即getchar()在你的第二个之前添加一个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 回答