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;
}
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);
}
この回答への補足
早速の回答ありがとうございます。
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);
}
}
回答有難うございました。
a=getchar(); を scanf("%d",&a); に変更したところ
入力値が大きすぎなければ、正しい答えを返すようになりました。
やはり、問題点は { } の欠落のためだったようです。
有難うございました。
No.2
- 回答日時:
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;
}
}
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);
}
}
この回答への補足
回答有難うございます。早速、プログラムをコピペしてコンパイルしてみましたが、
10 を入力した結果、
入力値は9ではなく 1です。 と出ました。
コンパイルの不良でしょうか?
回答有難うございました。
上記追加項目について
getcharは半角文字一文字分しか処理しないんでしたね。
その辺の理解が不十分でした。済みません。
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);
}
}
回答有難うございました。
私もあとから気がつき、テキストで確認しました。
お手数をおかけいたしました。
なお、今回の質問はNo.1さんのところに書き込んだように、{ }をつけたし、scanf("%d",&a);に直したところ、意図した結果が出ましたので質問を締め切りたいと思います。
どうも皆様、有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
printf で二進表示を行いたい。
-
10個出力で改行したいのですが...
-
コマンドラインに出力した文字...
-
ブラックジャック
-
C言語で、「自然数nを入力し、n...
-
error C2143: 構文エラー : ';'...
-
scanfに文字が入力されたときに...
-
4の倍数を論理演算で表す。。
-
縦の棒グラフ
-
パスカルの三角形についてのCプ...
-
(C言語)めちゃくちゃな値にな...
-
ピラミッド表示プログラム。
-
C言語 ツェラーの公式を使った...
-
CTRL+Dでループを抜けるには
-
勝率をプログラムに
-
Visual Sutdio 2017 でのC言語...
-
%P と %X の違い
-
printf( " %2d", p * q );
-
C言語 プログラミング ごめんな...
-
printf()文の書式
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
printf( " %2d", p * q );
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
cshの文字列操作(0埋め)
-
万年カレンダーのC言語プログラ...
-
コマンドラインに出力した文字...
-
scanfに文字が入力されたときに...
-
コンパイルエラーについて
-
ホームページをC言語で作りたい...
-
改行について 1行に何個かづ...
-
台形の面積を求めるプログラム
-
なぜgccはstdio.hをインクルー...
おすすめ情報