[問題]請問 c語言三個運算子

看板C_and_CPP作者 (還是趕快畢業吧~~)時間15年前 (2009/12/22 10:41), 編輯推噓2(204)
留言6則, 4人參與, 最新討論串1/1
版上的各位大家好 小弟自學C語言 用的書是洪維恩老師寫的 "C語言教學手冊" 目前唸到選擇性敘述的switch 裡面有個範例是可以計算兩個運算子的 唸完後小弟突發奇想想寫寫看三個運算子的 所以就用dev c++寫了以下程式碼 /*switch的應用*/ #include<stdio.h> #include<stdlib.h> #include<math.h> int main(void) { int a,b,c,d; char oper1,oper2; printf("Now! You can enter a equation: "); scanf("%d %c %d %c %d",&b,&oper1,&c,&oper2,&d); printf("This is :%d+%d+%d=%d\n\n",b,c,d,b+c+d); switch(oper1) { case'+': switch(oper2) { case'+': printf("%d+%d+%d=%d\n",b,c,d,b+c+d); break; case'-': printf("%d+%d-%d=%d\n",b,c,d,b+c-d); break; case'*': printf("%d+%d*%d=%d\n",b,c,d,b+c*d); break; case'/': printf("%d+%d/%d=%d\n",b,c,d,(float)b+c/d); break; default: printf("Please don't do this again.\n"); } case'-': switch(oper2) { case'+': printf("%d-%d+%d=%d\n",b,c,d,b-c+d); break; case'-': printf("%d-%d-%d=%d\n",b,c,d,b-c-d); break; case'*': printf("%d-%d*%d=%d\n",b,c,d,b-c*d); break; case'/': printf("%d-%d/%d=%d\n",b,c,d,(float)b-c/d); break; default: printf("Please don't do this again.\n"); } case'*': switch(oper2) { case'+': printf("%d*%d+%d=%d\n",b,c,d,b*c+d); break; case'-': printf("%d*%d-%d=%d\n",b,c,d,b*c-d); break; case'*': printf("%d*%d*%d=%d\n",b,c,d,b*c*d); break; case'/': printf("%d*%d/%d=%d\n",b,c,d,(float)b*c/d); break; default: printf("Please don't do this again.\n"); } case'/': switch(oper2) { case'+': printf("%d/%d+%d=%d\n",b,c,d,(float)b/c+d); break; case'-': printf("%d/%d-%d=%d\n",b,c,d,(float)b/c-d); break; case'*': printf("%d/%d*%d=%d\n",b,c,d,(float)b/c*d); break; case'/': printf("%d/%d/%d=%d\n",b,c,d,(float)b*c/d); break; default: printf("Please don't do this again.\n"); } default: printf("Please don't do this again.\n"); } system("pause"); return 0; } 程式可以跑 結果出來的卻不是那麼一回事 例如我輸入3+2+4 結果卻是跑出 3+2+4=9 3-2+4=5 3*2+4=10 3/2+4=0 Please don't do this again. 這一堆東西 其實版上的明眼人一看 現在應該在捧腹大笑 小弟實在是野人獻曝了 但還是厚著臉皮想請教大家 我是犯了什麼邏輯上的錯誤呢?? 還請神人不吝賜教~~~感恩!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.21.235.246

12/22 10:43, , 1F
第一層 switch(oper1) 這一層都忘了加上 break; 了:)
12/22 10:43, 1F

12/22 10:43, , 2F
沒break??
12/22 10:43, 2F

12/22 10:53, , 3F
case會做到碰到break為止,所以沒有加break的話
12/22 10:53, 3F

12/22 10:53, , 4F
就會連下面的case的內容也做了
12/22 10:53, 4F

12/22 11:34, , 5F
原來是這樣...co大說的話我好像才在書上看到而已!!
12/22 11:34, 5F

12/22 11:35, , 6F
看到時才想說我應該不會犯這種錯吧真是orz,真是感謝大家
12/22 11:35, 6F
文章代碼(AID): #1BC37HIK (C_and_CPP)