• ベストアンサー

visual stdio C++ でのif文

C言語の勉強をしようと、『Visual Stdio C++ 2008 Express Edition』をインストールして使用していたのですが よくわからない現象起きてしまったので、質問させていただきます。 例えばint型のanという変数があったとします。 そのanを使って an = 50; if((an = 20) || (an = 30) || (an = 40)) printf("..."); else printf("..."); このようなプログラムを書いたら、if文であるにもかかわらず anの値が20に変化してしまうんです。 もしかすると何かvisual stadioの設定がいけないのでしょうか? ご教授お願いいたします。

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

(an = 20)なので20に変化するのは当然ですね この時点で真と評価され後の部分は実行されないので20のままとなります。 等しい(an == 20) 等しくない(an != 20)

komakuma
質問者

お礼

初歩的なことでお時間をとらせて申し訳ないです。 条件判定中でも代入してしまうんですね、勉強になりました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

条件判定文中では、 == を使います。 = では、値が代入されていまいます。

komakuma
質問者

お礼

条件判定は=が二つ必要なんですね。 初歩的なことで、お恥ずかしいです。 勉強になりました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Visual C++ 2008 Express Edition

    Visual C++ 2008 Express Editionをダウンロードしたのですが、使い方が全く分かりません。C言語を学習しています。 例えば #include <stdio.h> int main(void) { printf("Hello, World!\n"); return 0; } というようなプログラミングを実行するにはどうすればいいでしょうか

  • Visual C++ Express Edition でもprintf

    Visual C++ Express Edition でもprintfを使いたい 私は、Visual C++ 2008 Express Editionを使っています。  以前はVisual Studio 2005 Professionalを使っていました。 今まではプログラムを走らせている間の変数の変化を見るために、 printf関数を使って「出力」ウィンドウに数値を表示させていました。 Visual C++ 2008 Express Editionに変更してから、 同一のソースコードをコンパイル、実行しても printf文で記述した出力内容を「出力」ウィンドウに表示させることができません。 これは、Express Edition特有のものでしょうか? printfを使って変数を表示できる方法があれば教えてください。 よろしくお願いします。

  • visual Stdio、C++.net

    visual Stdio、C++.netでC言語で書いたソースをコンパイルしたのですが・ 以下のようにmain関数で引数を受け取るように記述しているにも関わらず この記述のところで止まらず通り抜けて次の処理に進んでしまいます・・ 対処法知っている方いましたらお願いします。 int main(int argc,char *argv[]) { (省略) }

  • elseif文の中のif文のところで

    今、c言語の勉強をしていまして、 演習問題のプログラムを作成しています。 elseif文の中のif文のところで エラーが出てしまうのですが・・・。 ご教授して頂けたら幸いです。 #include<stdio.h> int main(void) { int kyori,untin; printf("ようこそ \n"); printf("距離を入力してください->"); scanf("%d", &kyori ); if(kyori < 5) untin = 120; else if(kyori >= 5 && kyori < 21) untin = ((kyori-4)/2*20)+120; else if(kyori >= 21 && kyori < 1000) untin = ((kyori-20)/5*40)+280; //7840円 else if(kyori >= 1000 ) untin = ((kyori-1000)/10*50)+8120 ここでエラー→→→ if(untin <> 0) untin = untin + 50; printf("運賃は%dです。",untin); }

  • error C2143: 構文エラー : ';' が '{' の前にありません。

    #include <stdio.h> int main(void) {   int in;   printf("20以上の数字を入力してください\n");   scanf("%d", &in);   if(in >= 20){     printf("20以上の数字です。\n");     printf("終了します\n\n");}   else if(in <= 5){     printf("5以下の数字が入力されました\n");     printf("20には程遠いです\n\n");}   else(in <= 19){     printf("20以上の数字ではありません\n");     printf("20以上の数字を入力してください\n\n");}   return 0; } C言語でVisual C++ Expressを使っています このコードでビルドすると (16) : error C2143: 構文エラー : ';' が '{' の前にありません。 と表示されてしまいます。何がいけないのでしょうか?

  • Visual C++でのif文

    Visual C++でifやelseを入れた文をコンパイルすると エラーがでてしまします。Visual C++専用の命令が あるんでしょうか?分かる人教えてください。 あと、ほんとに最初から始める場合にお勧めの書籍などがあれば教えてください。

  • visual c++ 2008のバグ?

    visual c++ 2008 Express Editionを使ってC++言語でプログラミングしているのですが、どうしても理解できない動作に困っています。 int putPiece(int x, int y, int typ, int dir, int blo, int col){ ・・・ if(canPlacePiece(x, y, typ, dir, blo, col) == true){ ・・・ } } int canPlacePiece(int x, int y, int typ, int dir, int blo, int col){ ・・・ //変数宣言 printf("%d,",x); //デバックのため ・・・  } かなり省略してますが、上のような感じで、パズルのピースを置くための関数putPiece内で引数をそのまま関数canPlacePiece(ピースを置けるか調べる関数)に渡します。関数canPlacePieceはピースが置けるならtrueを返し、置けないならfalseを返すようにしてあり、関数putPiece内のif文内にはピースを置くための処理が書かれています。 問題はこの関数putPieceを呼び出した際に、ループ文があるわけでもないのにcanPlacePiece関数が何回も呼び出された感じの動作をするということです。たとえばputPiece関数の引数xに1を入れて呼び出したとき、canPlacePiece関数内printf文でxの中身1が1回だけ表示されるだけのはずが、「1,2,2,2,2,2,・・・」と表示されます。このようにcanPlacePiece関数が引数を変えて何回も呼び出されているような動作をしていますが、この関数を抜けるとピースを置く処理をしてreturn trueするか、置けずにreturn falseしてputPiece関数を抜けるだけなので、こんな動作はありえないはずなんです。 これはvisual c++ 2008のバグ? それともC++の仕様? それともまだ見落としているところがある?

  • Cプログラムの条件文  if,else if ,elseについて教えてください。

     こんにちは。課題でどうしても解らないところがあるので教えてください。  次のプログラムは一桁の数(0~9)が偶数(EVEN)か奇数(ODD)かを表示するものです。  #include <stdio.h> main() { int num; printf("please enter a number[0~9]:"); scanf("%d",&num); if (num % 2 ==0) printf("%d is an EVEN. \n", num); else printf("%d is an ODD. \n", num); } というプログラムをコンパイルして実行すると、ちゃんと実行されるのですが、10以上の数や負数を入力しても動作してしまうんです。  そこで0~9の範囲以外の数が入力されていないかを確認して、その場合を偶数、奇数の判断や表示をせず、エラーメッセージだけを表示して終了するプログラムに書き換えなくてはならないのですが、まず  (1)判断する条件式(変数numの内容が0~9の範囲にあるか)で、num >= 0 && num <= 9 をどこに入れればいいか。  (2)please enter a number[0~9]: 8 8 is an EVEN.  (←例えば8を入れると普通こうなるのですが)   please enter a number[0~9]:12   ERROR:12 is in out of range!!  (←0~9以外ののものだったら、この様にエラー表示にしたいのです。  私が考えたプログラムは  #include <stdio.h> main() { int num; printf("please enter a number[0~9]:"); scanf("%d",&num); if (num % 2 ==0) printf("%d is an EVEN. \n", num); if else printf("%d is an ODD. \n", num); else(num >= 0 && num <= 9) printf("ERROR:%d is in out of range!! \n",num); } という風に考えたのですがコンパイルできません。プログラミング初心者なので、書いている内容も解りにくいんですが、どうかよろしくお願いします。

  • C言語 if文について

    #include <stdio.h> int main(void) { int a; printf("整数を入力してください:"); scanf("%d",&a); if(a % 10 == 5) puts("最下位の桁は5です。"); else puts("最下位の桁は5でありません。"); return 0; これでどうして読み込んだ整数値の最も下の桁が5であるかどうかを判断しているのでしょう? ifの式がいまいち理解できません。 解説できる方いませんか?

  • if~else文の中にまたif~else文をいれるには。

     このプログラムを思うように実行したいのですが、できません。 コンパイルはできるのですが、警告が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; }