【问题标题】:What is the explanation for this behaviour of scanf?scanf 的这种行为的解释是什么?
【发布时间】:2013-04-06 15:42:47
【问题描述】:

我有这个代码:

#include <stdio.h>
int main()
{
    char vc[5]={1,1,1,1,0};
    int vi[4]={0,0,0,0};

    printf("Reading characters...\n");
    for(int i = 0 ; i < 4 ; i++)
        scanf("%c",&vc[i]);

    printf("Reading numbers...\n");
    for(int i = 0 ; i < 4 ; i++)
        scanf("%d",&vi[i]);

    for(int i = 0 ; i < 4 ; i++)
    printf("%c ",vc[i]);

    printf("\n");

    for(int i = 0 ; i < 4 ; i++)
    printf("%d ",vi[i]);

    printf("\n");

    return 0;
}

在打印“阅读数字”并进入下一个 for 循环之前,我只能输入 2 个字符。为什么迭代只持续 2 步?应该是 4。

【问题讨论】:

  • 您在输入字符之间键入 ENTER。这会生成一个换行符。您要求scanf 读取字符,而换行符是一个字符(特别是'\n')。
  • 这解释了很多。谢谢!

标签: c for-loop scanf


【解决方案1】:

这是因为%c 不会忽略空格,并且您可能会按回车键。试试:

scanf(" %c",&vc[i]);
       ^

空格使scanf 忽略任何空格。

【讨论】:

  • 你应该把空格放在开头,而不是结尾。通过丢弃尾随空白,您将强制 scanf 读取下一个非空白字符,这几乎不是您想要的行为。
  • 最好将空格放在指令之前,否则scanf 在找到下一个非空格之前不会返回。
猜你喜欢
  • 2012-01-24
  • 1970-01-01
  • 2013-08-07
  • 2022-07-30
  • 1970-01-01
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多