| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1868 人关注过本帖
标题:请帮忙看下这个循环为什么第一次正常,第二次不正常?
只看楼主 加入收藏
humanpaladin
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-8-17
收藏
 问题点数:0 回复次数:10 
请帮忙看下这个循环为什么第一次正常,第二次不正常?
代码如下:
#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
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
收藏
得分:0 
#include<stdio.h>
int main()
{
    char operation;
    while(1)
    {
        printf("Enter the operation you want:\n");
        scanf("%s",&operation);
        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);
}

编程小菜
2008-08-17 17:46
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
收藏
得分:0 
你的程序错误错在operation=fgetc(stdin);这里,使用FGETC函数是文件输入函数,你这个程序建议使用SCANF函数。
我觉得你的那个函数不合适出现在这样的程序里!如果有必要使用,那么请看下那个函数的用法!
我也是小菜,有什么不对,希望大家指教,谢谢!

[[it] 本帖最后由 独孤小梦 于 2008-8-17 17:50 编辑 [/it]]

编程小菜
2008-08-17 17:47
csynyk
Rank: 1
等 级:新手上路
威 望:1
帖 子:114
专家分:0
注 册:2008-8-9
收藏
得分:0 
operation=fgetc(stdin);
    这句执行完毕后,回车符还留在stdin中没有被取出来,此时stdin非空,所以fgetc(stdin),会继续执行!直到stdin空为止。你可以在不改变上述代码的情况下一次多输入几个字符来验证一下!
   要杜绝这种情况很容易,在执行operation=fgetc(stdin);执行一句fflush(stdin);来清空stdin就行了!

http://blog./csynyk
2008-08-17 17:49
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
收藏
得分:0 
呵呵,LS正解!

编程小菜
2008-08-17 17:52
HERO剧终
Rank: 1
来 自:深圳
等 级:新手上路
帖 子:154
专家分:0
注 册:2008-8-11
收藏
得分:0 
   决定了,开始学习C语言了

水因有月方知静,天为无云始觉高
2008-08-17 18:20
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
爱喝牛奶的猫咪
Rank: 1
来 自:QQ群46520219
等 级:禁止访问
帖 子:513
专家分:0
注 册:2008-6-16
收藏
得分:0 
二楼的修改是错的


[color=white]<" border="0" />>
2008-08-17 18:52
独孤小梦
Rank: 1
等 级:新手上路
威 望:1
帖 子:338
专家分:0
注 册:2008-6-5
收藏
得分:0 
请问LS,哪里错了?我能编译出来,而且没发现哪里有问题
LS请指教!呵呵!谢谢了,我小菜不懂!

编程小菜
2008-08-18 00:52
快速回复:请帮忙看下这个循环为什么第一次正常,第二次不正常?
数据加载中...
 
   



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

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