簡體   English   中英

嵌套的If..else-錯誤的輸出,直接使用C編程語言輸出到最后

[英]Nested If..else - wrong output, goes directly to last else in C programming language

在C編程語言中,我需要這樣做:

-寫下程序以輸入數字。 程序讀取數字並確定它是偶數還是奇數。 如果數字是偶數,程序將要求用戶輸入他的年齡。 如果年齡在18歲或以上,程序將輸出消息“您可以投票!”,否則輸出消息“您不能投票”。 如果數字為奇數,程序將要求用戶輸入一個字符。 如果字符是小寫字母,程序將顯示消息“祝你好運!”,否則程序將輸出消息“努力工作!”。

不幸。 當我輸入一個奇數說3時,它將顯示“輸入一個字符:祝您好運!” 在我有機會輸入角色之前。它直接進入最后一個。 請幫助!

int main()
{
int num,age;
char c;
printf("Enter number: ");
scanf("%d", &num);

if (num%2 == 0)
    {
     printf("Age: ");
     scanf("%d",&age);

        if (age>=18)
            printf("You can vote!");
        else
            printf("You cannot vote.");
    }
 else
 {
  printf("Enter a character: ");
  scanf("&c",&c);

        if(c>='A' && c<='Z')
            printf("Work hard!");
        else
            printf("Good luck!");
  }

}

排隊 :

scanf("&c",&c);

應該是("%c", &c); 但是即使您解決了這個問題,它仍然是錯誤的,因為scanf在輸入緩沖區中保留了'\\ n'字符,因此,下次,當您使用scanf(“%c”,&c)讀取字符時,它將使c='\\n' 您可以通過更改為此內容輕松解決此問題

 scanf(" %c", &c);

在%c之前注意' ' 這個空的空間告訴scanf在從輸入中讀取任何字符之前先吃掉所有結尾的空格(包括\\ n)。

這是scanf用於讀取混合數據和字符的常見問題,因此請始終牢記。

從我注意到你的主要沒有回報。 放回return 0; 在函數main的末尾。

您在上一個scanf()格式規范中有一個類型。 因此, scanf()不執行任何操作(將0作為轉換數返回)。 您應該始終檢查scanf()的結果。

前一個scanf的尾隨輸入將用作下一個scanf輸入

您需要“吃掉”結尾的換行符:

用這樣的東西:

while( (c=getchar()) != '\\n' && c!= EOF);

或簡單地使用:

scanf(" %c", &c); //Notice a space

也解決:

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

代替這個(我想&c只是一個錯字):

scanf("&c",&c);

嘗試這個:

scanf("%c%*c", &c);

%c說明符僅占用一個字符,在stdin緩沖區中保留換行符; 在下一個調用中讀取並失敗if(c>='A' && c<='Z')

%*c告訴它讀取另一個字符並舍棄( * ),這應該除去換行符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM