使用scanf读取字符

时间:2014-08-08 16:02:16

标签: c scanf

有人可以解释一下为什么scanf在这两个程序中表现不同。我准备了一个示例测试程序来演示它。

计划版本1

#include <stdio.h>

int main()
{
  int i;
  char c;
  for(i=0;i<4;i++)
  {
    scanf("%c",&c);
    printf("%c",c);
  }
return 0;
}

程序版本2(参见scanf)

#include <stdio.h>

int main()
{
  int i;
  char c;
  for(i=0;i<4;i++)
  {
    scanf(" %c",&c); //The only difference is space
    printf("%c",c);
  }
return 0;
}

在程序1中我可以输入
一个
b
ç
d

但是在程序2中我只能输入
一个
b

为什么吗

2 个答案:

答案 0 :(得分:1)

scanf中的空格意味着在格式字符串中跳过该点的空格字符。

对于没有空格的版本,解析后的字符为'a','\ n','b','\ n'

对于带空格的版本,解析后的字符为'a',跳过的空格,'b',跳过的空格,'c',跳过的空格,'d'

答案 1 :(得分:-1)

顺便说一下程序员说,在第二个程序中,空格分配给i变量。 a + space + b + space然后循环停止。