0

我决定制作一个播放井字游戏的程序,但我的 if 语句失败了。它使用我放在 else 下的任何内容。我已经盯着它看了两个小时,我就是找不到任何问题!这是代码:

#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");

}

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

PS我昨天开始编程。

4

2 回答 2

4

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

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

scanf(" %c", &ans);

注意前面的空格%c

于 2013-03-25T13:15:23.017 回答
0

正如约阿希姆所说,问题出在scanf第二个问题上。如前所述,恕我直言,它读取的是新行,而不是空格。

无论如何,我的标准灵魂将fflush(stdin)scanf ("%c",&ans2).

顺便说一句:为每个 if 和 else 语句使用花括号。它减少了在某处修改新行后的愚蠢错误,并增加了此处的可读性。我的第一个猜测是错误的嵌套大括号和案例..

编辑正如我通过评论了解到的:不要使用fflush(stdin)!它可能会起作用,但只是偶然,因为fflush()onstdin在 ANSI-C 中具有未定义的行为!

于 2013-03-25T14:16:21.643 回答