RSS   



  可打印版本 | 推薦給朋友 | 訂閱主題 | 收藏主題 | 純文字版  


 
 25  1/2  1  2  > 


 
主題: [資訊電機] [問題]C++中switch的寫法該如何寫?   字型大小:||| 
老江
版主
等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30
School Days推廣

 . 積分: 391
 . 精華: 1
 . 文章: 3664
 . 收花: 1702 支
 . 送花: 8225 支
 . 比例: 4.83
 . 在線: 650 小時
 . 瀏覽: 18020 頁
 . 註冊: 7243
 . 失蹤: 260
#1 : 2005-4-5 09:42 PM     只看本作者 引言回覆

最近在練習寫c++
遇到了一個例題,看起來應該是用switch的寫法
不過怎麼寫程式都給我自爆
連去網路上查教學copy回來的程式碼都自爆(題外話,用google搜尋竟然都搜到大陸香港才有教學..)
想問一下switch的寫法
switch (enter){
case ' a':
    prinft("xxx");
    break;
default:
    printf("yyy");
}
是不是大概是這樣寫
還有其中enter是用char定義嗎?
因為程式的要求是輸入一個代號
然後做出不同動作
所以說一開始是
char enter;
printf("請輸入代號");
scanf("%c",&enter);
用%c應該沒錯吧

附上題目讓大家看看好了,免得我說半天沒人看懂
Write a program that computes the area of different shapes.The program repeatedly ask the user for a command (a single character).,and performs the action as shown blew.

User enters        Action
------------------------------------------------------------------------
q                  programs ends
e                  get two numbers from keyboard and display the area of a rectangular
f                   Get an radius from keyboard and display the area of a circle
s                   Get a number from keyboard and display the area of a equal lateral hexagon
all others       Display an error message "Invalid Number"

應該是用switch加上副程式來寫吧



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記
Acute
論壇第一大毒王
等級: 18等級: 18等級: 18等級: 18等級: 18
論壇第一小神童

 . 積分: 3281
 . 精華: 8
 . 文章: 11574
 . 收花: 14037 支
 . 送花: 3260 支
 . 比例: 0.23
 . 在線: 323 小時
 . 瀏覽: 2250 頁
 . 註冊: 8008
 . 失蹤: 5360
#2 : 2005-4-5 10:43 PM     只看本作者 引言回覆

對阿, 但是, 'a' 前面不該有空白
還有, 是printf, 不是prinft

你要的應該大約是:
switch (enter)
{
   case 'q':
   case 'Q':
       //
       break;
   case 'e':
   case 'E':
       //
       break;
   case 'f':
   case 'F':
       //
       break;
   case 's':
   case 'S':
       //
       break;
   default:
       //
       break;
}



Acute.



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記
GERRYccc
名譽版主
等級: 8等級: 8
凹~~嗚~~^^y

今日心情

 . 積分: 103
 . 文章: 597
 . 收花: 497 支
 . 送花: 754 支
 . 比例: 1.52
 . 在線: 446 小時
 . 瀏覽: 7391 頁
 . 註冊: 8004
 . 失蹤: 157
 . ~@.@~ TWed2k 星球
#3 : 2005-4-6 10:06 AM     只看本作者 引言回覆


引用:
寫到:
哈哈。。偷來改。。藍色的是我改過的= =||
你要的應該大約是:
switch (enter)
{
   case 'q':
   case 'Q':
       動作;
       break;
   case 'e':
   case 'E':
       動作;
       break;
   case 'f':
   case 'F':
       動作;
       break;
   case 's':
   case 'S':
       動作;
       break;
   default:
       動作;
       break;
}


switch (迴圈條件) //可用字元變數char,也可以用整數型態變數int,double,...,隨你^^

另外,你的題目是英文的,我看不懂= =||..可以翻譯中文嗎??

[GERRYccc 在 2005-4-6 10:12 AM 作了最後編輯]



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記
柚祐
鍛鐵驢友
等級: 7等級: 7等級: 7
好吃的柚子 ~

 . 積分: 84
 . 精華: 3
 . 文章: 662
 . 收花: 224 支
 . 送花: 51 支
 . 比例: 0.23
 . 在線: 410 小時
 . 瀏覽: 1810 頁
 . 註冊: 7233
 . 失蹤: 677
 . 東森幼幼台
#4 : 2005-4-6 04:10 PM     只看本作者 引言回覆

呵呵 .. 都被別人講完了 .. ^^

大概就是 default 後面記得加上 break 是要小心的地方 .. 就這樣 ..

