• ベストアンサー

コンパイルすると『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; }

質問者が選んだベストアンサー

  • ベストアンサー
noname#77845
noname#77845
回答No.1

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); }

C-baby
質問者

お礼

回答有難うございました。 a=getchar(); を scanf("%d",&a); に変更したところ 入力値が大きすぎなければ、正しい答えを返すようになりました。 やはり、問題点は { } の欠落のためだったようです。 有難うございました。

C-baby
質問者

補足

早速の回答ありがとうございます。 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); } }

その他の回答 (4)

  • imopro
  • ベストアンサー率35% (58/163)
回答No.5

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); } }

C-baby
質問者

お礼

回答有難うございました。 私もあとから気がつき、テキストで確認しました。 お手数をおかけいたしました。 なお、今回の質問はNo.1さんのところに書き込んだように、{ }をつけたし、scanf("%d",&a);に直したところ、意図した結果が出ましたので質問を締め切りたいと思います。 どうも皆様、有難うございました。

  • imopro
  • ベストアンサー率35% (58/163)
回答No.4

同じく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); } }

C-baby
質問者

お礼

回答有難うございました。 上記追加項目について getcharは半角文字一文字分しか処理しないんでしたね。 その辺の理解が不十分でした。済みません。

C-baby
質問者

補足

回答有難うございます。早速、プログラムをコピペしてコンパイルしてみましたが、 10 を入力した結果、 入力値は9ではなく 1です。 と出ました。 コンパイルの不良でしょうか?

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

if文には、1つの文または1つのブロックが続きます。 ブロックとは、1つ以上の文の前後を{ と }で囲ったものです。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

if(a == 9) に括弧が無い。 if(a == 9){   printf("入力値は%dです。\n",a);   break; else   printf("入力値は9ではなく %dです。\n",a);   break; } でしょ?

C-baby
質問者

補足

回答有難うございます。 早速{ }をつけてコンパイルしてみましたが、結果は・・・ エラー 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; } }

関連するQ&A