1つだけ過去を変えられるとしたら?

 このプログラムを思うように実行したいのですが、できません。
コンパイルはできるのですが、警告が4つほど出て、結果も自分が思ってるのとは違います。
プログラムのどこを改善すべきか教えてください。
OSはWindows XPで、コンパイラはボーランドのフリーコンパイラを使用しています。
#include<stdio.h>
int main(){
int a,b,c,d;
printf("1か0を入力してください。\n");
scanf("%d",&a);
if(a=0)
{
printf("2か3を入力してください。\n");
scanf("%d",&b);
if(b=2){
printf("今まで合計は%dです。\n",a+b);
}
if(b=3){
printf("今まで合計は%dです。\n",a+b);
}
else {
printf("指定した数字を入力して下さい。\n");
}
}
else if(a=1)
{
printf("あなたは%dを入力しました。\n",a);
}
else
{
printf("指定した数字を入力してください。\n");
}
return 0;
}

A 回答 (7件)

No1に追加です。

No6のかたが回答されていますが、せっかく途中まで書いたので参考までに回答させていただきます。矢印のある行が変更したところです。(矢印は入力しないでください)今は試せないんですけど多分これでできると思います。うまくいかなかったらすいません。あと字下げしても投稿する際に左寄せになってしまうようなので見づらいかもしれませんが許してください。もっといいやり方があると思いますけど参考にしてみてください。

#include<stdio.h>
int main(){
int a,b,c,d;
printf("1か0を入力してください。\n");
scanf("%d",&a);
if(a==0) ←
{
printf("2か3を入力してください。\n");
scanf("%d",&b);
if(b==2) ←
{
printf("今まで合計は%dです。\n",a+b);
}
else  ←
{ 
if(b==3) ←
{ 
printf("今まで合計は%dです。\n",a+b); 
}
else  
{
  printf("指定した数字を入力して下さい。\n"); 
}  ←この } は20行目のelseを終了する意味
}  ←この } は14行目のelseを終了する意味
}  ←この } は7行目のifを終了する意味

if(a==1) ←初めのifが当てはまらなかったり、初めのifの処理を終えるとここへ来る。
{
printf("あなたは%dを入力しました。\n",a);
}
else ←
{
printf("指定した数字を入力してください。\n");
}
return 0;
}
    • good
    • 0

#include<stdio.h>


int main()
{
int a,b,c,d;
printf("1か0を入力してください。\n");
scanf("%d",&a);
if(a == 0){
printf("2か3を入力してください。\n");
scanf("%d",&b);
if(b == 2){
printf("今まで合計は%dです。\n",a+b);
}
if(b == 3){
printf("今まで合計は%dです。\n",a+b);
}
else {
printf("指定した数字を入力して下さい。\n");
}
}
else if(a == 1){
printf("あなたは%dを入力しました。\n",a);
}
else {
printf("指定した数字を入力してください。\n");
}
return 0;
}

こんなかんじで!
あれ?スペースで字下げしても省かれるようですね。
    • good
    • 0
この回答へのお礼

実行できました。
どうもありがとうございました。

お礼日時:2005/10/01 19:40

余計なお世話かもしれませんが。



質問文では、字下げが全く行われていませんが
これは、此処に掲示する際にそうなってしまったのでしょうか?
それとも、元々「字下げ」していないのかな?

字下げしないと、どっからどこまでが、どのifに対応するのか視認性が悪くなり、うっかりミスの見落としに繋がります。
参考まで。
    • good
    • 0

if分の比較ですが



= ではなく == ですよ
    • good
    • 0
この回答へのお礼

そうでした。
ありがとうございました。

お礼日時:2005/10/01 19:36

ネストがずれてるのかな?



と調べてみたが合っていそう。

と思ったら
if文なか
「a=1」なんですか?
「a==1」なら分かるけど。

「a=1」だと、aに代入する->代入は出来るので成功する->成功はtrue
ってことで、何してもelseは側には行きませんね。
    • good
    • 0
この回答へのお礼

ごもっともな意見です。
そうでした「==」にするのを忘れてました。
ありがとうございました。

お礼日時:2005/10/01 19:34

Cは詳しくは無いのですが・・・{}の数が合ってないような気がします。


18行目の‘}’を削除するとよいのでは?
    • good
    • 0

if(a=0)


のところを
if(a==0)
にすればできるかもしれませんよ。(4箇所)
    • good
    • 0
この回答へのお礼

できました!
ありがとうございました。

お礼日時:2005/10/01 19:21

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