- ベストアンサー
コンパイルすると『breakの位置が誤っている』『elseの位置が誤っている』となるのは何故?
C言語初心者です。 テキストを真似たつもりで自作してみましたが、コンパイルすると下記のようにエラーが出ます。 エラー E2030 hello.cpp 11: break の位置が誤っている(関数 main() ) エラー E2054 hello.cpp 12: else の位置が誤っている(関数 main() ) エラー E2030 hello.cpp 14: break の位置が誤っている(関数 main() ) 特に問題はないように思うのですが。何故でしょうか? 解説宜しくお願いします。 #include <stdio.h> int main(void) { int a; a = getchar(); if(a == 9) printf("入力値は%dです。\n",a); break; else printf("入力値は9ではなく %dです。\n",a); break; }
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
if文は、 if(a==9){ printf("入力値は9です。\n"); } else { printf("入力値は9ではなく%dです。\n",a); } のようになります。「break」はいりません。因みに、真の場合のprintf文では、"a"を出力させる必要もありません。a==9だからです。 また、こういう書き方も有りかなと… printf("入力値は9"); if(a==9){ printf("です。\n"); } else { printf("ではなく%dです。\n",a); }
その他の回答 (4)
- imopro
- ベストアンサー率35% (58/163)
getchar()は一文字だけ読み込むので,"10"の一文字目の"1"を出力したんだと思います.もし,2文字以上の数字も扱いたいなら,以下のようにscanfを使えばいいでしょう.今度はaを数値として扱う為,int型にしました. ---- #include <stdio.h> int main(void){ int a; scanf("%d",&a); if(a == 9){ printf("入力値は%dです。\n",a); }else{ printf("入力値は9ではなく %dです。\n",a); } }
お礼
回答有難うございました。 私もあとから気がつき、テキストで確認しました。 お手数をおかけいたしました。 なお、今回の質問はNo.1さんのところに書き込んだように、{ }をつけたし、scanf("%d",&a);に直したところ、意図した結果が出ましたので質問を締め切りたいと思います。 どうも皆様、有難うございました。
- imopro
- ベストアンサー率35% (58/163)
同じくC言語初心者です. break文は,それを含んでいる最も内側のfor文,while文,do-while文,switch文をその時点で中断するものです.if文単体では使えないのでは?(ちょっと自身はないですが) 以下に正常に動くものを書いてみました. 主な変更点はaをchar型で宣言するところです. ---- #include <stdio.h> int main(void){ char a; a = getchar(); if(a == '9'){ printf("入力値は%cです。\n",a); }else{ printf("入力値は9ではなく %cです。\n",a); } }
お礼
回答有難うございました。 上記追加項目について getcharは半角文字一文字分しか処理しないんでしたね。 その辺の理解が不十分でした。済みません。
補足
回答有難うございます。早速、プログラムをコピペしてコンパイルしてみましたが、 10 を入力した結果、 入力値は9ではなく 1です。 と出ました。 コンパイルの不良でしょうか?
- asuncion
- ベストアンサー率33% (2127/6289)
if文には、1つの文または1つのブロックが続きます。 ブロックとは、1つ以上の文の前後を{ と }で囲ったものです。
- bin-chan
- ベストアンサー率33% (1403/4213)
if(a == 9) に括弧が無い。 if(a == 9){ printf("入力値は%dです。\n",a); break; else printf("入力値は9ではなく %dです。\n",a); break; } でしょ?
補足
回答有難うございます。 早速{ }をつけてコンパイルしてみましたが、結果は・・・ エラー E2030 hello.cpp 11: break の位置が誤っている(関数 main() ) エラー E2054 hello.cpp 12: else の位置が誤っている(関数 main() ) エラー E2030 hello.cpp 14: break の位置が誤っている(関数 main() ) となってしまいました。 #include <stdio.h> int main(void) { int a; a = getchar(); if(a == 9){ printf("入力値は%dです。\n"); break; else printf("入力値は9ではなく %dです。\n",a); break; } }
お礼
回答有難うございました。 a=getchar(); を scanf("%d",&a); に変更したところ 入力値が大きすぎなければ、正しい答えを返すようになりました。 やはり、問題点は { } の欠落のためだったようです。 有難うございました。
補足
早速の回答ありがとうございます。 break; および a を削除しコンパイルしてみました。 結果は 10を入力した時、下記のような結果になってしまいました。 入力値は9ではなく 49です。なぜ、49になってしまうのでしょうか? 再びご回答宜しくお願い致します。 #include <stdio.h> int main(void) { int a; a = getchar(); if(a == 9){ printf("入力値は9です。\n"); }else{ printf("入力値は9ではなく %dです。\n",a); } }