- ベストアンサー
C言語の勉強でわからないところがあります
- C言語の勉強を始めたばかりで困っています。明解C言語入門編の演習4-3がうまくいかないです。
- プログラムは二つの整数値を読み込み、小さい方以上で大きい方以下の整数を全て加えた値を表示するものです。
- 22行目で記述エラーがあり、else文を削除すると大きい数になってしまいます。なぜこの形では動かないのか知りたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
(1)前者の方の通りif elseに{}をつけてください。 雑な説明ですが if(num1>num2) printf("ooo"); のように1行で処理できるなら必要ありませんが、2行以上にわたる場合は{}でくくる必要があります。 (2)printf("%d以上%d以下の全整数の和は", n1>n2 ? n1,n2:n2,n1); 使い方が・・・ 少々先走りすぎたのか もう一度少しだけ単元を戻って見直すと良いかと思います c言語サイトをのせておきます。 http://www9.plala.or.jp/sgwr-t/ http://9cguide.appspot.com/
その他の回答 (2)
- Wr5
- ベストアンサー率53% (2173/4061)
あと… >printf("%d以上%d以下の全整数の和は", n1>n2 ? n1,n2:n2,n1); の書き方もヘンです。 三項演算子…のつもりでしょうか?? # 書き方違うかと…(三項演算子はあまり使わないので不慣れですが…) [技術者向] コンピューター > プログラミング > C&C++ ってカテゴリがありますから、このカテゴリよりそちらの方が有益…かと思います。
- Wr5
- ベストアンサー率53% (2173/4061)
>とすると、「22行目」で記述エラーを発見しました。 >elseの文を削除すれば動作するのですが elseに対応するif文が無いからです。 if (n1>n2) のif文は次の行の num=n1+sub; で完結しています。 複数の文をif文の条件判定で実行したい場合は、{}でブロックにする必要があります。 水平TABなどでのインデントや空白行ではブロック区切りできません。 >大きすぎる数になってしまうのかが知りたいのです。 int num=n1; int sub=n2; で、numおよびsubに入る値っていくつでしょうかね? ローカル変数は0クリアされている保証はありません。 # int型が32ビットなら0になっている確率はおおよそ42億分の1です。