简单c语言问题,想了半天不知道错在哪里,求大神开悟

简单c语言问题,想了半天不知道错在哪里,求大神开悟为什么当i=1时会直接跳过(图中画圈里面的)scanf语句,当i=0时没有问题
正常情况应该是:输入1 再输入1 输出对应的整型
现在的情况是: 输入1 直接就输出10了【图片】

在你的for循环中的scanf语句后面加一句:
scanf("%d",&i); // 用于输入i的值

getchar(); //用于吃掉换行符

因为输入为1的时候按回车,这时候回车符会被赋值给变量b,所以你没有输入b的值就直接打印出来10,而换行符的ASCII码值就是10;
温馨提示:内容为网友见解,仅供参考
第1个回答  2016-07-29
你这个有问题啊,而且代码编写规范错了,看这代码头疼,你为什么要加for语句呢,用scanf语句时代码就能停在这里等你输入,不需要用for语句循环,而且for语句没有条件,不会循环的,应该直接

scanf(“%d”,&i);
if(i==1)
{
//相应语句
}

if else(i=0)
{
//相应语句
}

else
{
printf(“输入错误\n”);
}追问

for语句可以循环

你自己去运行一下就知道了,不用for语句前面不能判断

追答

你for没有条件怎么循环

追问

死循环,直到满足条件后跳出

追答

那你应该用
while(1)

追问

for比较简单

追答

你尽然觉得for比while简单,for有三个参数,而三个参数你只用了一个,还不如while呢

追问

while后面也是要条件的

相同的程序for能节省1~3行

追答

我不知道你是怎么想的,
while(1)
{

}

for{;1;}
{

}
有什么区别

for(;1;)

追问

没有

追答

你是觉得用上面的简单还是下面的简单

追问

while()只有条件,for()有初始值,条件,递增

都是一行

for多了两个

while还有另写两行

追答

关键我好像没看到你用了另外两个初始值和递增

追问

习惯问题

追答

你自己慢慢研究吧,挺简单的问题被你复杂化了

追问

追答

这个问题好像用不着循环

追问

那你怎么写

追答

我上面就给你发过去了

好像还漏写了一个=,手机这代码真心累

追问

如果输入3按回车后,怎么继续输入?

你这个还要在后面加goto语句才行

不然输入错误后就直接跳出来了

追答

这个可以有

追问

已经有两个人解答了,你可以去看一下,我试了对的

追答

追问

一定要有循环语句才行

第2个回答  2016-07-29
解决方法是再scanf("%c",&b);前加一个getchar();
原因:因为scanf的写入是按数据流的顺序进去的,你的一个scanf输入的其实是数字+回车键,数字保存在了a中,回车键还在数据流中,当运行到scanf("%c",&b)时,回车键作为字符直接赋值给了b,所以出现了你遇到的现象,直接跳过去了。解决的方法就是在前面加一个getchar(),吸收掉回车键追问

数字为什么会在a中?

本回答被提问者采纳
相似回答