• ベストアンサー

Cプログラミング(文字入力)

文字を二つ入力して、TかFであれば 1~3、それ以外は4を返すプログラムです。 下記のソースでは正常に動作しませんでした。 どの文法が間違っているか判らないので、 どなたか指摘頂けないでしょうか。 宜しくお願いします。 char a,b; printf("1つめの文字を入力してください-->"); scanf("%c",&a); printf("2つめの文字を入力してください-->"); scanf("%c",&b); if(a=='T'&&b=='T')   printf("結果:1\n"); else if((a=='T'&&b=='F')||(a=='F'&&b=='T'))   printf("結果:2\n"); else if(a=='F'&&b=='F')   printf("結果:3\n"); else   printf("結果:4\n");

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

  • ベストアンサー
  • kmb01
  • ベストアンサー率45% (63/138)
回答No.1

a,bの内容を確認してください。 うちの環境ではbには改行文字が入りました。 1回目のscanfのあとでfflush(stdin)すれば動作しますが scanfではなくfgetsを使うほうがいいと思います。

akiko-um
質問者

お礼

ありがとうございます。 動作しました。 理由もネットで確認できました。 ありがとうございました。

akiko-um
質問者

補足

a,bの内容を確認するには どうすればいいのでしょうか? あわせて教えて頂けないでしょうか。

その他の回答 (1)

noname#240783
noname#240783
回答No.2

お邪魔します。 > a,bの内容を確認するには > どうすればいいのでしょうか? 例えば printf( "a = 16進:%02x, b = 16進:%02x\n", a, b ); など、%x で受ければ、文字コードが16進数で表示されます。 ご質問のデバッグ前の状態で、'T'+リターン と入力すると a = 16進:54, b = 16進:0a と表示されてしまうでしょう。 &h54は'T'の文字コード、 &h0aは「LF」ラインフィード=改行コードです。

akiko-um
質問者

お礼

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

