千寻0 发表于 2014-7-27 18:08:08

无限循环怎么解决?

        下面的判断语句我输入小数的话就无限循环怎么解决啊?
      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);

牡丹花下死做鬼 发表于 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');
还是这样好点吧

大黑鱼 发表于 2014-7-27 18:29:05

本帖最后由 大黑鱼 于 2014-7-27 18:30 编辑

{:2_25:}

loveoobaby 发表于 2014-7-27 19:29:35

scanf后加入fflush(stdin);

牡丹花下死做鬼 发表于 2014-7-27 20:25:12

其他没看 但是你输入后没清理

Nightnjl 发表于 2014-7-27 22:01:24

本帖最后由 Nightnjl 于 2014-7-27 22:02 编辑

输入小数当然是无限循环呀,小数的话就是year就是0然后你的循环条件就成立了撒。你把条件改成year>0就好了撒

网络学习 发表于 2014-7-28 01:09:34

俺来学习一下

mumudontcry 发表于 2014-7-28 02:24:58

路过~~~

acreil 发表于 2014-7-28 02:52:03

你得创建个函数来判断输入的字符是不是符合规格。

青玄 发表于 2014-7-28 09:46:03

大概! 看了一下! 正如牡丹所说! 应该先清理一下! 不然回车键也就被你输进去了!{:2_27:}

oggplay 发表于 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;
    }

生吃小甲鱼 发表于 2014-7-28 10:12:04

大家好,我年纪有点大了,要是早点认识你们,我也许早都学习了,人生一大遗憾啊

oggplay 发表于 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流再和你讨论,嘿嘿

wangerwanger 发表于 2014-7-28 15:27:16

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

亡羊补牢,未为晚也

破灬王 发表于 2014-7-29 11:03:53

路过看看

『浴火凤凰』 发表于 2014-7-29 21:07:07

我擦。你想写什么。。用while

用if啊。。

千寻0 发表于 2014-7-30 11:09:56

『浴火凤凰』 发表于 2014-7-29 21:07
我擦。你想写什么。。用while

用if啊。。

循环怎么用if?

cable5881 发表于 2014-7-30 16:07:12

{:1_1:}

ZX-走样 发表于 2014-7-30 16:59:43

学习一下
页: [1]
查看完整版本: 无限循环怎么解决?