2015-02-06 144 views
-1

我對編程仍然很陌生,所以我不確定採取的正確操作。我似乎無法讓程序在用戶選擇時顯示不同的選項。顯示第一個選項,或顯示「Invalid Entry」文本。我只會包含問題代碼,因爲我已經測試了其餘的if/else語句,並且它可以正確計算和顯示。在C語言中正確使用if/else語句的問題

printf("Select interest type: S, Y, M \n\n"); 
scanf("%ch", &type); /*program has finished calculating and is waiting on user input. Variable 'type' has already been initialized as a char*/ 

printf("\n\nIn %i years, at %.2f percent interest rate, \n", n, R); 

/*this is where the problem starts*/ 
if (type == 'S') 
    printf("Your investment becomes %.2f dollars, with simple interest.\n", futureVal_simp); 
else 
{ 
    if (type == 'Y') 
     printf("Your investment becomes %.2f dollars, with annual compounding interest.\n", futureVal_yr); 
    else 
    { 
     if (type == 'M') 
      printf("Your investment becomes %.2f dollars, with monthly compounding interest.\n\n\n", futureVal_mnth); 
     else printf("Invalid entry.\n\n\n"); /*these are supposed to display based on char entered*/ 
    } 
} 


return 0; 
} 

我檢查了網站上的其他問題,但我仍然不確定。我是否應該使用!=和& &而不是多個if/else?

+0

我很可能會爲此使用'switch'語句,或者至少'else if'。 – 2015-02-06 03:57:02

回答

0

你已經得到了先生@約翰Zwinck答案,但只是爲了完整起見,

您應該

scanf("%ch", &type); 

你scanf函數改爲

scanf(" %c", &type); // note the extra space before %c 

這告訴scanf()忽略所有以前的空格字符,並讀取第一個非空白字符。

僅供參考,在前面的情況下,前面壓ENTER擊鍵[先前輸入後]被存儲在輸入緩衝器一個\n。然後,\n是爲%c一個有效輸入,正被scanf()閱讀,生產場景

「%C」它不會爲輸入要求的。

另外,作爲一種改進,可以考慮使用switch語句而不是if-else條件。

+0

如果有人可以請讓我知道downvote背後的原因,我會很高興。 – 2015-02-06 14:56:39

2

你想要scanf("%c", &type);不是"%ch"%c表示字符,h表示字面h。您還需要檢查返回值scanf()。總是。

+0

這就是我的想法,但當我將它改爲'%c'時,它根本不要求輸入。顯然還有其他問題。 – Nemorov 2015-02-06 03:44:56

+0

@Nemorov:然後%c仍然有一些東西在被緩衝區佔用,並且在問題中的代碼中,'scanf'只是等待文字h。請提供完整的代碼示例,並在問題中提供確切的輸入。 – mafso 2015-02-06 03:51:25

+0

@Nemorov我已經爲您的問題添加了解決方案。作爲評論來說,這太冗長了。我不得不爲此添加一個單獨的anser。請嘗試。 – 2015-02-06 07:55:15

1

使用邏輯運算符/ if-else語句 - 如果它們相同,則選擇其中之一。 (也許在這種情況下,您也可以使用switch語句。) 但是有時候,使用太長的邏輯公式作爲條件會降低代碼的可讀性。

if(type == 'S') 
{ 
    content... 
} 
else if(type == 'Y') 
{...} 
else if(type == 'M') 
{...} 
else{...} 

因爲否則,如果其他手段{如果(...)}爲自己,這樣你就不需要寫在別的塊的其他的if/else語句。

我推薦的最好方法是在這種情況下使用switch語句。分支條件並不複雜 - 這些條件只是檢查字符「類型」是「S」,「Y」,「M」還是其他。在這種情況下,switch語句可以提高代碼的可讀性。

+0

這是使用開關/外殼的非常好的建議。 Char是整數類型,所有條件都使用==。此外,代碼將更緊湊,更易於維護。 – VolAnd 2015-02-06 05:27:58