scanf功能如何工作?

时间:2012-04-24 15:37:32

标签: c

我编写了以下代码,但出现了问题

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

1 个答案:

答案 0 :(得分:3)

n = scanf("%[^\n]",p);

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

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

因此似乎它执行了dint! 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);
}