黑马程序员技术交流社区

标题: 判断用户输入数据合法性!! [打印本页]

作者: 大路朝天    时间: 2015-4-9 18:17
标题: 判断用户输入数据合法性!!
本帖最后由 大路朝天 于 2015-4-9 19:33 编辑

基础班里,编程题要求输入两个整数(或者小数),然后再打印出来。这个怎么判断用户的输入是否合法?(如果要求输入整数,怎么判断是整数,小数同理。)
作者: 吴伟健    时间: 2015-4-9 18:19
沙发!!!!!!!!
作者: 吴伟健    时间: 2015-4-9 18:21
擦,为什么抢了沙发什么都没有:'(
作者: carescares    时间: 2015-4-9 18:22
路过,来看答案的,没想到是提问贴
作者: 波阿波    时间: 2015-4-9 18:22
给楼主个赞!
作者: 上古丶    时间: 2015-4-9 18:22
可以用if啊...如果不是...返回
作者: Ios_bawenlong    时间: 2015-4-9 18:23

//用户从键盘上输入两个整数,然后输出他们和
//用户从键盘上输入两个整数,然后输出他们差
//用户从键盘上输入两个整数,输出他们的商
//用户从键盘上输入两个整数,输出他们的余数

#include <stdio.h>


int sum(int x, int y);//加法
int min(int x, int y);//减法
int quYu(int x, int y);//取余
int shang(int x, int y);//商
int operation_Symbol(char a);//判断运算符号
void  resultLastTset(char medu);//用户输入的数字处理
int  data_Processing(char num1, int nmb1, int nmb2);//结果处理



int main() {
   
    //定义一个变量接受用户输入的运算符号
    char _num1 = '+';
   
    //接受检测用户输入的运算符号
    for (int i = 0; i < 1; i++) {
        
        //提示用户选择要进行的运算
        printf("请选择要进行运算的运算符号:\n+,-,/,%%\n按Enter结束\n");
        
        //接受用户输入的运算符号
        scanf("%c", &_num1);
        
        //判断运算符号是否正确
        if (operation_Symbol(_num1)) {
            
            //运算符号错误提示用户重新输入
            printf("运算符号输入有误,请重新输入!\n");
            i--;
            
        }
    }
    resultLastTset(_num1);
}




//加法运算
int sum(int x, int y){
   
    return x + y;
}

//减法运算
int min(int x, int y){
   
    return x - y;
}

//取余运算
int quYu(int x, int y){

    return x % y;
}

//除法运算
int shang(int x, int y){
   
    return x / y;
}

//结果处理
int  data_Processing(char num1, int nmb1, int nmb2){
   
    //记录运算结果
    int resurt = 0;
   
    //根据用户选择响应运算方法
    switch (num1) {
        case '+':
            //获取运算结果
            resurt = sum(nmb1, nmb2);
            break;
            
        case '-':
            //获取运算结果
            resurt = min(nmb1, nmb2);
            break;
            
        case '*':
            //获取运算结果
            resurt = quYu(nmb1, nmb2);
            break;
            
        case '/':
            //获取运算结果
            resurt = shang(nmb1, nmb2);
            break;
        default:
            break;
    }

    return resurt;
}


//运算符号判断
int operation_Symbol(char a){

    switch(a) {
        //判断是否为加法
        case '+':
            
        //判断是否为减法
        case '-':
        
        //判断是否要为模运算
        case '%':
        
        //判断是否为除法
        case '/':
            return 0;
            break;
            
            
        //运算符号输入有误
        default:
            return 1;
            break;
    }
}



