プロが教える店舗&オフィスのセキュリティ対策術

お正月前にならったばかりのC言語を用いて
おみくじプログラムを作りました。

最近それをまた改良して
強制的にくじを引かせるものにしようと考えました。


しかしどうしてもwhileのループから抜け出せないので
ここで質問させていただきます。


どうか間違っている部分を教えてください。




#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 7


int main(){
int k,y,n;

printf("ようこそ。\n");
printf("ここではおみくじを販売して折ります。\n");
printf("よろしければ運試しをしていって下さい。\n\n");
printf("おみくじを引きますか?\n");
printf("※引く場合はy,引かない場合はnを入力してください\n");
scanf("%s,&k");

if(k!=y){
while(k=y){
printf("そんなこと言わずに引いてみてくださいよ。\n\n");
printf("おみくじを引きますか?\n");
printf("※引く場合はy,引かない場合はnを入力してください\n");
scanf("%s,&k");
}
}


char *kuji[N] = {"大吉", "中吉", "小吉","末吉", "吉", "凶","大凶"};
srand((unsigned)time(NULL));
printf("おみくじ: %s\n\n\n", kuji[rand() % N]);
printf("結果はどうでしたか?\n");
printf("またのお越しをお待ちしております。\n");
return 0;
}

A 回答 (3件)

>scanf("%s,&k");


>scanf("%s,&k");

あと、これではコンパイルが通らないですね。
scanf()の書き方を確認してください。
整数型の変数に値を入れる際の書式文字列が%sで
本当にいいかどうかの確認もお願いします。

>char *kuji[N] = {"大吉", "中吉", "小吉","末吉", "吉", "凶","大凶"};

C言語の場合、実行文の途中で変数を定義することはできないはずです。
main関数の先頭部に持っていきましょう。

さらに、

>int k,y,n;
>if(k!=y){

変数kにはscanfで値を入れたとして、変数yには何が入っているのでしょうか。
kと、何が入っているかわからないyとを比較することには、大いに疑問があります。
それから、変数nは定義しただけで使っている形跡がありませんね。
そういう変数はじゃまなだけですから、捨ててしまいましょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

皆様のおかげでうまくできました。

お礼日時:2013/01/11 23:55

#include <stdio.h>


int main() {
char k;
scanf("%c", &k);
while (k != 'y') {
scanf("%c", &k);
}
return 0;
}
    • good
    • 0
この回答へのお礼

なるほど、文字は%cなんですね。

回答ありがとうございます

お礼日時:2013/01/11 23:47

>while(k=y){



ここの等号が1個で本当にいいのかどうか、大いに疑問があります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

等号は==でしたよね。
ご指摘感謝いたします。

お礼日時:2013/01/11 23:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!