C++ 为什么有时我输入一个整数,程序会将第一个输入的数字打印成十进制数?
这是我的密码。正如您所看到的,数据类型是float,因为存在除法运算。我每次都会遇到的问题是,当用户想要查看历史记录时,我输入的第一个数字变成了十进制数字 以下是示例输出: 历史: 1.)6*2.00263=12 2.)3+2=5 代码如下: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
#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欢迎使用堆栈溢出。您是否尝试过通过调试器运行代码?您应该识别有问题的代码,并发布重现问题所需的最少代码,而不是显示所有代码。请参阅。感谢您的建议,我希望有一天我会在编程方面变得更好