関連するQ&A

  • C言語 文字列の比較 compare

    プログラミング初心者です。 60文字以内の文字列を入力して、 大小関係を比較・表示するプログラムなのですが・・ 「AはBより大きい」という結果しか出ません。 どこが間違っているのか、ご指摘お願いしますっ。 #include<stdio.h> int main(void) { char moji1[61]; char moji2[61]; printf("文字列Aを入力===>"); scanf("%60s" ,&moji1); printf("文字列Bを入力===>"); scanf("%60s" ,&moji2); if(moji1-moji2>0){ printf("===AはBより大きい===\n"); } else if(moji1-moji2<0){ printf("===AはBより小さい===\n"); } else if(moji1-moji2==0){ printf("===AとBは等しい===\n"); } return 0; } int compare(char *x, char*y) { while(*x==*y){ if(*x=='\0') return 0; x++; y++; } return (*x-*y); }

  • このプログラミングのいけないところは?

    こういうプログラムを作ったんですけど、なぜか正常に作動しません!理由をおしえてください!!!!!! お願いしますーーー!!ちなみに内容はドイツ語です。 #include "stdafx.h" void tyuusinn(); void head_1(); void head_2(); int main() { while(1){ tyuusinn(); } return 0; } void tyuusinn() { int a; printf("(1)→sein,haben,werdenについて\n"); printf("(2)→定冠詞\n"); printf("表示したい項目を選んでください\n"); scanf_s("%d",&a); if(a == 1){ head_1(); } else if(a == 2){ head_2(); } } void head_1() { char a[90] = " sein haben werden"; printf("%6s\n",a); printf("------------------------------\n"); char b[90] = "ich bin habe werde"; printf("%6s\n",b); char c[90] = "du bist hast wirst"; printf("%6s\n",c); char d[90] = "er ist hat wird"; char e[90] = "wir sind haben werden"; char f[90] = "ihr seid habt werdet"; char g[90] = "sie sind haben werden"; printf("%6s\n%6s\n%6s\n%6s\n",d,e,f,g); return; } void head_2() { char a[90] = "der des dem den"; char b[90] = "die der der die"; char c[90] = "das des dem das"; char x[90],y[90],z[90]; printf("男性名詞は?\n"); scanf("%s",&x); if(x == a) printf("正解です。\n"); else printf("不正解!正解は%sです。\n",a); printf("女性名詞は?\n"); scanf("%s",&y); if(y == b) printf("正解です。\n"); else printf("不正解!正解は%sです。\n",b); printf("中性名詞は?\n"); scanf("%s",&z); if(z == c) printf("正解です。\n"); else printf("不正解!正解は%sです。\n",c); return; }

  • c言語 プログラミング(初心者)

    解を判定するプログラミングを作成したのですが、a,b,cを0,1,2と入力したときに解に0.00000が出てきて解がおかしくなります。 どなたか詳しい方教えてください。また簡潔にできる点などありましたらご指摘お願いします。 #include <stdio.h> #include <math.h> int main (void) { double a,b,c,d,x1,x2; printf("ax^2+bx+c=0 の係数を入力してください\n"); scanf("%lf %lf %lf",&a,&b,&c ); if(a==0){ if(b==0) { printf("解は存在しません\n"); } else { x1=-c/b; printf("解は %f です\n",x1); } } else { d=b*b-4*a*c; if(d>=0){ x1=(-b+sqrt(d))/(2.0*a); x2=(-b-sqrt(d))/(2.0*a); if(d==0){ printf("解は %f (重解)です\n",x1); } else { printf("解は %f と %f です\n",x1,x2); } } else { printf("実数解は存在しません(虚数解)\n"); } } return 0; }

  • C言語 strlen 再入力を促す

    文字列の比較で、 文字列の長さが60以上の時、再入力を促します。 while文を使って書いてみたのですが、 文字列Bの入力の前に、もう一度意味もなく 「文字列Aを入力===>」が表示されたり。 文字列Aのほうが小さいのに「Aのほうが大きい」と 表示されるようになったり、変な感じです。 どなたかご指摘・ご指導のほどよろしくお願いします。 int main(void) { char moji1[100]; char moji2[100]; while(strlen(moji1)>60){     printf("文字列Aを入力===>"); scanf("%80s" ,moji1); } while(strlen(moji2)>60){     printf("文字列Bを入力===>"); scanf("%80s" ,moji2);    } if(compare(moji1,moji2)>0){ printf("===AはBより大きい===\n"); } else if(compare(moji1, moji2)<0){ printf("===AはBより小さい===\n"); } else if(compare(moji1, moji2)==0){ printf("===AとBは等しい===\n"); } return 0; } int compare(char *x, char*y) { while(*x==*y && *x!=0){ x++; y++; } return (*x-*y); }

  • c言語についての質問です。

    #include<stdio.h> int main(void){ int a; printf("1文字たいぷしてください。\n"); scanf("%d",&a); if(a>=65 && a<=90){ printf("大文字です。\n"); } else if(a>=97 && a<=122){ printf("小文字です。\n"); } else{ printf("大文字でも小文字でもありません\n"); } return 0; } このプログラムは正しくなくて、 intをchar %dを%cにかえなければなりません。 なぜintはダメなんでしょうか? できれば丁寧に教えてください。 お願いします。

  • プログラミングについての質問です

    C言語で詰将棋のプログラミングをしたのですが、実行して答えを入力してもうまくいきません。どこがまちがってるのか教えていただけませんか?なおprintfを使って場を表現した部分が長すぎて4000文字に収まらないので、そこは割愛しています。 #include<stdio.h> int main(int argc, const char * argv[]){ int yoko,tate,yoko2,tate2,yoko3,tate3; char koma,koma2,koma3; printf("詰め将棋をしましょう\n"); ~printf略~ printf("持ち駒:なし\n相手の駒は玉(1二)、歩(1三)、角(1四)、飛(2五)、あなたの駒は龍(3二)、と(3一)、角(2二)です。\n\n残り3手ですが、何を動かしますか?\n"); printf("龍、と、角のいずれかを入力:"); scanf_s("%c\n", &koma); if(koma == '龍'){ printf("どこに動かしますか? (例:「9九」なら「9 9」と入力):"); scanf_s("%d %d\n",&yoko,&tate); if((yoko==2)&&(tate==1)){ ~printf略~ printf("王手です。玉を守りましょう。最長手となるように動かしてください。\n\n残り2手ですが、何を動かしますか?\n"); printf("玉、歩、角、飛のいずれかを入力:"); scanf_s("%c\n",&koma2); if(koma2=='玉'){ printf("どこに動かしますか?:"); scanf_s("%d %d\n",&yoko2,&tate2); if((yoko2==2)&&(tate2==3)){ ~printf略~ printf("残り1手です。この1手で相手を詰みにしてください。何を動かしますか?:"); printf("龍、と、角のいずれかを入力:"); scanf_s("%c\n",&koma3); if(koma3=='角'){ printf("どこに動かしますか?:"); scanf_s("%d %d\n",&yoko3,&tate3); if((yoko3==4)&&(tate3==4)){ ~printf略~ printf("あなたの勝ちです!\n"); } else{ printf("残念!\n"); } } else{ printf("残念!\n"); } } else{ printf("残念!\n"); } } else{ printf("残念!\n"); } } else{ printf("残念!\n"); } } else{ printf("残念!\n"); } return 0; }

  • Cのプログラム(初心者)

    #include<stdio.h> void main(void) { int a,b,c; printf("西暦で生まれた年を入力してください。\n"); scanf("%d",&a); printf("今の年を西暦で入力してください。\n"); scanf("%d",&b); c=b-a; if('0'<=c&&c<='23'){ printf("あなたは%d歳です。げんき。\n",c); } else if('24'<=c&&c<='40'){ printf("あなたは%d歳です。仕事盛り。\n",c); } else if('41'<=c&&c<='60'){ printf("あなたは%d歳です。まだいける。\n",c); } else if('61'<=c&&c<='99'){ printf("あなたは%d歳です。がんばれ。\n",c); } else{ printf("100歳以上なの?\n"); } } というプログラムを作っているのですが、うまく実行できません。間違いがあると思うのですが、それもよくわかりません。ビルドは成功するのですが、どの数字を入力しても「げんき」しか出てきません。 わかる人がいたら教えてください。 お願いします。

  • 長方形、円、三角形の計算するプログラムでエラーがでます

    タイトルの通りなんですがエラーがでます>< コンパイラはできたのですが、実行して二つ目の入力するとこで、入力したあと止まります。 どこがおかしいのでしょうか? #include <stdio.h> int sikaku(void); int en(void); int main(void) { char ch; int a,b; printf("円(A) 長方形(B) 三角形(C)\n"); printf("入力してください:"); ch = getche(); if(ch == 'C'){ printf("\n底辺を入力してください:"); scanf("%d ",a); printf("高さを入力してください:\n"); scanf("%d",b); printf("%dです",a * b); } else if(ch == 'B') sikaku(); else if(ch == 'A') en(); return 0; } int en(void) { int a; float f; printf("\n半径を入力してください:"); scanf("%d",a); printf("円周率を入力してください:"); scanf("%f",f); printf("%fです",a * a * f); return 0; } int sikaku(void) { int a,b; printf("\n縦を入力してください:"); scanf("%d",a); printf("横を入力してくさい:\n"); scanf("%d",b); printf("dです",a * b); return 0; }

  • 3つの入力した数値の大小比較ができません。

    #include<stdio.h> int main() { int a,b,c; scanf("%d",&a); scanf("%d",&b); scanf("%d",&c); if(a<b) { if(b<c) { if(a<c) { printf("%d<%d<%d\n",a,b,c); } else { printf("%d%d%d",a,b,c); } } if(b>c) { if(a>c) { printf("%d<%d<%d\n",c,b,a); } else { printf("%d<%d<%d\n",a,c,b); } } } else if(a>b) { if(b>c) { if(a>c) { printf("%d>%d>%d\n",a,b,c); } else { printf("%d>%d>%d\n",a,c,b); } } else if(b>c) { if(a>b) { printf("%d>%d>%d\n",a,b,c); } else { printf("%d>%d>%d\n",b,a,c); } } else if(c>b) { if(c>a) { printf("%d<%d<%d\n",b,a,c); } else { printf("%d>%d>%d\n",a,c,b); } } else if(a<c) { if(a<b) { printf("%d<%d<%d\n",a,b,c); } else { printf("%d<%d<%d\n",b,a,c); } } else if(a>c) { if(a<b) { printf("%d>%d>%d\n",b,a,c); } else { printf("%d>%d>%d\n",a,b,c); } } else { printf("%d=%d=%d\n",a,b,c); } } 間違っている部分を教えてください。

  • Cプログラミング(文字入力)

    getsを使って文字を入力し、while文で一文字ずつ 表示させるプログラムをつくりたいのですが、 上手く動作しません。 間違っている点を指摘頂けないでしょうか。 宜しくお願いします。 char c[11]; int i; printf("文字列を入力してください(10文字以内)\n-->"); gets(c); while(i=0;c[i]=='\0';i++){ printf("%c\n",c[i]); }