我可以在if语句中使用char作为整数吗?

时间:2019-07-30 10:25:06

标签: c

我正在尝试制作一个程序,让用户尝试猜测程序随机选择的字母。循环和if语句似乎不起作用。如果有人可以检查一下我的代码,那就太好了。

我将附上输出图片。

enter image description here

int main()
{
    srand(time(NULL));

    char randlett, playerlett;
    int tries = 0;

    randlett = rand() % 26 + 97;

    printf("The program choose a letter\n\n");

    while (tries < 5){
        printf("Try number %d\nPick a letter\n", tries + 1);
        scanf("%c", &playerlett);

        if (randlett != playerlett){
            if (playerlett > randlett){
                printf("\nThe letter is before the one you chosen\n");
            }
            else{
                printf("\nThe letter is after the one you chosen\n");
            }
            tries ++;
            continue;
        }
        else{
            printf("You win");
            break;
        }
    }

    return 0;
}

2 个答案:

答案 0 :(得分:0)

scanf("%c", &playerlett);

到目前为止,scanf正在消耗先前输入的\n(按下)。

将其更改为

    scanf(" %c", &playerlett); 
           ^-------------------------//Extra space

    scanf("%c", &playerlett);
    getchar();

答案 1 :(得分:-1)

kiran Biradaranswer的补充:

使用scanf("%c", &playerlett);并输入字符时,必须按 Enter 。问题在于,此 Enter 是字符'\n',在scanf循环的下一个交互中,它用作while的下一个输入。因此,我们必须使程序忽略此'\n'(基本上是空格,制表符或输入项)。

这可以通过简单地将初始scanf更改为scanf(" %c", &playerlett);来完成。通过添加额外的空格,您正在“告诉”程序忽略空格,制表符或输入,而仅将其他字符视为输入。因此,您可以将以下行:scanf("%c", &playerlett);更改为:

scanf(" %c", &playerlett); // this is probably the best solution

其他选项(尽管第一个是最好的):

写这个:

scanf("%c", &playerlett); // this receives the letter eg 'q'
getchar(); // this receives the <Enter>, the '\n'

或者与此非常相似:

playerlett=getchar(); // this receives the letter eg 'q'
getchar(); // this receives the <Enter>, the '\n'

不应该使用的替代方法:在fflush(stdin)之后添加scanf("%c", &playerlett);以清除缓冲区,基本上是“告诉”程序以忘记诸如'\n'这样的字符在第一个字符后输入:(不建议这样做,请参见this answer):

scanf(" %c", &playerlett); // this receives the letter eg 'q'
fflush(stdin); // this "forgets" the <Enter>, the '\n'

有关更多信息,请参见:scanf() leaves the new line char in the buffer