• ベストアンサー

C言語 

C言語でAとBがじゃんけんをして勝ち負けを出力するプログラムをつくりたいのですが、間違いを教えてください。(AがgでBがcならAの勝ち。AがgでBがpならBの勝ち。AがgでBがgなら引き分け。) #include<stdio.h> #include<conio.h> void main() { int A,B; printf("文字を入力せよ"); scanf("%d",&A); scanf("%d",&B); if(A=='g'||B=='c') { printf("Aの勝ち"); } if(A=='g'||B=='p') { printf("Bの勝ち"); } if(A=='g'||B=='g') { printf("引き分け"); } getch(); }

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

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.3

#include<stdio.h> #include<conio.h> void main() { char A,B; printf("文字を入力せよ"); scanf("%c",&A); printf("文字を入力せよ"); scanf("\n%c",&B); if((A=='g'&&B=='c')||(A=='c'&&B=='p')||(A=='p'&&B=='g')) { printf("Aの勝ち"); } else if((A=='g'&&B=='p')||(A=='c'&&B=='g')||(A=='p'&&B=='c')) { printf("Bの勝ち"); } else if((A=='g'&&B=='g')||(A=='c'&&B=='c')||(A=='p'&&B=='p')) { printf("引き分け"); } else { printf("入力エラー"); } getch(); } 実行後「文字を入力せよ」と出たら、1文字だけ入れてEnterを押すのを2回繰り返します。 (g[Enter]、c[Enter]のように入力する) printf("文字を入力せよ"); scanf("%c",&A); printf("文字を入力せよ"); scanf("\n%c",&B); と、 printf("文字を入力せよ"); scanf("%c",&A); scanf("%c",&B); で、どのような違いが出るか試してみましょう。

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

その他の回答 (3)

  • azicyan
  • ベストアンサー率21% (368/1747)
回答No.4

もう少しよく考えてみましょう。 >if(A=='g'||B=='c'){printf("Aの勝ち");} Aがグー又はBがチョキのときはAが勝ち。 じゃんけんは相手の手によっては、どの手でも勝てます。 これだとAはグー以外の時は勝てないことになりますよ。 Aがチョキ又はパーの時にも勝ちである条件を入れなければ。 >if(A=='g'||B=='g') Aがグー、又はBがグーのとき引き分け。 同じようにパーやチョキのときの条件がありません。 また||演算子は’または’という意味です。 Aがグーであれば、Bが何を出しても引き分けになってしまいます。 プログラムはあらゆる可能性を考えて、つぶしていかなければダメですよ。

全文を見る
すると、全ての回答が全文表示されます。
  • honiyon
  • ベストアンサー率37% (331/872)
回答No.2

こんにちは、honiyonです。 Cのコンソールアプリはあまり知識がないので外しているかも知れないですが・・・  scanfで %d というのもおかしいと思います。  これでは文字が入力できず、数字にならないでしょうか?  AとBの定義を char にして、 %dではなく%cにすると良いと思います。  ※%c・・・確かありましたよね(汗)  ところで、間違いがある事に気づかれているということは、実行して何かおかしい点を見つけた、という事だと思いますが、  具体的に、どのようにおかしい状態となっていますか?  コンパイルエラーはありましたか?

全文を見る
すると、全ての回答が全文表示されます。
  • elttac
  • ベストアンサー率70% (592/839)
回答No.1

 細かくは見ていませんので,外していたらご容赦を。  判定条件ですが,「A がグー『かつ』B がチョキ」で「A の勝ち」ですから,演算子「||」では「または」になってしまいます。「かつ」は「&&」です。

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

