以下是我的一个较大程序的已编辑代码段。
(Original code can be found here)功能
我已经制作了一个可运行的程序(它有错误)
#include<iostream>
#include<math.h>
using namespace std;
int main(){
char op;
double n1,n2;
while(true){
cin>> n1 >> op >> n2;
switch(op){
case '+' : cout<<n1 + n2 ; break;
case '-' : cout<< n1 - n2 ; break;
case 'x' :
case '*' : cout<< n1 * n2 ; break;
case '/' : cout<< n1/n2 ; break;
case '^' : cout<< pow(n1,n2); break;
case '<' : (n1<n2)? cout<<"True":cout<<"False"; break;
case '>' : (n1>n2)? cout<<"True":cout<<"False"; break;
case '=' : (n1==n2)? cout<<"True":cout<<"False"; break;
case '%': int N1 = floor(n1); int N2 = floor(n2); cout << N1 % N2; break;
default : cout<< "That operation is not available";
}
}
}
注意:我正在使用在Windows Vista上运行的Code :: Blocks。
我遇到的问题有两个问题。
我无法将%部分作为案例放在switch-case中。我执行此操作时,我的编译器会抛出错误。错误是:
|line 20| jump to case label [-fpermissive]
|line 19| crosses initialization of 'int N2'
|line 19| crosses initialization of 'int N1'
当我为输入输入一个乱码值(字符串)时,程序进入无限循环。
为什么会发生这些事情?
答案 0 :(得分:4)
我无法将%部分作为案例放在switch-case中。我执行此操作时,我的编译器会抛出错误。
您忘了向我们展示您尝试过的内容以及错误是什么,但我猜您尝试在switch
块中声明并初始化一些变量:
switch(op){
//...
case '%': int N1 = floor(n1); int N2 = floor(n2); cout << N1 % N2; break;
//...
}
这是不允许的,以防止程序跳转到变量的范围而不初始化它们。相反,您需要引入一个内部块来对case
中的变量进行范围调整:
case '%': {int N1 = floor(n1); int N2 = floor(n2); cout << N1 % N2; break;}
^ ^
或根本不打扰变量:
case '%': cout << floor(n1) % floor(n2); break;
当我为输入输入一个乱码值(字符串)时,程序进入无限循环。
那是因为你没有检查输入的结果。最简单的解决方法是在输入失败时结束循环:
while (cin>> n1 >> op >> n2) {
switch (op) {
//...
}
}
或者,您可以在循环中检查结果,如果失败则清除错误(使用cin.clear()
)。
答案 1 :(得分:0)
%
导致问题的原因:您能否显示错误代码?对我来说听起来像是一个错字op
代码是乱码并且你遇到了默认情况。