[英]IF statement doesn't work properly
我決定制作一個播放井字游戲的程序,但是我失敗了,如果使用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");
}
請注意,該程序尚未完成(顯然)。
PS我昨天開始編程。
我想問題是,當您使用scanf
讀取字符時,它會讀取該字符,但是您還要輸入換行符。 然后,下一個scanf
調用將讀取該換行符,而不是預期的字符。
最簡單的解決方案是告訴scanf
跳過空格(例如換行符):
scanf(" %c", &ans);
注意%c
之前的空格。
正如勒夫所說,問題是scanf
especailythe第二個。 恕我直言,它讀取的是新行,而不是空格。
無論如何,我的標准選擇是在scanf ("%c",&ans2)
之前加上fflush(stdin)
scanf ("%c",&ans2)
。
順便說一句:對每個if和else語句使用花括號。 它減少了在某處亂換新行后的愚蠢錯誤,並提高了此處的可讀性。 我的第一個猜測是嵌套括號和大小寫錯誤。
編輯當我在評論教訓: 不要使用fflush(stdin)
! 它可能可行,但只是偶然,因為stdin
上的fflush()
在ANSI-C中具有未定義的行為!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.