为了账号安全,请及时绑定邮箱和手机立即绑定

这段代码怎么理解?

这段代码怎么理解?

C
GODDOOGE 2018-02-12 02:36:51
#include<stdio.h>int main(){int c;scanf("%c",&c);printf("%c",c);return 0;}我输入123得1,输入1得1,这是怎么回事?(我将%c改为%d后,输入1得-858993615)
查看完整描述

1 回答

已采纳
?
傻圆傻圆

TA贡献14条经验 获得超23个赞

#include<stdio.h>

int main()
{
	char a, b, c;
	scanf("%c",&a);
	scanf("%c",&b);
	scanf("%c",&c);
	printf("%c %c %c", a, b, c);
	return 0;
}

    首先,试着阅读这段代码,如果输入123,那么输出的结果为将为1 2 3。
    在进行程序输入的时候,输入并不是直接赋值给变量,而是先保存在输入缓冲区中,当按下回车键或者缓冲区满了的时候,才会赋值给变量。

    现在来模拟一下这个代码,在键盘中输入123,123将会被放入输入缓冲区,按下回车键后,开始向程序中写入内容,写入内容的时候遇到了第一个scanf语句,发现这个语句需要一个字符,则将1赋值给了变量a,然后继续向下走,遇到了第二个scanf语句,发现这个语句也是需要一个字符,然后将2赋值给了变量b,然后继续向下走,遇到了第三个scanf语句,发现这个语句仍然需要一个字符,然后3赋值给了变量c,此时输入结束,并且缓冲区也变为了空,程序中也没有等待输入的语句了,则执行了最后的printf语句,输出了三个变量的值。

    接下来思考你的代码,本质上两个代码的区别就是我的代码多了两行的scanf语句,所以知道为什么你的代码输入123的时候输出是1了吧。

查看完整回答
1 反对 回复 2018-02-13
  • 1 回答
  • 0 关注
  • 1079 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信