c++ 格式化输入输出问题

穆华安
  • 2
新手上路,请多包涵

Snipaste_2020-04-14_23-18-12.png
第二个输出怎么不输出呢?
Snipaste_2020-04-14_23-18-40.png
去掉第一个输入就可以了,这是为什么呢?
2.png
1.png
真是很奇怪啊,崩溃

回复
阅读 1.6k
2 个回答

这涉及到scanf对空白字符的处理。

虽然空格、制表符和新行符都用做域分割符号,但读单字符操作中却按一般字符处理。例如,对输入流 "x y" 调用:scanf("%c%c%c",&a,&b,&c);
返回后,x 在变量 a 中,空格在变量 b 中,y 在变量 c 中。

将y按%d打印,可以看到y的值为10,即回车符。

#include <stdio.h>
int main() {
  int x;
  char y;
  scanf("%d", &x);
  printf("x:%d", x);
  scanf("%c", &y);
  printf("y:%d", y);    // 将y按%d打印,可以看到y的值为10
  getchar();
  
  return 0;
}

改成char y[2];scanf("%1s", y);,可以过滤空白符。

scanf%c 格式不会跳过空白字符。

你在输入一个整数的时候,实际还输入了一个回车。于是第二个 scanf("%c"...) 读到了这个回车。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