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

このQ&Aのポイント
  • プログラミングで正常に作動しない理由について教えてください。
  • ドイツ語の内容を表示するプログラムの作動が正常にされない理由について教えてください。
  • プログラミングで作ったプログラムが正常に作動しない理由を教えてください。
回答を見る
  • ベストアンサー

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

こういうプログラムを作ったんですけど、なぜか正常に作動しません!理由をおしえてください!!!!!! お願いしますーーー!!ちなみに内容はドイツ語です。 #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; }

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

# カテゴリーは適切な物を選択しましょう # 今回の質問なら C/C++ がいいと思います 質問の仕方として ソースコード記述しただけで 『上手く機能しません』 では何に困っているのかを探すのも大変になります 実行手順、実行結果、期待する結果を併記しましょう if(x == a)の判定で xに代入された文字列をaに格納された文字列が同一であるかどうかを判定したいのであればこれは期待する結果にはなりません このif文では 変数xの先頭アドレスと変数aの先頭アドレスが同一かどうかを判定しています 文字列の比較であれば ライブラリ関数のstrcmp系を使って判断しましょう

i_verson
質問者

お礼

すいません。プログラミング超初心者で、このような質問をしたのも初めてなので・・・これからは、もっとわかりやすく質問するようにします。 それで、言われたとおりにstrcmp関数を使用してみたら、期待どおりに動きました(^_^)どうもありがとうございました。 もっと勉強して、スキルアップしていきたいのでまた質問すると思います・・・その時は、またお願いします!

