标题:刁难人的题目(高手专题),如何避免用户输入的是字母时的程序崩溃
取消只看楼主
大头虾的儿子
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-10-4
结帖率:50%
已结贴  问题点数:20 回复次数:2 
刁难人的题目(高手专题),如何避免用户输入的是字母时的程序崩溃
//如果按要求输入0到16数字,程序完全没问题,但是如果程序是给一般用户用,他们错误的输入字母时我们的程序就会崩溃,如何改进程序,使得输入的程序提醒用户输入错误,请重新输入
#include "stdafx.h"
#include<ctype.h>
#include<stdio.h>
#include<math.h>
int main()
{
    int i,n,change[16]={0};
    printf("如果输入的数据不够16个,请在输入最后一个数据后输入16\n");
    for(i=0;i<16;i++)
    {
        printf("请输入change[%d]",i);
    //    if(change[i]>'a'&& change[i]<'z'||change[i]>'A'&& change[i]<'Z')
            
        scanf(" %d",&change[i]);
   
        
        if(change[i]>16||change[i]<0||change[i]>(int)'a'&& change[i]<(int)'z'||change[i]>(int)'A'&& change[i]<(int)'Z')
        {
            printf("输入的数据有误,请重新输入\n");
            --i;
        }
   
        if(change[i]==16)
        {
            break;
        }
    }
    for(n=0;n<i;n++)
    {
        printf("输入的数字为 %d\n",change[n]);
    }
    return 0;
}
搜索更多相关主题的帖子: 如何 include change 
2012-10-05 14:24
大头虾的儿子
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-10-4
得分:0 
谢谢二楼的赐教,问题解决了,不过我也没看懂那段清除缓冲区的代码.....求解释。。能不能解释下缓冲区的作用,缓冲区存放的数据能不能在为被清除的情况下用另外一些数据将其覆盖。(发现你提供的清除缓冲区的代码的位置不一样,对程序的运行有影响,比如在if(change[i]>16||change[i]<0)
前面放上你提供的代码就会出现,如果输入大于16的值时无法检测出输入的值大于16的情况
for(i=0;i<16;i++)
    {
        printf("请输入change[%d]",i);

            
        treturn=scanf(" %d",&change[i]);
        if(treturn==0)
        {
            printf("用户输入错误,请重新输入\n");
            --i;
        }
        
        if(change[i]>16||change[i]<0)
        {
            printf("输入数据范围不对,请重新输入\n");
            --i;
        }
        while ((ch = getchar()) != '\n' && ch != EOF)
        if(change[i]==16)
        {
            break;
        }
    }
2012-10-05 17:37
大头虾的儿子
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-10-4
得分:0 
额,,刚刚发的源程序的位置有点错正确的应该是下面这个
#include "stdafx.h"
#include<stdio.h>
int main()
{
    int i,n,change[16]={0},treturn;
    char ch;
    printf("如果输入的数据不够16个,请在输入最后一个数据后输入16\n");
    for(i=0;i<16;i++)
    {
        printf("请输入change[%d]",i);

            
        treturn=scanf(" %d",&change[i]);
        if(treturn==0)
        {
            printf("用户输入错误,请重新输入\n");
            --i;
        }
        
        if(change[i]>16||change[i]<0)
        {
            printf("输入数据范围不对,请重新输入\n");
            --i;
        }
        
        if(change[i]==16)
        {
            break;
        }
        while ((ch = getchar()) != '\n' && ch != EOF)
            ;
    }
    for(n=0;n<i;n++)
    {
        printf("输入的数字为 %d\n",change[n]);
    }
    return 0;
}
2012-10-05 17:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-382563-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.253942 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved