c语言循环问题,循环二次后出错

欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 1620 人关注过本帖
标题:请帮忙看下这个循环为什么第一次正常,第二次不正常?
等 级:新手上路
&&问题点数:0&&回复次数:10&&&
请帮忙看下这个循环为什么第一次正常,第二次不正常?
代码如下:
#include&stdio.h&
int main(){
&&& while(1){
&&&&printf(&Enter the operation you want:&);
&&&&operation=fgetc(stdin);
&&&&if(operation=='q')
&&&&switch(operation){
&&&&&&&&case 'I':
&&&&&&&&&&&&&&&&&printf(&I\n&);
&&&&&&&&&&&&
&&&&&&&&case 'i':
&&&&&&&&&&&&printf(&i\n&);
&&&&&&&&&&&&
&&&&&&&&default:
&&&&&&&&&&&&printf(&Wrong input,Retry\n&);
&&& return(0);
运行时的现象是:
首先提示&Enter the operation you want:&
输入I,然后会打印出来I,
完了之后继续提示&Enter the operation you want:&
可是问题出现,这时候不需要输入,上面的提示语后显示&Wrong input,Retry&。
用Turbo c的watch功能显示出operation在此时已经为&\n&.不知道这个&\n&是什么时候引入的?
[[it] 本帖最后由 humanpaladin 于
16:53 编辑 [/it]]
搜索更多相关主题的帖子:
&&&&&&&&&&
等 级:新手上路
帖 子:338
#include&stdio.h&
int main()
&&&&while(1)
&&&&&&&&printf(&Enter the operation you want:\n&);
&&&&&&&&scanf(&%s&,&operation);
&&&&&&&&if(operation=='q')
&&&&&&&&switch(operation)
&&&&&&&&case'I': printf(&I\n&);
&&&&&&&&case'i': printf(&i\n&);
&&&&&&&&default: printf(&Wrong input,Retry\n&);
&&&&&&&&}&&&
&&&&return(0);
等 级:新手上路
帖 子:338
你的程序错误错在operation=fgetc(stdin);这里,使用FGETC函数是文件输入函数,你这个程序建议使用SCANF函数。
我觉得你的那个函数不合适出现在这样的程序里!如果有必要使用,那么请看下那个函数的用法!
我也是小菜,有什么不对,希望大家指教,谢谢!
[[it] 本帖最后由 独孤小梦 于
17:50 编辑 [/it]]
等 级:新手上路
帖 子:114
operation=fgetc(stdin);
&&& 这句执行完毕后,回车符还留在stdin中没有被取出来,此时stdin非空,所以fgetc(stdin),会继续执行!直到stdin空为止。你可以在不改变上述代码的情况下一次多输入几个字符来验证一下!
&&&要杜绝这种情况很容易,在执行operation=fgetc(stdin);执行一句fflush(stdin);来清空stdin就行了!
http://blog.csdn.net/csynyk
等 级:新手上路
帖 子:338
呵呵,LS正解!
来 自:深圳
等 级:新手上路
帖 子:154
&&&决定了,开始学习C语言了
水因有月方知静,天为无云始觉高
等 级:新手上路
[bo][un]csynyk[/un] 在
17:49 的发言:[/bo]
operation=fgetc(stdin);
&&& 这句执行完毕后,回车符还留在stdin中没有被取出来,此时stdin非空,所以fgetc(stdin),会继续执行!直到stdin空为止。你可以在不改变上述代码的情况下一次多输入几个字符来验证一下! ...
谢谢这位大哥,你的话让我茅塞顿开,我很感动。。。
等 级:新手上路
也谢谢独孤小梦兄。
来 自:QQ群
等 级:ID已被封
帖 子:513
二楼的修改是错的
[color=white]&&
等 级:新手上路
帖 子:338
请问LS,哪里错了?我能编译出来,而且没发现哪里有问题
LS请指教!呵呵!谢谢了,我小菜不懂!
版权所有,并保留所有权利。
Powered by , Processed in 0.021111 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。C语言循环问题,如何设定循环的次数一球从100米处自由落下,每次落地后反向跳回原高度的一半,再落下,求它在第10次落地时,共经过几米,第10次反弹多高?刚学C语言,太厉害的函数还不会,
〆自然呆丶5鋷
#includemain(){float h=100,sum=0,i;//i 也可以定义成int型for (i=0;i
float h=100,sum=0,i;
for(i=0;i<2;i++)
{sum=sum+h;
printf("%2.0f %f %f",i,2*h,sum);
2 50..00000
第二次落地时共经过200米,第二次反弹25
呵呵,i是从0开始的,你说的对,我把100算作第一次反弹了
改成这样的
float h=100,sum=0,i;
for(i=0;i<2;i++)
sum=sum+h*2;//因为是来回,反弹之后,还得落下来
printf("%2.0f
%f %f",i,h,sum);
第一次反弹高度为50,总路程为200
第二次反弹高度为25,总路程为250
我觉着还是不对,因为算第一次时,总路程不是sum+2*h=0+200.它只有100米,而且之后算的时候程序结果都多出50来,我觉得应该分类,第一次算一类,之后算一类,希望您慎重考虑
兄弟,第一次是还没有反弹的,它的路程是100没错,但是第一次反弹,因为反弹高度是50,所以总路程是100+50*2=200,我不太明白你是什么意思?如果想输出每次反弹的高度和每次反弹之后的总路程,可以改一下代码,我的代码只是输出你所要求的最后一次反弹的高度和总路程,其他的反弹是不管的....
更改后代码如下:
float h=100,sum=0,i;
printf("%2.0f
%f\n",0,h,sum);
for(i=1;i<=2;i++)
sum=sum+h*2;//因为是来回,反弹之后,还得落下来
printf("%2.0f
%f %f\n",i,h,sum);
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 c语言循环 的文章

 

随机推荐