[問題] switch與if之間的轉換

看板C_and_CPP (C/C++)作者 (★GY大★)時間16年前 (2010/04/04 16:01), 編輯推噓3(3029)
留言32則, 6人參與, 最新討論串1/1
小弟又來請教各位高手了!! 這次是switch和if之間的轉換 原本的switch case 'A': case 'a': ++aCount; break; default: printf("Incorrect letter grade entered."); printf("Enter a new grade.\n"); break; printf("\nTotals for each letter grade are:\n"); printf("A: %d\n",aCount); 小弟寫出來的if if (grade=='a') ++aCount; if (grade=='A') ++aCount; printf("\nTotals for each letter grade are:\n"); printf("A: %d\n",aCount); 問題來了,當我不是輸入a或A時,要如何印出 Incorrect letter grade entered. Enter a new grade. 小弟是有想到用if一個一個列出來 也就是 if(grade!='a'){printf...} if(grade!='A'){printf...} 但是這樣不會變成很多個if嗎(因為題目是有a A b B c C d D f F ) 這樣列就有10個if 請問一下有比較簡潔的方法嗎? 還是說只有這種方法呢?(也就表示switch在某些情況下比if好用) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.66.62.16

04/04 16:06, , 1F
if後面可以用else……學到switch沒學到else?
04/04 16:06, 1F

04/04 16:07, , 2F
還有.你可以考慮改成if(grade=='a'||grade=='A')這樣
04/04 16:07, 2F

04/04 17:56, , 3F
沒想到有or可以用XDDD 這樣可以節省不少if
04/04 17:56, 3F

04/04 17:57, , 4F
因為題目是說 從switch轉到if else再轉到if
04/04 17:57, 4F

04/04 18:00, , 5F
不過還是沒辦法印出Incorrect letter那裡
04/04 18:00, 5F

04/04 18:02, , 6F
真的只能用if硬列下去嗎?
04/04 18:02, 6F

04/04 18:11, , 7F
if((grade>64 && grade<91)||(grade>96 && grade<123))
04/04 18:11, 7F

04/04 18:11, , 8F
++aCount;
04/04 18:11, 8F

04/04 18:11, , 9F
else {
04/04 18:11, 9F

04/04 18:11, , 10F
printf("Incorrect letter grade entered.");
04/04 18:11, 10F

04/04 18:12, , 11F
printf("Enter a new grade.\n");
04/04 18:12, 11F

04/04 18:12, , 12F
}
04/04 18:12, 12F

04/04 18:23, , 13F
如果改成用else 這樣執行的時候 每按一次Enter鍵 就會印一
04/04 18:23, 13F

04/04 18:24, , 14F
次Incorrect 這個我嘗試過了QQ
04/04 18:24, 14F

04/04 19:09, , 15F
不是本來就要按一次做依次嗎
04/04 19:09, 15F
小弟完整的程式碼貼上來了 #include<stdio.h> int main (void) { int grade; int aCount=0; printf("Enter the letter grades.\n"); printf("Enter the EOF to end imput.\n"); while( ( grade=getchar() )!=EOF ) { if (grade=='a'||grade=='A') ++aCount; if (grade!='\n') { printf("Incorrect letter grade entered."); printf("Enter a new grade.\n"); } } printf("\nTotals for each letter grade are:\n"); printf("A: %d\n",aCount); return 0 ; } ※ 編輯: ggyy940 來自: 59.105.33.105 (04/04 21:18)

04/04 21:27, , 16F
我覺得你得問題和if switch沒關係
04/04 21:27, 16F

04/04 21:27, , 17F
可能是輸入字元吃到enter
04/04 21:27, 17F

04/04 21:28, , 18F
貼出完整一些的程式碼吧
04/04 21:28, 18F
※ 編輯: ggyy940 來自: 59.105.33.105 (04/04 22:16)

04/04 22:17, , 19F
完整程式碼貼上來了 不過我不知道輸入字元吃到ENTER是
04/04 22:17, 19F

04/04 22:17, , 20F
什麼意思(囧)
04/04 22:17, 20F

04/05 00:58, , 21F
當你按下enter時,getchar會吃到換行符號。
04/05 00:58, 21F
※ 編輯: ggyy940 來自: 203.67.188.212 (04/05 13:02)

04/05 13:03, , 22F
小弟將else那邊..換成if (grade!='\n') 這樣能解決輸入
04/05 13:03, 22F

04/05 13:04, , 23F
enter所發生的錯誤..但現在輸入a或A時卻會跑出Incorrect那
04/05 13:04, 23F

04/05 13:05, , 24F
行 這樣好像還是得列很多種情況才行....
04/05 13:05, 24F

04/05 13:05, , 25F
請問還有方法可以解決這種情況嗎"?
04/05 13:05, 25F

04/05 13:42, , 26F
else if
04/05 13:42, 26F

04/05 13:45, , 27F
don't use if , use else if
04/05 13:45, 27F

04/05 19:18, , 28F
先謝謝t大不斷的幫我^^~ 不過題目有說只能用if來表示
04/05 19:18, 28F

04/05 19:19, , 29F
所以不能用else if
04/05 19:19, 29F

04/05 20:46, , 30F
=> if (grade=='a'||grade=='A') &&if (grade!='\n')
04/05 20:46, 30F

04/05 20:47, , 31F
同時成立呢?!
04/05 20:47, 31F

04/05 20:48, , 32F
{+aCount++;break;}
04/05 20:48, 32F
文章代碼(AID): #1Bk4TdF2 (C_and_CPP)
文章代碼(AID): #1Bk4TdF2 (C_and_CPP)