IF语句不能正常工作

时间:2013-03-25 13:10:15

标签: c if-statement

我决定制作一个播放tic tac toe的程序,但是我没有使用if语句。它使用了我放在其他地方的任何东西。我一直盯着它看了两个小时,我发现什么都不对!这是代码:

#include <stdio.h>
#include <process.h>

int main()
{
char ans,ans2;
double a,b,c,d,e,f;
printf("Do you want to play? (y/n)\n"); //must make a loop
scanf ("%c",&ans);
if (ans == 'y')
{
    printf("Do you want to be first?\n");
    scanf ("%c",&ans2);
    if (ans2 == 'y')
    {
        printf("Make your choice.\n");
        printf(" 1 2 3\n");
        printf("a | | \n");
        printf(" - - -\n");
        printf("b | | \n");
        printf(" - - -\n");
        printf("c | | \n");
    }
    else if (ans2 == 'n')
    {
        printf("option under construction!\n"); //must write this situation
    }
    else
        printf("Invalid choice!\n");
}
else if (ans == 'n')
{
    printf("Goodbye!\n");
    system("pause");
}
else
    printf("Invalid choice!\n");

}

请注意,程序几乎没有完成(显然)。

P.S。我昨天开始编程。

2 个答案:

答案 0 :(得分:4)

问题,我想,当你使用scanf读取一个字符时,它会读取该字符,但你也输入了一个换行符。然后,下一个scanf调用将读取该换行符而不是预期的字符。

最简单的解决方案是告诉scanf跳过空格(如换行符):

scanf(" %c", &ans);

注意%c之前的空格。

答案 1 :(得分:0)

正如约阿希姆所说,问题是scanf,特别是第二个问题。 Imho它正如所说的那样,在新线上而不是空间。

无论如何,我的标准灵魂在fflush(stdin)之前是scanf ("%c",&ans2)

BTW:对每个if和else语句使用花括号。它可以减少在某个地方破解新线路后的愚蠢错误,并且可以提高可读性。我的第一个猜测是错误的嵌套括号和案例..

编辑我在评论中了解到:使用fflush(stdin)!它可能有效,但只是偶然,因为fflush() stdin在ANSI-C中具有未定义的行为!