A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 大路朝天 于 2015-4-9 19:33 编辑

基础班里,编程题要求输入两个整数(或者小数),然后再打印出来。这个怎么判断用户的输入是否合法?(如果要求输入整数,怎么判断是整数,小数同理。)

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

16 个回复

倒序浏览
沙发!!!!!!!!
回复 使用道具 举报
擦,为什么抢了沙发什么都没有:'(
回复 使用道具 举报
carescares 来自手机 中级黑马 2015-4-9 18:22:19
板凳
路过,来看答案的,没想到是提问贴
回复 使用道具 举报
给楼主个赞!
回复 使用道具 举报
可以用if啊...如果不是...返回
回复 使用道具 举报

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

#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);
}
回复 使用道具 举报
楼上哪位大神?
回复 使用道具 举报
黑马币够了!
回复 使用道具 举报
    double a;
    scanf("%lf",&a);
    printf("%d\n",(int)a);
    if (a==(int)a)
    {
        printf("%f是整数",a);
    }

    return 0;
回复 使用道具 举报
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--;
            //跳出本次循环
        }
    }
回复 使用道具 举报

来点实在的,送点黑马币
回复 使用道具 举报

多余的送我吧,我还差很多
回复 使用道具 举报
senheima 发表于 2015-4-9 18:30
double a;
    scanf("%lf",&a);
    printf("%d\n",(int)a);

卧槽,貌似懂了点什么
回复 使用道具 举报
大神啊,太强大了
回复 使用道具 举报
wang619590713 来自手机 中级黑马 2015-4-9 18:39:58
16#
看来我还差得远啊
回复 使用道具 举报
大路朝天 发表于 2015-4-9 18:31
以下内容简直看不懂啊!!!

//清空scanf函数的缓冲区

限制用户只能输入整数,否则提醒用户重新输入
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马