2016-08-15 18 views
-2

私は簡単な電卓を作るために 'switch'ステートメントを使うプログラムを作った。私が最初に整数出力&を取ってオペレータの出力を取った場合、bの値は常に '0'と表示されます。 (コードはここに書かれています)しかし、私が最初にオペレータの出力を取ると、プログラムは正常に動作します。これの理由は何でしょうか?ありがとう。switch文を使って簡単な電卓を作る

int a; 
int b; 
char sign; 

printf("Enter two required integers: "); 
scanf("%d", &a); 
scanf("%d", &b); 

printf("Enter the operator(+ or - or * or /): "); 
scanf(" %s", &sign); 


switch(sign){ 

    case '+': printf("The summation of %d and %d is %d", a,b, a+b); 
       break; 

    case '-': printf("The subtraction of %d and %d is %d", a,b, a-b); 
       break; 

    case '*': printf("The product of %d and %d is %d", a,b, a*b); 
       break; 

    case '/': printf("The division of %d and %d is %d", a,b, a/b); 
       break; 

    default: printf("Enter the right operator noob!"); 
} 

return 0; 

}

答えて

5
scanf(" %s", &sign); 

これは正しくありません。 signcharなので、1文字しか格納できませんが、メモリをオーバーライドするには1文字以上必要な文字列を読み込もうとしています。

むしろこれは基本的な質問です

scanf(" %c", &sign); 
0

を使用しています。 charには、キーボードの1文字を含めることができます。一方、文字変数の入力または出力を行う場合は、この目的のために%cを使用する必要があります。一方、我々は、文字列が複数の文字の組み合わせで構築されていることを知っています。文字列変数はcharで宣言されます

変数[サイズ];

文字列入力または出力の場合は、%sを使用する必要があります。ここで '文字列'を使用していないので、%sを%cに置き換える必要があり、これで問題は解決します。