我决定制作一个播放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。我昨天开始编程。
答案 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中具有未定义的行为!