2 claysystem claysystem 于 2015.06.04 06:54 提问

C语言scanf与printf?

代码如下 运行环境 VS2013
问题:输入1a 输出a=1 (这个没问题)而ch却什么都没得到。为什么?ch不应是a吗?

 #include<stdio.h>
#include<stdlib.h>
int main()
{
    int a;
    char ch;

    scanf_s("%d", &a);
    printf("a=%d\n",a);

    scanf_s("%c", &ch);
    printf("ch=%c\n",ch);
    system("pause");
    return 0;
}

运行结果附图如下:
图片说明

17个回答

91program
91program   Ds   Rxr 2015.06.04 07:24
已采纳

个人比较认可 VS 的情况
一次输入回车换行,算是本次输入的结束,而不应该响应后续的数据输入与处理。

当然,各个编译器的处理确实不同。因为你的输入都被获取到了,只是看如何处理。

91program
91program 回复牛战士: 中间加空格,你要这样写:scanf_s("%d,%c", &a,&ch);
2 年多之前 回复
claysystem
claysystem 中间要是加空格呢?比如1 a
2 年多之前 回复
91program
91program 如果你输入的是 12 呢?你认为 VS 要如何处理?肯定是 a=12。对于 12 和 1a,都只是认为是一次输入。但 a 不符合 int 输入的要求,所以被丢了。
2 年多之前 回复
ys676623
ys676623   2015.06.04 10:51

输入缓冲的缘故, 输入之后按回车算做一次输入的完成,之后再进行所需要的输入

zhucebuzhou10
zhucebuzhou10   2015.06.04 21:58

中间要放空格的,不然回车也算一个字符

claysystem
claysystem   2015.06.04 06:59

把代码在dev c++下编译结果如下。是编译器的问题吗?图片说明

lgh1992314
lgh1992314   2015.06.04 08:14

输入输出缓冲区处理。。。

PTS872001488
PTS872001488   2015.06.04 08:44

输入1 按回车显示a=1;在输入a,回车显示ch=a。
另一个解决方法是 scanf_s("%d,%c", &a,&ch); printf("a=%d,ch=%c\n",a,ch);

m1181324794t
m1181324794t   2015.06.04 09:31

同意91program的说法

Arnold9009
Arnold9009   2015.06.04 09:52

行缓冲,只有按了回车之后,才算一次输入结束,按照类型从第一个字节开始取,多于的丢弃

ys676623
ys676623   2015.06.04 10:51

输入缓冲的缘故, 输入之后按回车算做一次输入的完成,之后再进行所需要的输入

nswcfd
nswcfd   2015.06.04 10:59

几种可能性
1)VS把a吞掉了,相同的代码在gcc下行为就不一样;
2)printf的存在影响后续的scanf的行为,看看去掉printf有没有区别。

可以使用非标准的'%n",看看scanf到底扫描了几个字符。(不知道VS是否支持)

   n      Nothing  is expected; instead, the number of characters consumed thus far from the input
          is stored through the next pointer, which must be a pointer to int.
共17条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片