2 qq 29777783 qq_29777783 于 2015.07.15 10:46 提问

c 语言的问题求大神的指导!

#include"stdio.h"
#include"stdlib.h"
void main()
{
int guess=0,problem,ch;
ch=getchar();
do
{scanf("%d",&guess);
problem=(int)(rand()%100)+1;
for(;guess!=problem;)
{if(guess>problem)
printf("too high!");
if(guess<problem)
printf("too low!");
scanf("%d",&guess);
}
printf("%d",problem);
ch=getchar();
}while(ch!='n');
}为什么猜完一次数字后,我按任意键程序都会进入死循环!!

3个回答

save4me
save4me   Ds   Rxr 2015.07.15 11:52
已采纳

你的代码问题在于scanf没有判断输入的是否是数字,如果不是数字,就会进入死循环。加一个判断就好了。
不过你也可以使用fgets之类的替代scanf,方便指定输入数据类型。

#include <stdio.h>
#include <stdlib.h>
void main()
{
    int guess = 0, problem;
    char ch = getchar();
    int isNumber;
    do
    {
        isNumber = scanf("%d", &guess);
        if(isNumber == 0)
        {
            printf("please input a number!");
            ch = getchar();
            continue;
        }
        problem = (int)(rand() % 100) + 1;
        for(; guess != problem;)
        {
            if(guess > problem)
                printf("too high!");
            if(guess < problem)
                printf("too low!");
            scanf("%d", &guess);
        }
        printf("%d", problem);
        ch = getchar();
    }while(ch != 'n');
}
save4me
save4me 应该是要加判断的,你自己改一下,调试调试
2 年多之前 回复
save4me
save4me 除了加了判断输入是否为数字,其他的基本上就是复制你的代码,你想想你原先是怎么设计这句的
2 年多之前 回复
qq_29777783
qq_29777783 你这个的最后一个语句ch=getchar()给他赋值一个数字是貌似也会赋值给guess
2 年多之前 回复
qq_29777783
qq_29777783 可以了运行,但是为什么要这样,最一句ch=getchar();为什么没有进行ch!=0的判断而是貌似赋值给了guess,能说明一下吗?谢谢
2 年多之前 回复
danielinbiti
danielinbiti   Ds   Rxr 2015.07.15 11:01
把类型都定义对了,你这里ch应该是char,别定义成int 
danielinbiti
danielinbiti 回复qq_29777783: }while(ch!='n');改一下,改成}while(!(ch=='n'|| ch== '\n'));
2 年多之前 回复
qq_29777783
qq_29777783 我把类型改过来依旧还是猜过一次后按任意键进入死循环
2 年多之前 回复
qq_29777783
qq_29777783 哦,原来是这样,谢谢哈
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2015.07.15 11:18

while(ch!='n');
按n退出。

qq_29777783
qq_29777783 不行的
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片