Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 程序无法识别if else语句中的字符输入_C_Arrays_If Statement_Char_Logical Operators - Fatal编程技术网

C 程序无法识别if else语句中的字符输入

C 程序无法识别if else语句中的字符输入,c,arrays,if-statement,char,logical-operators,C,Arrays,If Statement,Char,Logical Operators,我调试了该程序,发现尽管您输入了一个选项,例如Y/Y/n/n或H/H/l/l,但if函数无法识别输入,它会跳过。谢谢你的建议!RNG工作正常,我觉得一切都很好 #include <stdio.h> #include <time.h> int main(){ char startAnswer[1]; char gameAnswer[1]; int i; int r; int t; int compare; srand(time(NULL)); printf("Do

我调试了该程序,发现尽管您输入了一个选项,例如
Y/Y/n/n
H/H/l/l
,但if函数无法识别输入,它会跳过。谢谢你的建议!RNG工作正常,我觉得一切都很好

#include <stdio.h>
#include <time.h>



 int main(){
char startAnswer[1];
char gameAnswer[1];
int i;
int r;
int t;
int compare;
srand(time(NULL));

printf("Do you want to play a game? Y/N. \n");
scanf(" %c", &startAnswer);
start:
if (startAnswer == 'y' || 'Y'){
    goto game;
}
else if (startAnswer == 'n' || 'N'){
    printf("Game will now exit.\n");
}
else {
    printf("You entered an invalid answer, try again.\n");
    goto start;
}
game:
printf("There will be ten numbers calculated.\n");
printf("Try to guess what the numbers are before\n");
printf("they are displayed. One at a time.\n\n");
for(i = 0; i < 12; i++){

    randGen:
    r = ( rand() % 9 ) + 1;
    t = ( rand() % 9 ) + 1;
    if(t == r){
        goto randGen;
    }

    printf("Is the next number higher or lower than %d\n\n" , r);
    scanf(" %c" , &gameAnswer);
 //ignore       (r > t) ? (compare = 0) : (compare = 1);
    if (r > t){
        compare = 1;
    }
    else{
        compare = 0;
    }



    if (gameAnswer == ('H' || 'h')){
        if (compare == 1){
            printf("You win this round!");
            goto randGen;
        }
    }
    else if (gameAnswer == ('L' || 'l')){
        if (compare == 0){
            printf("You win this round!");
            goto randGen;
        }
    }
    else if (gameAnswer != ('l' || 'L' || 'h' || 'H')){
        if (compare == 0){
            printf("Please Enter H/L for higher/lower answer.\n\n");
            goto randGen;
        }
    }
    else{
            printf("You lost this round.");
            goto randGen;
    }
    r = t;

}



}
#包括
#包括
int main(){
char startAnswer[1];
答案[1];
int i;
INTR;
int t;
整数比较;
srand(时间(空));
printf(“您想玩游戏吗?是/否。\N”);
scanf(“%c”和startAnswer);
开始:
如果(startAnswer=='y'| |'y'){
转到游戏;
}
else if(startAnswer=='n'| |'n'){
printf(“游戏现在将退出。\n”);
}
否则{
printf(“您输入的答案无效,请重试。\n”);
转到开始;
}
游戏:
printf(“将计算十个数字。\n”);
printf(“尝试猜测前面的数字是什么\n”);
printf(“显示它们。一次显示一个。\n\n”);
对于(i=0;i<12;i++){
兰登:
r=(rand()%9)+1;
t=(rand()%9)+1;
if(t==r){
后藤兰根;
}
printf(“下一个数字高于或低于%d\n\n”,r);
scanf(“%c”和“gameAnswer”);
//忽略(r>t)?(比较=0):(比较=1);
如果(r>t){
比较=1;
}
否则{
比较=0;
}
if(gameAnswer==('H'| |'H')){
如果(比较==1){
printf(“你赢了这一轮!”);
后藤兰根;
}
}
else if(gameAnswer==('L'| |'L')){
如果(比较==0){
printf(“你赢了这一轮!”);
后藤兰根;
}
}
else if(gameAnswer!=('l'| |'l'| |'h'| |'h')){
如果(比较==0){
printf(“请输入高/低答案的H/L。\n\n”);
后藤兰根;
}
}
否则{
printf(“你输了这一轮。”);
后藤兰根;
}
r=t;
}
}
在阅读该选项之前,您是否使用了
fflush(stdin)
?这将清理您的缓冲区。

在您的代码中

if (gameAnswer == ('H' || 'h'))
不会做你认为它会做的事。换成

if ((gameAnswer[0] == 'H')  || (gameAnswer[0] == 'h'))   //gameAnswer is an array
同样,对于所有其他事件

而且

scanf(" %c", &startAnswer);
应该是

scanf(" %c", &startAnswer[0]);
同样地

注:

  • 如果不需要
    数组
    ,请不要使用。坚持使用单个变量

  • main()
    的建议签名是
    intmain(void)

  • 只是一个建议,请尽量避免使用
    goto
    语句。这被认为是不好的做法。尝试编写和使用函数

  • 不。这不是如何链接条件

    有很多问题:

    其中之一是:

    char startAnswer[1];
    char gameAnswer[1];
    
    应该是哪一个

    char startAnswer;
    char gameAnswer;
    

    您的编译器肯定在此处发出了警告。

    您的代码有两个问题:

  • if
    条件如下:
    if(gameAnswer==('H'| H'))
    ,应该是:
    if(gameAnswer=='H'| gameAnswer=='H')

  • chars
    charstartanswer[1];答案[1]或者这样做:
    charstartanswer;答案或:在代码中使用
    gameAnswer[0]
    而不是
    gameAnswer


  • 最后,对于
    srand
    rand
    ,您需要包含
    stdlib
    库,只需添加这一行:
    \include

    没有你的代码,我们根本帮不了你。这不是问问题的正确方式。请向我们展示一些代码示例或您做了什么。请提供有此问题的演示代码。当用户输入n/n时,您不会退出游戏。为什么人们一直认为计算机神奇地“跳过”了他们的条件?
    fflush(stdin)
    是未定义的行为,以清理缓冲区使用
    int c;而((c=fgetc(stdin))!='\n'&&c!=EOF)@AlterMann谢谢你,只是被忽略了。更正:-)@farukdgn看,我可以在现在的状态下投票支持你的答案,但我希望你改进你的答案。我不是你的敌人。:-)@如果你能相信我,我没有。我是在反复思考这个问题时发现的,就像最新的编辑一样。:-)谢谢大家的信息。正如你所知道的,我还在学习。我认为犯错误对学习过程至关重要。我现在正在修改代码。另外,我使用gotos的唯一原因就是让它工作。我知道这不是一种很好的做事方式。所有这些对我来说都奏效了。谢谢你的解释。我完全忘了我把变量改成了数组,我还记得我复习了如何链接条件。谢谢大家!
    
    char startAnswer;
    char gameAnswer;