default:
動作;
break;



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記
Acute
論壇第一大毒王
等級: 18等級: 18等級: 18等級: 18等級: 18
論壇第一小神童

 . 積分: 3281
 . 精華: 8
 . 文章: 11574
 . 收花: 14037 支
 . 送花: 3260 支
 . 比例: 0.23
 . 在線: 323 小時
 . 瀏覽: 2250 頁
 . 註冊: 8008
 . 失蹤: 5360
#5 : 2005-4-6 05:48 PM     只看本作者 引言回覆


引用:
柚祐寫到:
呵呵 .. 都被別人講完了 .. ^^

大概就是 default 後面記得加上 break 是要小心的地方 .. 就這樣 ..

default:
動作;
break;


閒閒沒事來吐槽
習慣上, default 會寫在最後面 (老江也是寫在最後面)
switch-case 的最後面一個, break 省略是不會錯誤的
因為他執行完畢, 後面沒東西了, 並不會構成錯誤

Acute.



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記
老江
版主
等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30
School Days推廣

 . 積分: 391
 . 精華: 1
 . 文章: 3664
 . 收花: 1702 支
 . 送花: 8225 支
 . 比例: 4.83
 . 在線: 650 小時
 . 瀏覽: 18020 頁
 . 註冊: 7243
 . 失蹤: 260
#6 : 2005-4-6 09:37 PM     只看本作者 引言回覆

我寫完了
但是很慘烈的是..會自爆
先貼上我寫的程式碼
#include< stdio.h >
double rec(double r1,double r2);
double cir(double r);
double hex(double h);
int main(void)
{
    char enter;
    double r1,r2,r,h;
    printf("請輸入代號>");
    scanf("%c",&enter);
    switch(enter)
    {
    case 'q':
    case 'Q':
         return 0;
         break;
    case 'e':
    case 'E':
         printf("請輸入長與寬>");
         scanf("%lf,%lf",&r1,&r2);
         printf("面積是%f",rec(r1,r2));
         break;
    case 'f':
    case 'F':
         printf("請輸入圓半徑>");
         scanf("%lf",&r);
         printf("面積是%f",cir(r));
         break;
    case 's':
    case 'S':
         printf("請輸入六邊形邊長>");
         scanf("%lf",&h);
         printf("面積是%f√3",hex(h));
         break;
    default:
            printf("Invaild Number");
            return 0;
    }
}
double rec(double r1,double r2)
{
       return (r1*r2);
}
double cir(double r)
{
       return (r*r*3.14);
}
double hex(double h)
{
       return (h*1.5);
}                  

Switch方面輸入正常代號都沒問題,會跑出下一步要求輸入數字
但是一旦打到default裡的
就自爆
printf那行沒出現就爆了
病症二
輸入完數字之後
自爆
我在想是副程式的問題
不過看了半天好像沒寫錯啊

[老江 在 2005-4-6 09:53 PM 作了最後編輯]



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記
柚祐
鍛鐵驢友
等級: 7等級: 7等級: 7
好吃的柚子 ~

 . 積分: 84
 . 精華: 3
 . 文章: 662
 . 收花: 224 支
 . 送花: 51 支
 . 比例: 0.23
 . 在線: 410 小時
 . 瀏覽: 1810 頁
 . 註冊: 7233
 . 失蹤: 677
 . 東森幼幼台
#7 : 2005-4-6 09:58 PM     只看本作者 引言回覆

哎呀 ~ 被小毒王吐槽了 ~~ ^^

我是不太熟break;的意義 .. 只有乖乖照著書來寫 .. ^^

=============

to: 老江

你這樣真的可以編譯成功嗎 ??  #include 後面沒有乎 ?


另外後面 return 0 的位置不對 .. ^^

....

         printf("面積是%f√3",hex(h));
         break;
    default:
            printf("Invaild Number");
    }
            return 0;
}

-----
改了應該就可以了 ...

[柚祐 在 2005-4-6 10:00 PM 作了最後編輯]



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記
老江
版主
等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30
School Days推廣

 . 積分: 391
 . 精華: 1
 . 文章: 3664
 . 收花: 1702 支
 . 送花: 8225 支
 . 比例: 4.83
 . 在線: 650 小時
 . 瀏覽: 18020 頁
 . 註冊: 7243
 . 失蹤: 260
#8 : 2005-4-6 10:07 PM     只看本作者 引言回覆

#include後面是有打的
不過copy太順,論壇把它看作html語法所以沒顯示出來
編譯都沒有問題
所以自爆找不出在那錯了

return 0我改了位子了
編譯..OK
執行..自爆

