柿子饼同学 发表于 2022-1-17 16:11:22

计算器程序输入+不起作用

//小计算器
#include <bits/stdc++.h>
using namespace std;
int main(){
        float num1, num2;
        char op;
       
        scanf("%f%f%c", &num1,&num2,&op);
       
        switch(op){
                case'+':printf("%f", num1 + num2); break;
                case'-':printf("%f", num1 - num2); break;
                case'*':printf("%f", num1 * num2); break;
                case'/':if(num2 == 0){
                                        printf("除数不为零!");
                                }
                                else{
                                        printf("%f", num1 / num2);
                                }break;
                default:printf("INVALID OP");
        }
       
        return 0;
}
如上 , 是一个基本的计算器 , 但是我输入加号时它返回 INVALID OP , 不知道怎么回事 , 求解

傻眼貓咪 发表于 2022-1-17 16:15:03

op 读取到空格?

柿子饼同学 发表于 2022-1-17 16:18:49

傻眼貓咪 发表于 2022-1-17 16:15
op 读取到空格?

唔 , 我是一个参数一个空格输入的 , 但是scanf不是用空格分割参数嘛

傻眼貓咪 发表于 2022-1-17 16:20:45

试试改成 scanf("%f%f %c", &num1,&num2,&op);
%f%f空格%c

柿子饼同学 发表于 2022-1-17 16:23:50

傻眼貓咪 发表于 2022-1-17 16:20
试试改成 scanf("%f%f %c", &num1,&num2,&op);
%f%f空格%c

哇 , 可以了!
这是为什么呢

傻眼貓咪 发表于 2022-1-17 16:29:55

因为%c读取到的是所有ASCII字符,包括换行、空格等。你输入 123 456 + 这里前面两个 %f 读取 123 和 456 后,紧接着还有空格和字符 +,所以%c会先取空格。

柿子饼同学 发表于 2022-1-17 16:38:54

傻眼貓咪 发表于 2022-1-17 16:29
因为%c读取到的是所有ASCII字符,包括换行、空格等。你输入 123 456 + 这里前面两个 %f 读取 123 和 456 后 ...

所以读取字符类型时要空一格
明白了
谢谢~
页: [1]
查看完整版本: 计算器程序输入+不起作用