【问题标题】:Does scanf() take '\n' as input leftover from previous scanf()?scanf() 是否将 '\n' 作为先前 scanf() 的剩余输入?
【发布时间】:2010-12-21 10:05:36
【问题描述】:

在以下 C 代码中:

char name[20];
int a;
int b;

for(i=0;i<10;i++)
{
    printf("\nEnter name, a & b: ");
    scanf("%s %d %d",name,&a,&b);
}

scanf 是否在第一次迭代中读入 '\n' 在第一次迭代中输入的 scanf() 末尾,用于第二次迭代输入?

【问题讨论】:

  • 你为什么不尝试通过调试器运行这段代码,看看会发生什么。然后,如果出现意外或不清楚,请在这方面提出问题。

标签: c scanf


【解决方案1】:

scanf 使输入流指向\n。在您的情况下,它没有任何区别:每次调用它时,scanf 都会移动,直到找到下一个非空白字符。因此,给它 10 行 name, a, b 作为输入将按您的预期工作。

但是考虑一下:

scanf("%d", &a);
fgets(str, 20, stdin);

fgets 会一直读取直到找到第一个换行符,因此str 只会得到\n 的值,而fgets不会读取下一行输入。

【讨论】:

    猜你喜欢
    • 2019-06-11
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多