関連するQ&A

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

    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プログラミング(文字入力)

    文字を二つ入力して、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");

  • 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はダメなんでしょうか? できれば丁寧に教えてください。 お願いします。

  • プログラミングに関して

    多数省略しておりますが今このような双六をプログラミングしているのですが位置、所持金情報が上手く更新されず、上手くいかなくて困ってます。 どうすればいいでしょうか?教えてください。お願いします。 //メイン関数 int main(void){ printf("map説明 s:start,c:chance,$:money,!:振り出しに戻る,G:goal\n"); int position=0,money=500; do{ do_turn(position,money); }while(money<<0 || position==15); if(money<<0){ printf("gameover"); } } //イベント作成 void do_event(int position,int money) { int number; number=position; switch(number) { case 1:printf("チャンスタイム\n"); game1(money); break; case 2:printf("game2"); game2(money); break; case 3: printf("100Gを手に入れた"); money += 100; break; //マップ作成 void print_map(int position) { int i; for( i = 0; i <= position + 5; i++ ) { printf("%3d|",i); if(position==i){ printf("●|"); } else if(!(position==i)){ printf("○|"); } printf(" %c\n",event_name[i]); } return ; } void do_turn(int position,int money){ int me,go,energy; double z, R15=RAND_MAX+1; srand ((unsigned int) time(NULL)*314159265); z = rand() / R15; me = (int)(z*3) + 1; print_map(position); printf("現在の所持金:%dG\n",money); wait_enter(); printf("\nエネルギーを選んでください\n"); printf("1.ウコンの力 100G 2.ユンケル 200G\n"); scanf("%d",&energy); if(energy==1){ money-=100; if(me==1 || me==3) go=1; else if(position==14) go=1; else if(me==2) go=2; position+=go; printf("%d進みます\n",go); } else if(energy==2){ money-=200; if(me==1 || me==3) go=2; else if(position==14) go=1; else if(me==2) go=1; position+=go; printf("%d進みます\n",go); } print_map(position); do_event(position,money); printf("%d,%d",position,money); wait_enter(); system("pause"); } //ゲームを行う関数(じゃんけんゲーム) void game1(int money){ int comp,you; double r15=RAND_MAX+1; char* s[3]; s[0]="グー";s[1]="チョキ";s[2]="パー"; srand((unsigned int) time(NULL)*314159265); printf("じゃんけんをします勝てばお金が1.5倍に、負ければ半額を頂きます\n"); while(1){ comp=(int)(rand()/r15*3)+1; printf("1:グー、2:チョキ、3:パー ?..."); scanf("%d",&you); printf("あなたは%s,わたしは%s\n",s[you-1],s[comp-1]); if(you==comp)printf("あいこ"); else if((you+3-comp)%3==2){ printf("おめでとう、あなたの勝ち。お金が1.5倍になります\n"); money=money+money/2; break; } else{ printf("残念。あなたの負けです。お金は頂きます\n"); money=money/2; break; } } printf("所持金%dG\n",money); }

  • プログラミング言語Cの演習

    以下のようにプログラミングをしてコンパイルしても特にエラーは無かったのですが・・・、実行しようとするとセグメンテーション違反になってしまいます。誰か分かる方がいたら解答かアドバイス欲しいです。 #include <stdio.h> #include <math.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define MAXOP 100 #define NUMBER '0' #define MAXVAL 100 #define BUFSIZE 100 int getop(char s[]); int getch(void); void ungetch(int c); void push(double f); double pop(void); int sp = 0; double val[MAXVAL]; char buf[BUFSIZE]; int bufp = 0; main() { int type; double op2; char s[MAXOP]; while ((type = getop(s)) != EOF) { switch (type) { case NUMBER: push(atof(s)); break; case '+': push(pop() + pop()); break; case '-': op2 = pop(); push(pop() - op2); break; case '/': op2 = pop(); if (op2 != 0.0) push(pop() / op2); else printf("error: zero divisor\n"); break; case '%': op2 = pop(); if (op2 != 0.0) push(fmod(pop(), op2)); else printf("error: zero divisor\n"); break; case '\n': printf("\t%.8g\n", pop()); break; default: printf("error: unknown command %s\n", s); break; } } return 0; } int getop(char s[]) { int c, rc; float f; while ((rc = scanf("%c", &c)) != EOF) if ((s[0] = c) != ' ' && c != '\t') break; s[1] = '\0'; if (rc == EOF) return EOF; else if (!isdigit(c) && c != '.') return c; ungetc(c, stdin); scanf("%f", &f); sprintf(s, "%f", f); return NUMBER; } void push(double f) { if (sp < MAXVAL) val[sp++] = f; else printf("error: stack full, can't push %g\n", f); } double pop(void) { if (sp > 0) return val[--sp]; else { printf("error: stack empty\n"); return 0.0; } } int getch(void) { return (bufp > 0) ? buf[--bufp] : getchar(); } void ungetch(int c) { if (bufp >= BUFSIZE) printf("ungetch: too many characters\n"); else buf[bufp++] = c; }

  • プログラミング

    ランダムの数値を入力してその数値より大きければ正解より大きいと表示して小さければ小さいと表示し正解なら正解ともだすプログラムをつくっています 正解まで何回かかったかとも表示したいと思います 上手く実行できないのでご教授ください #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void){ int i,x,y; srand((unsigned int)time(NULL)); printf("%\n",i); i=rand()%100; //0以上100以下の整数を生成 y=0; printf("1以上100以下の整数を入力してください。\n"); scanf( "%d", &x ); /* 数値を入力させる */ printf("1以上100以下の整数を入力してください。\n"); y=y+1; if( x == i ) { printf("%d回目で当たりました。\n",y); printf("%d回目で当たりました。\n",y); break; /* 無限ループ */ } else{ if ( x < i ) //printf("正解より大きいです。\n"); printf("正解より大きいです。\n"); else //printf("正解より小さいです。\n"); printf("正解より小さいです。\n"); } } //return0;

  • プログラミング(じゃんけんゲーム)

    C言語をしています。 そこでわからない所がありのですが、解説お願いします。 作りたいのは、乱数を使ったジャンケン5回戦で、 一番最後に、何勝何敗何引き分けかを表示させ、 2人のうちどちらが勝ったかです。 最後の何勝何敗何引き分けかを どう書いたらいいかがわかりません。 関数のひきわたしみたいな感じでするというのはわかります。 できたところまでのプログラムが、以下のようなコードです。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int a,c,i; printf("じゃんけんをしましょう。 (グー=1 チョキ=2 パー=3)\n"); for(i=i; i<=5; i++) { srand(time(NULL)); c = rand()%3+1; scanf("%d",&a); if(a==1 && c==1) printf("私もグー=1なので、あいこです。\n"); else if(a==1 && c==2) printf("私はチョキ=2なので、あなたの勝ちです。\n"); else if(a==1 && c==3) printf("私はパー=3なので、あなたの負けです。\n"); else if(a==2 && c==1) printf("私はグー=1なので、あなたの負けです。\n"); else if(a==2 && c==2) printf("私もチョキ=2なので、あいこです。\n"); else if(a==2 && c==3) printf("私はパー=3なので、あなたの勝ちです。\n"); else if(a==3 && c==1) printf("私はグー=1なので、あなたの勝ちです。\n"); else if(a==3 && c==2) printf("私はチョキ=2なので、あなたの負けです。\n"); else if(a==3 && c==3) printf("私もパー=3なので、あいこです。\n"); else printf("正しい手を入れてください。\n"); } return 0; }

  • プログラミングの問題で幾つか分からないことがあります。

    プログラミングの問題で幾つか分からないことがあります。 入力した文字列のアスキーコードを1上げて表示するというもので、 #include <stdio.h> int main(void){ char a[100]; int b, c; scanf("%s", a); for(b = 0; b <= 99; b++){ if(a[b] == '\n'){ break; } a[b] == a[b] + 1; } printf("%s", a); return 0; } というふうに作ったのですが、基の文字列がそのまま表示されてしまいます。 あと、文字列strの中にある文字列bagに含まれる文字と同じ文字を空白に置き換える関数を作り、文字列を与えて動かすというプログラムで、 #include <stdio.h> char str[100], bag[100]; int str_space(char str[], char bag[]){ int a, b, c, d; for(a = 0; a <= 99; a++){ if(str[a] == '\n'){ b = a; break; } } for(a = 0; a <= 99; a++){ if(bag[a] == '\n'){ c = a; break; } } for(a = 0; a <= b; a++){ for(d = 0; d <= c; d++){ if(str[a] == bag[d]){ str[a] = ' '; } } } return 0; } int main(void){ scanf("%s", str); scanf("%s", bag); str_space(str, bag); printf("%s", str); return 0; } というふうに作ったのですが、動きませんでした。 ヒントでもいいのでどなたかお教え下さい。

  • プログラミング(配列と関数の引数)

    a : ABCDE a : ABCDEFGH Len : 8 a : FGHIJ a : FGH a : FGH, c : FGH 上記のように表示されるプログラムを作りたいのですが、なかなかできません。下記のようなプログラムを作ったのですがどこが間違っているのかよくわかりません。分かる方、指摘をお願いします。 #include <stdio.h> void my_strcpy(char s[], char t[]); int my_strlen(char s[]); void my_strcat(char s[], char t[]); int main(){ char a[10]; char b[10] = "ABCDE"; char c[] = "FGH"; int len; my_strcpy(a, b); printf("a : %s\n", a); my_strcat(a, c); printf("a : %s\n", a); len = my_strlen(a); printf("Len : %d\n", len); my_strcpy(a, "FGHIJ"); printf("a : %s\n", a); a[3] = '\0'; printf("a : %s\n", a); if(strcmp(a, c) == 0){ printf("a : %s, c : %s\n", a, c); } int i, s, t; my_strcpy(a, b + 2); printf("a : %s\n", a); void my_strcpy(char s[], char t[]){ for (i = 0; t[i] != '\0'; i++){ s[i] = t[i]; } s[i] = '\0'; } int my_strlen(char s[]){ int i; for (i = 0; s[i] != '\0'; i++); return i; } void my_strcat(char s[], char t[]){ int i, j; for (i = 0; s[i] != '\0'; i++); for (j = 0; t[j] != '\0'; i++, j++){ s[i] = t[j]; } s[i] = '\0'; } }

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

    タイトルの通りなんですがエラーがでます>< コンパイラはできたのですが、実行して二つ目の入力するとこで、入力したあと止まります。 どこがおかしいのでしょうか? #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; }

専門家に質問してみよう