//输入的数字检测
void  resultLastTset(char medu){
    //定义一个变量来记录运算结果
    int _resurt = 0;
   
    //定义变量来存储用户输入的数字
    int _nmb1 = 0;
    int _nmb2 = 0;
   
    //接受用户的输入
    //传值
    float testNmb1 = 0.0f;
    float testNmb2 = 0.0f;
   
   
    //检测用户输入的数据是否是整型
    for (int y = 0; y < 1; y++){
        //提示用户输入要运算的数字
        printf("请输入要进行运算的数字,以','间隔并且按Enter结束\n");
        
        //清空scanf函数的缓冲区
        rewind(stdin);
        
        //接受输入
        _resurt = scanf("%f,%f", &testNmb1, &testNmb2);
        
        
        //将接受到的值进行强转
        _nmb1   = (int)testNmb1;
        _nmb2   = (int)testNmb2;
        
        //判断用户输入的数值是否是整型
        if (_resurt < 2) {
            
            printf("输入的数字有误,请重新输入!\n");
            y--;
        }else if (!(testNmb1 == _nmb1 && testNmb2 == _nmb2 )){
            
            printf("输入的数字有误,请重新输入!\n");
            y--;
        }else if (medu == '/' && _nmb2 != 0) {//除数不能为0
            
            //提示
            printf("除数不能为0,请重新输入!\n");
            //循环再进行
            y--;
            //跳出本次循环
        }
    }
   
   
    //接收运算结果
    _resurt = data_Processing(medu, _nmb1, _nmb2);
   
    //打印用户进行的运算
    printf("你需要的运算为:%d %c %d = %d\n", _nmb1, medu, _nmb2, _resurt);
}

作者: 吴伟健    时间: 2015-4-9 18:24
楼上哪位大神?
作者: guanguan0622    时间: 2015-4-9 18:24
黑马币够了!
作者: senheima    时间: 2015-4-9 18:30
    double a;
    scanf("%lf",&a);
    printf("%d\n",(int)a);
    if (a==(int)a)
    {
        printf("%f是整数",a);
    }

    return 0;
作者: 大路朝天    时间: 2015-4-9 18:31
Ios_bawenlong 发表于 2015-4-9 18:23
//用户从键盘上输入两个整数,然后输出他们和
//用户从键盘上输入两个整数,然后输出他们差
//用户从键盘 ...

以下内容简直看不懂啊!!!

//清空scanf函数的缓冲区
        rewind(stdin);
        
        //接受输入
        _resurt = scanf("%f,%f", &testNmb1, &testNmb2);
        
        
        //将接受到的值进行强转
        _nmb1   = (int)testNmb1;
        _nmb2   = (int)testNmb2;
        
        //判断用户输入的数值是否是整型
        if (_resurt < 2) {
            
            printf("输入的数字有误,请重新输入!\n");
            y--;
        }else if (!(testNmb1 == _nmb1 && testNmb2 == _nmb2 )){
            
            printf("输入的数字有误,请重新输入!\n");
            y--;
        }else if (medu == '/' && _nmb2 != 0) {//除数不能为0
            
            //提示
            printf("除数不能为0,请重新输入!\n");
            //循环再进行
            y--;
            //跳出本次循环
        }
    }
作者: 大路朝天    时间: 2015-4-9 18:32
波阿波 发表于 2015-4-9 18:22
给楼主个赞!

来点实在的,送点黑马币
作者: 大路朝天    时间: 2015-4-9 18:33
guanguan0622 发表于 2015-4-9 18:24
黑马币够了!

多余的送我吧,我还差很多
作者: 大路朝天    时间: 2015-4-9 18:34
senheima 发表于 2015-4-9 18:30
double a;
    scanf("%lf",&a);
    printf("%d\n",(int)a);

卧槽,貌似懂了点什么
作者: 流云踏风    时间: 2015-4-9 18:38
大神啊,太强大了
作者: wang619590713    时间: 2015-4-9 18:39
看来我还差得远啊
作者: Ios_bawenlong    时间: 2015-4-9 22:30
大路朝天 发表于 2015-4-9 18:31
以下内容简直看不懂啊!!!

//清空scanf函数的缓冲区

限制用户只能输入整数,否则提醒用户重新输入




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2