プロが教えるわが家の防犯対策術!

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

A 回答 (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);
}

この回答への補足

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

補足日時:2007/07/24 20:37
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/07/24 21:01

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

補足日時:2007/07/24 20:41
    • good
    • 0

if文には、1つの文または1つのブロックが続きます。


ブロックとは、1つ以上の文の前後を{ と }で囲ったものです。
    • good
    • 1

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

この回答への補足

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

コンパイルの不良でしょうか?

補足日時:2007/07/24 20:44
    • good
    • 0
この回答へのお礼

回答有難うございました。

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

お礼日時:2007/07/24 20:53

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);
}
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/07/24 21:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!