之前那個位子他也沒查出有錯



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記
柚祐
鍛鐵驢友
等級: 7等級: 7等級: 7
好吃的柚子 ~

 . 積分: 84
 . 精華: 3
 . 文章: 662
 . 收花: 224 支
 . 送花: 51 支
 . 比例: 0.23
 . 在線: 410 小時
 . 瀏覽: 1810 頁
 . 註冊: 7233
 . 失蹤: 677
 . 東森幼幼台
#9 : 2005-4-6 10:26 PM     只看本作者 引言回覆

我剛剛是了一下 .. 可以耶 .. ^^

我貼出來好了 ..

#include<stdio.h>
#include <stdlib.h>

double rec(double r1,double r2);
double cir(double r);
double hex(double h);

int main(void)
{
    char enter;
    double r1,r2,r,h;
    printf("請輸入代號>"); scanf("%c",&enter);
   
    switch(enter)
    {
    case 'q':
    case 'Q':
         return 0;
         break;
    case 'e':
    case 'E':
         printf("請輸入長與寬>");
         scanf("%lf,%lf",&r1,&r2);
         printf("面積是%f",rec(r1,r2));
         break;
    case 'f':
    case 'F':
         printf("請輸入圓半徑>");
         scanf("%lf",&r);
         printf("面積是%f",cir(r));
         break;
    case 's':
    case 'S':
         printf("請輸入六邊形邊長>");
         scanf("%lf",&h);
         printf("面積是%f√3",hex(h));
         break;
    default:
         printf("Invaild Number");
         break;
    }

    system("PAUSE");
    return 0;
}

double rec(double r1,double r2)
{
       return (r1*r2);
}
double cir(double r)
{
       return (r*r*3.14);
}
double hex(double h)
{
       return (h*1.5);
}   



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記
老江
版主
等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30
School Days推廣

 . 積分: 391
 . 精華: 1
 . 文章: 3664
 . 收花: 1702 支
 . 送花: 8225 支
 . 比例: 4.83
 . 在線: 650 小時
 . 瀏覽: 18020 頁
 . 註冊: 7243
 . 失蹤: 260
#10 : 2005-4-6 10:40 PM     只看本作者 引言回覆

#include < stdlib.h >
system("PAUSE");

我很仔細的看了幼幼跟我的程式差別
發現少這兩行而已
就讓我的程式不再自爆
這兩行到底是有何德何能
我敗了...orz


我原本的程式是錯在邏輯上嗎
想想也沒錯的感覺
到底是怎麼一回事



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記
柚祐
鍛鐵驢友
等級: 7等級: 7等級: 7
好吃的柚子 ~

 . 積分: 84
 . 精華: 3
 . 文章: 662
 . 收花: 224 支
 . 送花: 51 支
 . 比例: 0.23
 . 在線: 410 小時
 . 瀏覽: 1810 頁
 . 註冊: 7233
 . 失蹤: 677
 . 東森幼幼台
#11 : 2005-4-6 11:23 PM     只看本作者 引言回覆

喔 .. 原來你的自爆的意思是這個阿 .. ^^

我用的整合編譯器是 Dev-C++  是需要加上這個語法  system("PAUSE");

是想要讓結果暫時停留在畫面之中 ...

好像不能算是C語言的一部分 (詳情我也不清楚) ..


至於其他的編譯器我就不知道需不需要加了 ?  (順便問一下 .. 你是用什麼呢 ? )

[柚祐 在 2005-4-7 07:07 AM 作了最後編輯]



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記
Acute
論壇第一大毒王
等級: 18等級: 18等級: 18等級: 18等級: 18
論壇第一小神童

 . 積分: 3281
 . 精華: 8
 . 文章: 11574
 . 收花: 14037 支
 . 送花: 3260 支
 . 比例: 0.23
 . 在線: 323 小時
 . 瀏覽: 2250 頁
 . 註冊: 8008
 . 失蹤: 5360
#12 : 2005-4-7 10:48 AM     只看本作者 引言回覆

