ポインタ変数等

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Cgengoshosinnsha

ポインタ変数等

#1

投稿記事 by Cgengoshosinnsha » 11年前

#include<stdio.h>
#include<Windows.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>


#define TIME_LIMIT 3


int main()
{
time_t time1;
double s;
int baaiwake;
char *seikai;


seikai=0;

srand(time(NULL));
baaiwake=rand()%4+1;

if(baaiwake=1){
*seikai=4;
}
else if(baaiwake=2){
*seikai=5;
}
else if(baaiwake=3){
*seikai=6;
}
else if(baaiwake=4){
*seikai=8;
}



printf("4か5か6か8を入力\n");

time(&time1); /* 開始時間 */

while(*seikai){

/* キーが入力されていない時、開始時間と現在の時間の差を求めて
制限時間に達したかを調べる */
if (!kbhit()){
if ((s = difftime(time(NULL),time1)) >= TIME_LIMIT){
printf("遅い\n");
break;
}
continue;

}

/* 入力された文字とseikaiの指す現在の文字が一致しない時
"はずれ"と表示 */
if (*seikai != (int)getch()){
printf("はずれ\n");
continue;

}



/* キーが一致した時、"成功"表示 */
else{
printf("成功\n");
}



}
return 0;
}

C言語初心者です。
ビルドでエラーが出なかったのですが、実行すると自動停止します。
特にポインタ変数、getch、continue・break、elseあたりの使い方が間違っていると思うのですが、どう直せばいいのかわかりません。
アドバイスお願いします。

non
記事: 1097
登録日時: 14年前

Re: ポインタ変数等

#2

投稿記事 by non » 11年前

何をするプログラムかを説明して下さい。
特に
char *seikai;
このseikaiがポインタである理由を説明して下さい。

ついでに、ifの条件で等しい場合は=は2個です。
コードタグを使って見やすくしてもらわないと、読む気が起こりません。
non

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ポインタ変数等

#3

投稿記事 by みけCAT » 11年前

ほとんどの環境で、メモリの0番地へのアクセスはアクセス違反になると思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

初級者
記事: 200
登録日時: 14年前

Re: ポインタ変数等

#4

投稿記事 by 初級者 » 11年前

baaiwake
に関するif文で、
等号が1個でよいのでしょうか。
大いに疑問があります。

cgengoshosinsha

Re: ポインタ変数等

#5

投稿記事 by cgengoshosinsha » 11年前

#include<stdio.h>
#include<Windows.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>


#define TIME_LIMIT 3


int main()
{
time_t time1;
double s;
int baaiwake;
char seikai, *seikai; //ここもよく分からない


seikai=0;                   //seikaiの初期化

srand(time(NULL));
baaiwake=rand()%4+1;

if(baaiwake==1){ //4,5,6,8いずれかのキーを押せば正解になるかをランダムで決定
seikai=4;
}
else if(baaiwake==2){
seikai=5;
}
else if(baaiwake=3){
seikai=6;
}
else if(baaiwake=4){
seikai=8;
}



printf("4か5か6か8を入力してください\n");

time(&time1); /* 開始時間 */

while(*seikai){                   //キー入力に制限時間を付けたいが、whileを使うのかすら分からない

if (!kbhit()){            /* キーが入力されていない時、開始時間と現在の時間の差を求めて、制限時間に達したかを調べる */
 
if ((s = difftime(time(NULL),time1)) >= TIME_LIMIT){
printf("遅い\n");
   break;  
}
continue;                            //ここは要るのか要らないのか分からない

}

if (*seikai != (int)getch()){            /* 入力された文字とseikaiの指す現在の文字が一致しない時"はずれ"と表示 */

printf("はずれ\n");
break;

}



else{                         /* キーが一致した時、"成功"表示 */

printf("成功\n");
}



}
return 0;
}


すみません力不足・説明不足で
もしかするとポインタ変数を使う必要がないのでしょうか?
プログラムを説明しますと

正解がランダムの四つの選択肢(キーボードの4,5,6,8キー)があり、どれか一つを選び
正解と選んだ選択肢が同じなら"正解"
違うなら"はずれ"
そして3秒以内に選択肢を決めなかった場合"遅い"と表示

となります。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ポインタ変数等

#6

投稿記事 by みけCAT » 11年前

コードを提示するときは、BBcodeを有効にした状態でcodeタグで囲み、
かつきちんとインデントをしていただけると、見やすくて助かります。
cgengoshosinsha さんが書きました:もしかするとポインタ変数を使う必要がないのでしょうか?
はい。そのように感じます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

non
記事: 1097
登録日時: 14年前

Re: ポインタ変数等

#7

投稿記事 by non » 11年前

ポインタを使っている意味がわかりません。
学校の課題なら、意味はなくとも、使う必要がなくても使う必要があるでしょうから、課題を正確に示して下さい。

>if (*seikai != (int)getch()){            /* 入力された文字とseikaiの指す現在の文字が一致しない時"はずれ"と表示 */

ポインタを止めたととしても、うまくいきません。文字と数値の違いを理解する必要があります。

>continue;                            //ここは要るのか要らないのか分からない

ポインタを訂正してから、実際につけたときと、外したときで試してみればわかることです。
しかし、このようなcontinueを使う発想が、要るのか要らないのかわからない人に生まれるとは思えません。
これは、人が作ったプログラムを元にしているのでしょうか?
non

閉鎖

“C言語何でも質問掲示板” へ戻る