#include <stdio.h> int main(void){ double a, b, ans; char o; //演算子 int x; //繰り返すかどうか char line[1000]; do{ printf("電卓です。\n数字を入力してください。\n"); fgets(line,sizeof line,stdin); sscanf_s(line,%lf,&a); printf("演算子を入力してください。\n"); fgets(line,sizeof line,stdin); sscanf_s(line,%c,&o,1); printf("数字を入力してください\n"); fgets(line,sizeof line,stdin); sscanf_s(line,lf,&b); switch (o) { case '+': printf("%lf+%lfの値は%lfです", a, b, a + b); break; case '-': printf("%lf-%lfの値は%lfです", a, b, a - b); break; case '*': printf("%lf×%lfの値は%lfです", a, b, a*b); break; case '/': if (a == 0 || b == 0){ printf("0で除算はできません。\n"); break; } else{ printf("%lf÷%lfの値は%lfです", a, b, a / b); break; } default: printf("演算子は+か-か*か/のみ対応しています。"); break; } printf("\n続けますか?Yesなら偶数、Noなら奇数を入力してください。\n"); scanf_s("%d", &x); } while (x % 2 == 0); return 0; }
これで実行すると、まず演算子を入力できません。scanf_sが飛ばされ二つ目のprintfが出力されます。scanf_sを使って文字を入力してもらうには、この書き方じゃないのですか?
そのため、0で除算云々の所にバグがあるかどうかも調べれません。
また、3つ目のscanf_sのところで何を入力しようとwhile defaultが実行されます。
最後に、「続けますか?」のところで、数字を入力すれば正しく動作するのですが、文字を入力すると、入力した文字数分ループします。
この場合、どのように記述するとよいですか?
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/06 13:19
退会済みユーザー
2015/11/07 23:50
2015/11/08 00:54