免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1702 | 回复: 3
打印 上一主题 下一主题

[C] [新手]为什么我的输入字符的时候会导致死循环 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 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 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-11-21 09:08 |只看该作者
字母的ascii码 >= 65
输入字母那变量值应该是他们的ascii码大小。你可以输出他们看看是多少。

论坛徽章:
0
3 [报告]
发表于 2009-11-21 09:26 |只看该作者
我这个程序不是输出字母金字塔,而是数字塔。
就是因为字母的ascii值>=65,那应该提示错误让我重新输入啊,可是这个程序就一直循环提示错误。

论坛徽章:
0
4 [报告]
发表于 2009-11-21 12:00 |只看该作者
输入字母,scanf应该返回0,也就是读取number失败。你应该判断一下scanf的返回值吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP