![](/img/trans.png)
[英]Finding Max Value without the use of if..else statement in C language
[英]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.