回答編集履歴

2

プログラム例の追記

2015/11/06 23:44

投稿

otn
otn

スコア84645

test CHANGED
@@ -13,3 +13,155 @@
13
13
  5. `scanf_s`よりも`fgets`と`sscanf_s`を組み合わせた方が、わかりやすい動作をします。
14
14
 
15
15
  6. `while(1) { ~~~; if(~) { break; } ~~; }`というループをうまく使うと良いです。
16
+
17
+
18
+
19
+ 追記:
20
+
21
+ 思い直して、書き直し例のプログラムを載せてみます。
22
+
23
+ ```C
24
+
25
+ #include <stdio.h>
26
+
27
+
28
+
29
+ int getint(char *errmsg){
30
+
31
+ // 整数を入力して返す
32
+
33
+ // 整数が入力されなかったらエラーメッセージを出して入力し直し
34
+
35
+ char line[200];
36
+
37
+ int x;
38
+
39
+
40
+
41
+ while(1) {
42
+
43
+ fgets(line,sizeof(line),stdin);
44
+
45
+ if(sscanf_s(line,"%d",&x)>0){
46
+
47
+ return x;
48
+
49
+ }
50
+
51
+ printf(errmsg);
52
+
53
+ };
54
+
55
+ }
56
+
57
+
58
+
59
+ int main(void){
60
+
61
+ int a; //整数1
62
+
63
+ int b; //整数2
64
+
65
+ int x; //演算子
66
+
67
+ int y; //続けるかどうか
68
+
69
+
70
+
71
+ do{
72
+
73
+ a = getint("整数のみを入力してください。\n");
74
+
75
+
76
+
77
+ printf("演算子を入力してください。\n");
78
+
79
+ printf("足し算なら1。\n引き算なら2。\n掛け算なら3。\n割り算なら4。\n余りを求めるなら5。\n");
80
+
81
+
82
+
83
+ while(1) {
84
+
85
+ x = getint("1から5の間の整数で入力してください。\n");
86
+
87
+ if(x>=1 && x<=5){
88
+
89
+ break;
90
+
91
+ }
92
+
93
+ printf("1から5の間の整数で入力してください。\n");
94
+
95
+ }
96
+
97
+ printf("二番目の数字を入力してください\n");
98
+
99
+
100
+
101
+ b = getint("整数のみを入力してください。\n");
102
+
103
+
104
+
105
+ switch (x) {
106
+
107
+ case 1:
108
+
109
+ printf("%d+%dの値は%dです", a, b, a + b);
110
+
111
+ break;
112
+
113
+ case 2:
114
+
115
+ printf("%d-%dの値は%dです", a, b, a - b);
116
+
117
+ break;
118
+
119
+ case 3:
120
+
121
+ printf("%d×%dの値は%dです", a, b, a*b);
122
+
123
+ break;
124
+
125
+ case 4:
126
+
127
+ if(b==0){
128
+
129
+ printf("ゼロでは割れません\n");
130
+
131
+ break;
132
+
133
+ }
134
+
135
+ printf("%d÷%dの値は%dです", a, b, a / b);
136
+
137
+ break;
138
+
139
+ case 5:
140
+
141
+ if(b==0){
142
+
143
+ printf("ゼロでは割れません\n");
144
+
145
+ break;
146
+
147
+ }
148
+
149
+ printf("%dと%dを割ったときの余りは%dです", a, b, a%b);
150
+
151
+ break;
152
+
153
+ }
154
+
155
+ printf("\n続けますか?Yesなら偶数、Noなら奇数を入力してください。\n");
156
+
157
+ y = getint("Yesなら偶数、Noなら奇数を入力してください。\n");
158
+
159
+ } while (y % 2 == 0);
160
+
161
+ return 0;
162
+
163
+ }
164
+
165
+ ```
166
+
167
+ 細かいことを言うと、fgetsがEOFを返した場合の考慮も必要ですが、省略。

1

タイプミスの修正

2015/11/06 23:44

投稿

otn
otn

スコア84645

test CHANGED
@@ -12,4 +12,4 @@
12
12
 
13
13
  5. `scanf_s`よりも`fgets`と`sscanf_s`を組み合わせた方が、わかりやすい動作をします。
14
14
 
15
- 6. `while(0) { ~~~; if(~) { break; } ~~; }`というループをうまく使うと良いです。
15
+ 6. `while(1) { ~~~; if(~) { break; } ~~; }`というループをうまく使うと良いです。