以下は、私のより大きなプログラムの 1 つから編集されたコード スニペットです。
(元のコードはここにあります)
実行可能なプログラムを作成しました (エラーがあります)
#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 を使用しています。
コードで発生している 2 つの問題があります。
% の部分を switch-case のケースとして入れることができません。これを行うと、コンパイラがエラーをスローします。エラーは次のとおりです。
|line 20| jump to case label [-fpermissive]
|line 19| crosses initialization of 'int N2'
|line 19| crosses initialization of 'int N1'
入力に意味不明な値 (文字列) を入力すると、プログラムは無限ループに入ります。
なぜこれらのことが起こっているのですか?