【问题标题】:scanf and whitespace characters [duplicate]scanf 和空白字符 [重复]
【发布时间】:2018-08-15 08:20:27
【问题描述】:

我在做一个与scanf()相关的简单例子

int a, b;
printf("Please enter int a:\n);
scanf("%d",&a);//line 1
printf("Please enter int b:\n);
scanf("%d",&b);//line 2

我在 a I put 45 和 b 78 处运行此代码,因此输入缓冲区如下所示:45\n78\n,line1 需要 45 忽略 \n,line2 忽略 \n 需要 78 并忽略 \n

char ch, ch2;
printf("Please enter char ch:\n);
scanf("%c",&ch);//line3
printf("Please enter char ch2:\n);
scanf("%c",&ch2);//line4

我调试了这段代码,我想把'a'放在ch中,把'b'放在ch2中,所以输入缓冲区将如下所示:a\nb\n,line3接受'a'忽略\n和line4忽略 \n 接受 'b' 并忽略 \n

我以为会发生这种情况,但是当我调试它时 line3 接受 'a',而 line4 读取 \n 并存储它。

我不明白我认为 scanf() 应该忽略空白字符。

如您所见 http://www.cplusplus.com/reference/cstdio/scanf/

【问题讨论】:

  • 请注意,您的代码中缺少相应的双引号。
  • @machine_1 是的,这只是在帖子中而不是在代码中,我会立即编辑它
  • %c%[]%n 指令跳过前导空白字符。

标签: c char int scanf


【解决方案1】:

来自man scanf

%c

匹配长度由最大字段宽度指定的字符序列(默认为 1); next 指针必须是指向 char 的指针,并且必须有足够的空间容纳所有字符(不添加终止空字节)。 通常会跳过前导空格。要先跳过空格,请在格式中使用显式空格。

【讨论】:

  • 是有道理的,%c 说明符不会抑制前导空白字符。感谢您的评论
猜你喜欢
  • 2021-10-11
  • 2014-05-29
  • 1970-01-01
  • 2018-06-02
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
相关资源
最近更新 更多