質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

4回答

470閲覧

タイピングゲームの作成

Rivia

総合スコア23

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2017/09/02 07:01

編集2017/09/02 07:24

c言語
コード

#include<stdio.h> #include<time.h> #include <stdlib.h> int data[5]; void type(int); int main(void){ int i; for(i = 0;i < 5;i++){ data[i] = rand()%5; type(data[i]); } return 0; } void type(int data){ char Eval[256];//評価 int flag = 0;//アクション switch(data){ case 0: printf("[おはよう]\n"); printf("\n\n\n\n");c do{ if(flag!=0){printf("違います\n");} scanf("%s",&Eval); flag++; }while(Eval != "ohayou"); printf("正解\n"); flag = 0; break; case 1: printf("[こんにちは]\n"); printf("\n\n\n\n"); do{ if(flag!=0){printf("違います\n");} scanf("%s",&Eval); flag++; }while(Eval != "konnnitiha"); printf("正解\n"); flag = 0; break; case 2: printf("[こんばんは]\n"); printf("\n\n\n\n"); do{ if(flag!=0){printf("違います\n");} scanf("%s",&Eval); flag++; }while(Eval != "konbanha"); printf("正解\n"); flag = 0; break; case 3: printf("[今日は暑い]\n"); printf("\n\n\n\n"); do{ if(flag!=0){printf("違います\n");} scanf("%s",&Eval); flag++; }while(Eval != "kyouhaatui"); printf("正解\n"); flag = 0; break; case 4: printf("[ズッキーニ]\n"); printf("\n\n\n\n"); do{ if(flag!=0){printf("違います\n");} scanf("%s",&Eval); flag++; }while(Eval != "zukki-ni"); printf("正解\n"); flag = 0; break; } return; } 不正解でも正解と表示されてしまいます。 何度やってもうまくいかなくほとほと困っています。 どなたかご教授願えないでしょうか おこがましい願いなのですが、プログラミング初心者なので丁寧に教えてくれると助かります ![イメージ説明](c5db50a15facb06d2c3a44e468bea29a.png) [補足] while文の使い方を忘れてました。。 その文章を直したのですが、今度は「違います」のループに入りました。 多分EOFが関係してるのだと思います。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

Eval != "ohayou"はアドレスの比較になります。従って、常に真(Evalと"ohayou"のアドレスが違う)になります。他の方が仰っているようにstrcmp()を使う必要があります。

投稿2017/09/02 10:57

編集2017/09/02 10:58
cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

動かしていませんが、do〜whileの条件が、正解の場合だけ(Evalが"ohayou"が正解で想定)ループとなっているので、
正解じゃない間ループにしたら解決するかと思います。

do{ if(flag!=0){printf("違います\n");} scanf("%s",&Eval); flag++; }while(Eval != "ohayou");

投稿2017/09/02 07:14

aro10

総合スコア4106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Rivia

2017/09/02 07:15

そうでした。。 助言ありがとうございます!
aro10

2017/09/02 08:45 編集

C言語を動かせる環境がないですが、C言語なので文字列の比較は、演算子でなくstrcmpとかを使わないとだめだったかと思います。リンク先のサンプルプログラムを参考にすると解決するかと思います。 [苦しんで覚えるC言語 第7項:文字列の比較](http://9cguide.appspot.com/14-03.html#S7) strcmp に関してはfiveHundredさんの回答にありますね。
Rivia

2017/09/02 08:45

それは考えたのですがそれようの変数を作らないといけないので、これでいけるかな。。。という感じで
aro10

2017/09/02 08:50

プログラムを学習する場合は、C言語やC++等を扱う仕事を目指す場合はC言語の基礎やメモリの扱い方等が必要ですが、プログラム一般を学習する場合はJavascriptやPython等のスクリプト言語の方が簡単に動かせるので楽かもしれません。
guest

0

char Eval[256];//評価
中略
while(Eval == "zukki-ni");//一例

この条件が満たされることは、まずないです。

投稿2017/09/02 07:11

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C言語では、==や!=で文字列比較を行うことは出来ません。
strcmp()を使うか、for文で1文字ずつ比較してください。

投稿2017/09/02 08:34

fiveHundred

総合スコア9803

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問