C++ 为什么有时我输入一个整数,程序会将第一个输入的数字打印成十进制数?

C++ 为什么有时我输入一个整数,程序会将第一个输入的数字打印成十进制数?,c++,C++,这是我的密码。正如您所看到的,数据类型是float,因为存在除法运算。我每次都会遇到的问题是,当用户想要查看历史记录时,我输入的第一个数字变成了十进制数字 以下是示例输出: 历史: 1.)6*2.00263=12 2.)3+2=5 代码如下: #include<iostream> using namespace std; int add(int a, int b); int subtract(int a, int b); int multiply(int a, int b); flo

这是我的密码。正如您所看到的,数据类型是float,因为存在除法运算。我每次都会遇到的问题是,当用户想要查看历史记录时,我输入的第一个数字变成了十进制数字

以下是示例输出:

历史:

1.)6*2.00263=12 2.)3+2=5

代码如下:

#include<iostream>
using namespace std;
int add(int a, int b);
int subtract(int a, int b);
int multiply(int a, int b);
float divide(float a,float b);
int remainder(int a, int b);
void convert(int a, int b);
int main(){
    int size = 0;
    int result[size];
    float num1[size];
    float num2[size];
    char operation[size];
    char answer;
    while(true){
        cout<<"Enter two numbers: \n";
        cout<<size;
        while(!(cin>>num1[size]>>num2[size])){
            system("cls");
            cout<<"Invalid Input. PLease try again: \n";
            cin.clear();
            cin.ignore(2);
        }
    Operation:
    cout<<"Choose Operation: \n"
        <<"   +   --- Addition  \n"
        <<"   -   --- Subtraction   \n"
        <<"   *   --- Multiplication   \n"
        <<"   /   --- Division   \n"
        <<"   %   --- Remainder   \n";
    cout<<"Operation: ";
    cin>>operation[size];

    switch(operation[size]){
        case '+':
            result[size]=add(num1[size],num2[size]);
            cout<<result[size];
            break;
        case '-':
            result[size]=subtract(num1[size],num2[size]);
            break;
        case '*':
            result[size]=multiply(num1[size],num2[size]);
            break;
        case '/':
            result[size]=divide(num1[size],num2[size]);
            break;
        case '%':
            result[size]=remainder(num1[size],num2[size]);
            break;
        default:
            system("cls");
            cout<<"Please enter a valid operation.\n\n";
            goto Operation;
    }
    cout<<"Do you want to try again? (Y or N): ";
    cin>>answer;
        switch(answer){
            case 'Y':
            case 'y':
                system("cls");
                size++;
                continue;
            default:
                cout<<"Do you want to view history? ";
                cin>>answer;
                switch(answer){
                    case 'Y':
                    case 'y':
                        system("cls");
                        cout<<"History:\n\n";
                        for(int i=0;i<=size;i++){
                            cout<<i+1<<".) ";
                            cout<<num1[i]<<operation[i]<<num2[i]<<"="<<result[i];
                            cout<<endl;
                        }
                        cout<<endl;
                        cout<<"Do you want to try again? (Y or N): ";
                        cin>>answer;
                            switch(answer){
                                case 'Y':
                                case 'y':
                                    system("cls");
                                    size++;
                                    continue;
                                default:
                                    cout<<"Thank you\n";
                                    return 0;
                            }
                    default:
                        cout<<"Thanky You!\n";
                        return 0;
                }
        }   
    }
}
int add(int a, int b){
    int result;
    result=a+b;
    cout<<"The answer is: "<<result<<endl;
    return result;
    }
int subtract(int a, int b){
    int result;
    result=a-b;
    cout<<"The answer is: "<<result<<endl;
    return result;
}
int multiply(int a, int b){
    int result;
    result=a*b;
    cout<<"The answer is: "<<result<<endl;
    return result;
    }
float divide(float a, float b){
    float result;
    result=a/b;
    cout<<"The answer is: "<<result<<endl;
    return result;
}
int remainder(int a, int b){
    int result;
    result=a%b;
    cout<<"The answer is: "<<result<<endl;
    return result;
}
#包括
使用名称空间std;
整数相加(整数a、整数b);
整数减去(整数a,整数b);
整数乘(整数a,整数b);
浮动分割(浮动a、浮动b);
整数余数(整数a,整数b);
无效转换(整数a、整数b);
int main(){
int size=0;
int结果[大小];
浮点数m1[大小];
浮动num2[尺寸];
字符操作[大小];
答案;
while(true){
coutnum2[大小]){
系统(“cls”);

CUT

在代码中有几个问题,涉及数组本身。首先,在C++中,定义数组时,大小必须是编译时常数,因此:

int size = 0;
int results[size];
不是有效的C++。大概是使用了接受VLAs的编译器,但这不是标准C++,应该避免。你应该有<代码>大小<代码>常数。< /p> 其次,您正在初始化大小为0的数组。从
dcl.array/1
,相对于数组的大小,它的值应该大于零。因此,您的数组声明无效。但是,这甚至不应该编译,因为您使用的是VLAs,可能编译器也跳过了此一致性检查

第三,您有以下代码:

cin>>num1[size]>>num2[size]
由于
num1
num2
都声明其大小为
size
,因此您已经越界了。数组只能从
0
访问
size-1
。这是未定义的行为。相同的问题在不同的数组中多次出现。
此外,在您的循环中:

for(int i=0;i<=size;i++){
    cout<<i+1<<".) ";
    cout<<num1[i]<<operation[i]<<num2[i]<<"="<<result[i];
    cout<<endl;
}

for(int i=0;i请包括输入、输出和预期输出。第一个数字
6
没有小数位,您是否将
6
作为输出,但预期
6.00
?请说明您的代码中有UB…
int结果[大小]
其中
size==0
定义了一个大小为0的数组。然后,您稍后将访问其中的一些随机元素…而且,VLA不是有效的C++并且如果我将数据类型更改为整数,结果会出错,就像我输入2和1,并且操作是加法,结果会变为45或不准确的东西Expected Output是6不是6.00欢迎使用堆栈溢出。您是否尝试过通过调试器运行代码?您应该识别有问题的代码,并发布重现问题所需的最少代码,而不是显示所有代码。请参阅。感谢您的建议,我希望有一天我会在编程方面变得更好