関連するQ&A

  • C言語プログラム

    2つの整数を入力させ、それらが等しい場合hitoshii、異なる場合にはhitoshikunaiと出力するプログラムを作りたいのですが、うまくいきません。間違っているところを教えてください。 #include<stdio.h> #include<conio.h> void main() { printf("整数を入力してください:"); int number1; scanf("%d",number1); printf("整数を入力してください:"); int number2; scanf("%d",number2); if(number1==number2) { printf("hitoshii"); } else { printf("hitoshikunai"); } getch(); }

  • C言語プログラミング

    台形の面積を求めるプログラムを作りたいのですが、最後のmensekiの出力の仕方がわかりません。printf以降のプログラムを教えてください。 #include<stdio.h> #include<conio.h> void main() { int number1,number2,number3,menseki; printf("上底を入力してください:"); scanf("%d",&number1); printf("下底を入力してください:"); scanf("%d",&number2); printf("高さを入力してください:"); scanf("%d",&number3); menseki=(number1+number2)*number3/2; printf( ここがわかりません getch(); }

  • C言語プログラム

    したのプログラムでgetch()の代わりにscanf()を使って、入力した数が負なら終了、正なら"次の数を入力してください"と表示してループを続けるプログラムを作りたいのですが、どこを変えればよいのですか? #include<stdio.h> #include<conio.h> void main() { int i=1,sum=0; char c='m'; while(c!='e')//eでない限りwhileループを実行する { sum=sum+i; printf("\n1 kara %d madewo tasuto %d desu.\n",i,sum); i++; printf("nanikakeywo oshitekudasai.owaru tokiha 'e'\n"); c=getch(); } printf("loopwo nukemashita\n"); getch(); }

  • C言語について

    「キーボードから10個の実数を入力し、それらの平均を求めるプログラムを作れ。」という問題で私は、 #include <stdio.h> void main(void) { float A; float a,b,c,d,e,f,g,h,i,j; printf("実数を入力してください:"); scanf("%f",&a); scanf("%f",&b); scanf("%f",&c); scanf("%f",&d); scanf("%f",&e); scanf("%f",&f); scanf("%f",&g); scanf("%f",&h); scanf("%f",&i); scanf("%f",&j); A=(a+b+c+d+e+f+g+h+i+j)/10; printf("平均は%fです.\n",A); } と考えたのですが、もっとすっきりとしたプログラムはないのでしょうか?もっとシンプルにしたいのです。教えて下さい。よろしくお願いします。

  • C言語(while構文)

    #include<stdio.h> #include<conio.h> void main() { int i=1,sum=0; char c='m'; while(c!='e')//eでない限りwhileループを実行する { sum=sum+i; printf("\n1 kara %d madewo tasuto %d desu.\n",i,sum); i++; printf("nanikakeywo oshitekudasai.owaru tokiha 'e'\n"); c=getch(); } printf("loopwo nukemashita\n"); getch(); } getch()の代わりに、scanf()を使って整数値を入力させ、負の数が入力されたら終了するプログラム(正を入力したら「次の数値を入力せよ」とだして、繰り返す。)を造りたいのですが、どこを変えればよいか教えてください。

  • c言語

    #include<stdio.h> #include<conio.h> void main() { int i=1,sum=0; char c=\'m\'; while(c!=\'e\')//eでない限りwhileループを実行する { sum=sum+i; printf(\"\\n1 kara %d madewo tasuto %d desu.\\n\",i,sum); i++; printf(\"nanikakeywo oshitekudasai.owaru tokiha \'e\'\\n\"); c=getch(); } printf(\"loopwo nukemashita\\n\"); getch(); } while(c!=\'e\')をwhile(c>0)にして実行したい場合はcharをintにかえて、scanfを使わなければならないのはわかりますが、どこを変えればよいか分かりません。ちなみに、while(c>0)に変えた場合に、正の数を入力した後に、「次の数を入力してください」という文を表示してからくりかえす方法をおしえてください。

  • C言語で数当てゲーム

    私は最近5月からCのプログラミングを学び始めた中3なんですが じゃんけんゲームと丁半ゲームを今までに作りました で今回数当てゲームを作ってみたのですが何回作り直しても エラーが出ます(コンパイラのエラーではなくWindows?のエラーのようなもの) じゃんけんゲームなどと同じように作ったつもりなのですが・・・・ どうなっているのでしょうか? ソースは↓です #include <stdio.h> #include <time.h> #include <stdlib.h> #include <conio.h> int main() { int kazu,i,x; printf("数当てゲーム!!\n"); srand(time(NULL)); x=0; i=0; do { kazu=rand()%9+1; printf("数を入力してください(1~9)\n"); scanf("%d",i); if(i<10){ if(i==kazu) { printf("当たり!!\n続けるなら0やめるなら0以外を入力"); scanf("%d",x); } else {printf("残念・・・はずれ\n続けるなら0やめるなら0以外を入力"); scanf("%d",x);} } else {printf("入力ミスです\n続けるなら0やめるなら0以外を入力"); getch();} }while(x==0); return 0; } 一応コンパイラのエラーは出ていないのですが・・・ 初心者なのでわかりません。 どこが原因なのか詳しくおしえてください

  • C言語について

    C言語のじゃんけんゲームを作成したいのですが、 仕様は 1.利用者とコンピュータによる対戦形式とします。 2.利用者がキーボードから入力した手(グー・チョキ・パー)と、擬似乱数を用いて生成したコンピュータの手を比較し、利用者の勝ち・あいこ・負けの結果を表示しなさい。 3.利用者の入力が不正の場合には再度入力を促すなど、適切な処理をしなさい。 4.これまでの累積勝利数・引き分け数・敗北数をそれぞれ、user_win・user_draw・user_loseの3つの変数(int型)に格納しなさい。 5.連勝中の場合は「5連勝中!」などと表示させるようにしなさい。 6.あいこである限りは自動的にじゃんけんを反復しなさい。 7.勝敗がついた場合、利用者にまだ継続するか質問した上で、じゃんけんを反復させなさい。 8.じゃんけんを終了した場合、これまでの通算成績として、累積勝利数・引き分け数・敗北数のほか、勝利=累積勝利数÷(累積勝利数+累積敗北数)×100、および、最大勝利数を計算して表示しなさい。 という仕様のじゃんけんゲームを作成したいのですが、下記に書いているまでしかできません。誰か教えていただけないでしょうか。分からなくて困っています。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ int a,c; srand(time(NULL)); c = rand()%3+1; printf("手を入力してください [1:グー 2:チョキ 3:パー] "); scanf("%d",&a); if(a==1 && c==1) printf("あなたはグーで、私もグーでした。アイコです。\n"); else if(a==1 && c==2) printf("あなたはグーで、私はチョキでした。あなたの勝ちです。\n"); else if(a==1 && c==3) printf("あなたはグーで、私はパーでした。あなたの負けです。\n"); else if(a==2 && c==1) printf("あなたはチョキで、私はグーでした。あなたの負けです。\n"); else if(a==2 && c==2) printf("あなたはチョキで、私もチョキでした。アイコです。\n"); else if(a==2 && c==3) printf("あなたはチョキで、私はパーでした。あなたの勝ちです。\n"); else if(a==3 && c==1) printf("あなたはパーで、私はグーでした。あなたの勝ちです。\n"); else if(a==3 && c==2) printf("あなたはパーで、私はチョキでした。あなたの負けです。\n"); else if(a==3 && c==3) printf("あなたはパーで、私もパーでした。アイコです。\n"); else printf("正しい手を入れてください。\n"); return 0; }

  • c言語で

    c言語で /*a==bのとき商と余を求めるそれ以外は積を求める*/ # include<stdio.h> main () { int a,b,seki,sho,joyo; printf("aとbを入力してください\n"); scanf("%d %d", &a,&b); if(a==b) printf("sho=%d\n",(a/b)); printf("joyo=%d\n",(a%b)); else printf("seki=%d\n",(a*b)); return(0); } はどこがおかしいでしょうか? あと /*小数点*/ # include<stdio,h> main () { float a,b,seki,sho,joyo; printf("%f %f",&a,&b); if(a>b) printf("sho=%f4.3\n",(a/b)); printf("joyo=%f4.3\n",(a%b)); else printf("seki=%f4.3\n",(a*b)); return (0) にいたってはエラーの嵐なのですがどうすればいいでしょうか

  • c++

    最近c++をはじめたのですが Borland C++を使用しているのですが 定価を入力したら一割引き三割引き五割引きが表示されるようにしようと以下のように入力したのですが、 1000 と入力したら  900 699 500 と表示されました。なぜ699になるのかわかりません。だれか教えてください。お願いします。 #include<stdio.h> #include<conio.h> void main() { int price; printf("定価を入力して下さい:",price); scanf("%d",&price); printf("一割引きは%d円\n",(int)(price*0.9)); printf("三割引きは%d円\n",(int)(price*0.7)); printf("五割引きは%d円\n",(int)(price*0.5)); getch(); }

このQ&Aのポイント
  • ミシンが動かなくなった時、糸の絡みが原因ではない場合もあります。E6エラーメッセージが表示される場合、下糸のところが回らなくなっている可能性があります。原因としては、下糸の詰まりやボビンの装着不良などが考えられます。対処法としては、まずは下糸の詰まりを確認し、糸くずを取り除いてから再度ミシンを起動してみてください。
  • また、ボビンの装着不良が原因である場合、正しくボビンを装着し直してみてください。ボビンケースを開け、ボビンを押し込んでロックしてから再度ミシンを起動してみてください。これらの対処法で問題が解消しない場合は、メーカーサポートに問い合わせることをおすすめします。
  • ミシンが正常に動作しない場合は、まずは糸の絡み以外の原因を確認してみましょう。E6エラーメッセージが表示される場合は、下糸のところが回らなくなっている可能性があります。下糸の詰まりやボビンの装着不良などが考えられるため、それらの原因を確認して対処してみてください。
回答を見る

専門家に質問してみよう