Chinaunix

标题: [新手]为什么我的输入字符的时候会导致死循环 [打印本页]

作者: whelysee    时间: 2009-11-20 23:09
标题: [新手]为什么我的输入字符的时候会导致死循环
输入1-30之间的数字,输出金字塔。
如果输出的数字不在1-30之间,提示出错,正常。
可是一输入字母就会一直在while那里循环,满屏的Input wrong number! Please input again:
为什么字母不在判断之内啊?


/*输出数字金字塔*/
#include <stdio.h>
int main()
{
        int number, lnumber, rnumber;
        int rows,blank;
       
        printf("Please input a number between 1 to 30:");
        scanf("%d", &number);
        while ( (number < 0 || number > 30) )
        {
                printf("Input wrong number! Please input again:");
                scanf("%d", &number);
        }
        {
                rows = (number - 1);
                for (rows; rows >= 0; rows--)
                {
                        for (blank = rows; blank >= 0; blank--)
                                printf("  ");
                        for (lnumber = 1; lnumber <= (number - rows); lnumber++)
                                printf("%d ", lnumber);
                        for (rnumber = (number - rows - 1); rnumber >= 1; rnumber--)
                                printf("%d ", rnumber);
                        printf("\n");
                }
        }
}

[ 本帖最后由 whelysee 于 2009-11-20 23:32 编辑 ]
作者: amazingjxq    时间: 2009-11-21 09:08
字母的ascii码 >= 65
输入字母那变量值应该是他们的ascii码大小。你可以输出他们看看是多少。
作者: whelysee    时间: 2009-11-21 09:26
我这个程序不是输出字母金字塔,而是数字塔。
就是因为字母的ascii值>=65,那应该提示错误让我重新输入啊,可是这个程序就一直循环提示错误。
作者: xborant    时间: 2009-11-21 12:00
输入字母,scanf应该返回0,也就是读取number失败。你应该判断一下scanf的返回值吧。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2