void answerme();
int main() {
char *answer = malloc (MAX_NAME_SZ);
....
printf ("\nWould you like to begin? [Y/N]");
fgets (answer, MAX_NAME_SZ, stdin);
answerme();
if(*answer == 'y' || *answer == 'Y'){
getinfo();
printf("\nprogram starting now...");
}
else if(*answer == 'n' || *answer == 'N'){
printf("\nThank you, program will close now....");
return 0;
}
...
} //end of main
void answerme(){
char *answer = malloc (MAX_NAME_SZ);
while(*answer !='n' && *answer != 'N' && *answer != 'y' && *answer != 'Y'){
printf("\nPlease enter [Y], or [N]");
fgets (answer, MAX_NAME_SZ, stdin);
}
};
このwhileループや関数全体のポイントは、ユーザーが別のランダムキーではなくy/nで質問に答えたかどうかをチェックする点です。私はこれがループの間、ユーザがそれを入力するまでY/N入力を求めることを続けたいと思う。しかし、何らかの理由でこのプログラムを実行すると、最初のステップでプログラムを開始するかどうか尋ねられ、Yと答えた場合、入力しても何らかの理由で「YまたはNを入力してください」と表示されます正解とし、「n」や他の任意の文字を入力すると、それはあなたを通させます。だから、それは入力を登録するようですが、何らかの理由で依然としてif(answer == Y)またはif(answer == N)にスキップするのではなく、whileループを実行するかどうかを尋ねます。whileループがプログラムで多くの問題を引き起こしている
これが起こっている理由を知っている人はいますか?
また、ユーザーが「Y」と発声してプログラムを開始すると、ユーザーに特定の情報を入力するように要求するメッセージが表示され、この情報は作成した構造に格納されますが(コードには表示されません)ループ中に、何とかスキップされます。このwhileループを離れるとプログラム全体が正常に動作しますが、もちろん、ユーザーは私が彼に尋ねたことを厳密に入力せずにプログラムのステップをスキップすることができます。
私が尋ねたことだけを入力するようにユーザーを制限するより良い代替方法がある場合は、これが過去3日間の問題と頭痛の原因となっていることを私に教えてください。ありがとうございました !
、あなたは' * answer'をチェック - しかし、あなたがそれに任意の特定の値を割り当てないでください。初期化されていない変数にアクセスすることによって、プログラムは未定義の動作を示します。 'answerme'の' answer'というローカル変数は、 'main'の' answer'という名前のローカル変数とはまったく別のものです。 –
'answerme()'の最後の '}'の後ろのセミコロンは余分なものであることに注意してください。 –
適切な書式設定なしでたくさんの行を書いただけであれば、誰かがあなたの質問を読むことを奨励するので、より読みやすい方法で質問を書いてください。 –