感覺上不對 @_@
程式已經說, q  結束程式, 那表示, q command 以前, 程式不應該結束
此外, system () 是執行一個外部程式或命令, 沒事也別用
程式應該這樣比較合理: (我直接拿你們的code, 加上while (1) {....} 而已

#include<stdio.h>

#include <stdlib.h>



double rec(double r1,double r2);

double cir(double r);

double hex(double h);



int main(void)

{

    char enter;

    double r1,r2,r,h;


    while (1)
    {


       printf("請輸入代號>"); scanf("%c",&enter);
   
      
   
       switch(enter)
   
       {
   
          case 'q':
      
          case 'Q':
      
               return 0;
      
               break;
      
          case 'e':
      
          case 'E':
      
               printf("請輸入長與寬>");
      
               scanf("%lf,%lf",&r1,&r2);
      
               printf("面積是%f",rec(r1,r2));
      
               break;
      
          case 'f':
      
          case 'F':
      
               printf("請輸入圓半徑>");
      
               scanf("%lf",&r);
      
               printf("面積是%f",cir(r));
      
               break;
      
          case 's':
      
          case 'S':
      
               printf("請輸入六邊形邊長>");
      
               scanf("%lf",&h);
      
               printf("面積是%f√3",hex(h));
      
               break;
      
          default:
      
               printf("Invaild Number");
      
               break;
   
       }

    }

}



double rec(double r1,double r2)

{

       return (r1*r2);

}

double cir(double r)

{

       return (r*r*3.14);

}

double hex(double h)

{

       return (h*1.5);

}   
另外, 萬一真的需要讓程式暫停, 後面才結束, 建議用:
printf ("Press Enter to continue...");
getchar ();


Acute.



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記
GERRYccc
名譽版主
等級: 8等級: 8
凹~~嗚~~^^y

今日心情

 . 積分: 103
 . 文章: 597
 . 收花: 497 支
 . 送花: 754 支
 . 比例: 1.52
 . 在線: 446 小時
 . 瀏覽: 7391 頁
 . 註冊: 8004
 . 失蹤: 157
 . ~@.@~ TWed2k 星球
#13 : 2005-4-7 03:12 PM     只看本作者 引言回覆


引用:
Acute寫到:
...

...
另外, 萬一真的需要讓程式暫停, 後面才結束, 建議用:
printf ("Press Enter to continue...");
getchar ();

Acute.


來抓毒王錯字.....要讓他暫停應該是 getch(); 這樣就好了:icons8
送花送花~~~~要送三朵唷
========================================
補充:抓失敗,被反抓

[GERRYccc 在 2005-4-8 03:36 PM 作了最後編輯]



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記
老江
版主
等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30
School Days推廣

 . 積分: 391
 . 精華: 1
 . 文章: 3664
 . 收花: 1702 支
 . 送花: 8225 支
 . 比例: 4.83
 . 在線: 650 小時
 . 瀏覽: 18020 頁
 . 註冊: 7243
 . 失蹤: 260
#14 : 2005-4-7 08:03 PM     只看本作者 引言回覆

我是用Bloodshed Dev-C++
原本想灌微軟的.net
不過好肥..
所以就灌了這個

自爆就是說程式自己就關了
之前會一直遇到這問題(第一篇程式碼時)

的確應該是在輸入Q之前程式都不應該關掉
我之前是想說用goto next讓他繼續跑
不過不行

在加入小神童的while之後就不會在跑完一項就跳掉了
不過每次都會看到那句Invaild Number

這好像是必然的結果

不過我不知道有while (1)這種用法呢
我認識的while是在那邊算count算到滿足條件為止
沒想到還可以打個(1)就好了
真是太神奇了



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記
Acute
論壇第一大毒王
等級: 18等級: 18等級: 18等級: 18等級: 18
論壇第一小神童

 . 積分: 3281
 . 精華: 8
 . 文章: 11574
 . 收花: 14037 支
 . 送花: 3260 支
 . 比例: 0.23
 . 在線: 323 小時
 . 瀏覽: 2250 頁
 . 註冊: 8008
 . 失蹤: 5360
#15 : 2005-4-7 10:43 PM     只看本作者 引言回覆


引用:
GERRYccc寫到:

引用:
Acute寫到:
...

...
另外, 萬一真的需要讓程式暫停, 後面才結束, 建議用:
printf ("Press Enter to continue...");
getchar ();

Acute.


來抓毒王錯字.....要讓他暫停應該是 getch(); 這樣就好了:icons8
送花送花~~~~要送三朵唷


gerry, 今天就教你C 語言, 算你30朵花, 自己去送

1. getch(), getche() 這是DOS 環境下, Microsoft/Borland 在百般無聊情形下, 提供的取得字元方法, 所以, 這兩個function 在Windows 32 bits console program 中就無法使用了 (使用MSVC 6.0 選擇建立console program)

2. getchar () 這是標準的C function, 90% 的platform 都會提供這個function, so, 要讓你的C program 可以跨平台, 必須使用這個function, 不能用那些特定compiler 提供的function

Acute.



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  新增/修改 爬文標記

 25  1/2  1  2  > 
   



 



所在時區為 GMT+8, 現在時間是 2024-4-28 03:59 AM
清除 Cookies - 連絡我們 - TWed2k © 2001-2046 - 純文字版 - 說明
Discuz! 0.1 | Processed in 0.027192 second(s), 6 queries , Qzip disabled