鱼C论坛

 找回密码
 立即注册
查看: 3225|回复: 18

无限循环怎么解决?

[复制链接]
发表于 2014-7-27 18:08:08 | 显示全部楼层 |阅读模式
5鱼币
        下面的判断语句我输入小数的话就无限循环怎么解决啊?
        printf("please input:year=");
        scanf("%d",&year);
        while(year<1)
        {
                printf("Input error, please input again year=");
                scanf("%d",&year);
        }
        printf("please input:month=");
        scanf("%d",&month);
        while(month<1||month>12)
        {
                printf("the %d year nothave %d month please input:month=",year,month);
                scanf("%d",&month);
        }
        printf("please input:day=");
        scanf("%d",&day);
        while(day<1||day>31)
        {
                printf("the %d month nothave %d day please input:day=",month,day);
                scanf("%d",&day);

最佳答案

查看完整内容

setbuf(stdin, NULL); 还是不要这么写吧 目的是清空但这个应该是关闭吧 感觉最好还是 char ch; while((ch = getchar())!='\n'); 还是这样好点吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-27 18:08:09 | 显示全部楼层
oggplay 发表于 2014-7-28 09:57
实际测试,你的输入跟小数点没关系,因为scanf已经把你的格式固定为int了,如果你输入2.9,那么year就等于2 ...

setbuf(stdin, NULL); 还是不要这么写吧
目的是清空但这个应该是关闭吧

感觉最好还是

char ch;
while((ch = getchar())!='\n');
还是这样好点吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-27 18:29:05 | 显示全部楼层
本帖最后由 大黑鱼 于 2014-7-27 18:30 编辑

{:2_25:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-27 19:29:35 | 显示全部楼层
scanf后加入fflush(stdin);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-27 20:25:12 | 显示全部楼层
其他没看 但是你输入后没清理
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-27 22:01:24 | 显示全部楼层
本帖最后由 Nightnjl 于 2014-7-27 22:02 编辑

输入小数当然是无限循环呀,小数的话就是year就是0然后你的循环条件就成立了撒。你把条件改成year>0就好了撒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-28 01:09:34 | 显示全部楼层
俺来学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-28 02:24:58 | 显示全部楼层
路过~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-28 02:52:03 | 显示全部楼层
你得创建个函数来判断输入的字符是不是符合规格。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-28 09:46:03 | 显示全部楼层
大概! 看了一下! 正如牡丹所说! 应该先清理一下! 不然回车键也就被你输进去了!{:2_27:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-28 09:57:31 | 显示全部楼层
实际测试,你的输入跟小数点没关系,因为scanf已经把你的格式固定为int了,如果你输入2.9,那么year就等于2,这个问题还是你的输入缓冲区问题。可以这么写:
 #include <stdio.h>


    
    int main( ){
        
        int year;
        int i;
        printf("please input:year=");
        scanf("%d",&year);
        i=year;
        setbuf(stdin, NULL);
        while(i<0||i>5000)//公元前?公历5000年够用了吧
        {
                printf("Input error, please input again year=");
                scanf("%d",&year);
                i=year;
                setbuf(stdin, NULL);
                }
       printf("\n");
            return 0;
    }

点评

setbuf(stdin, NULL); 还是不要这么写吧 目的是清空但这个应该是关闭吧 感觉最好还是 char ch; while((ch = getchar())!='\n'); 还是这样好点吧  详情 回复 发表于 2014-7-28 10:17
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-28 10:12:04 | 显示全部楼层
大家好,我年纪有点大了,要是早点认识你们,我也许早都学习了,人生一大遗憾啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-28 11:22:32 | 显示全部楼层
牡丹花下死做鬼 发表于 2014-7-28 10:17
setbuf(stdin, NULL); 还是不要这么写吧
目的是清空但这个应该是关闭吧

1、fflush( ),不建议使用
2、setbuf(stdin, NULL)使stdin输入流由默认缓冲区转为无缓冲区
3、while((c = getchar()) != '\n' && c != EOF)具有可移植性
============================================
等我学习到I/O流再和你讨论,嘿嘿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-28 15:27:16 | 显示全部楼层
生吃小甲鱼 发表于 2014-7-28 10:12
大家好,我年纪有点大了,要是早点认识你们,我也许早都学习了,人生一大遗憾啊

亡羊补牢,未为晚也
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-29 11:03:53 | 显示全部楼层
路过看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-29 21:07:07 | 显示全部楼层
我擦。你想写什么。。用while

用if啊。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-30 11:09:56 | 显示全部楼层
『浴火凤凰』 发表于 2014-7-29 21:07
我擦。你想写什么。。用while

用if啊。。

循环怎么用if?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-30 16:07:12 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-30 16:59:43 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-29 10:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表