标题:请帮忙看下这个循环为什么第一次正常,第二次不正常?
取消只看楼主
humanpaladin
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-8-17
 问题点数:0 回复次数:2 
请帮忙看下这个循环为什么第一次正常,第二次不正常?
代码如下:
#include<stdio.h>
int main(){
    char operation;
    
    while(1){
    printf("Enter the operation you want:");
    operation=fgetc(stdin);
        
    if(operation=='q')
        break;
    switch(operation){
        case 'I':
                 printf("I\n");
            break;
        case 'i':
            printf("i\n");
            break;
        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 于 2008-8-17 16:53 编辑 [/it]]
搜索更多相关主题的帖子: operation printf break want case 
2008-08-17 16:51
humanpaladin
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-8-17
得分:0 
[bo][un]csynyk[/un] 在 2008-8-17 17:49 的发言:[/bo]

operation=fgetc(stdin);
    这句执行完毕后,回车符还留在stdin中没有被取出来,此时stdin非空,所以fgetc(stdin),会继续执行!直到stdin空为止。你可以在不改变上述代码的情况下一次多输入几个字符来验证一下! ...


谢谢这位大哥,你的话让我茅塞顿开,我很感动。。。
2008-08-17 18:45
humanpaladin
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-8-17
得分:0 
也谢谢独孤小梦兄。
2008-08-17 18:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-228713-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.990996 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved