[問題] swith_case 用法
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Code::Block
寫C
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
matlab的fdatool
問題(Question):
因為我接下來要做的是有45個case
自己用2個case來做是成功的
我想知道該何做能更簡潔
餵入的資料(Input):
input是相同的512筆data
經由case去選擇不同的處理方式
預期的正確結果(Expected Output):
目前測試是正確的 沒有錯誤
只是想要知道有沒有更好的方法
錯誤結果(Wrong Output):
目前測試是正確的 沒有錯誤
只是想要知道有沒有更好的方法
程式碼(Code):(請善用置底文網頁, 記得排版)
void A (void);
void D (void);
char c;
printf("enter A=120_480 or D=180_480 = ");
scanf ("%c", &c);
switch (c)
{
case 'A':
break;
case 'D':
break;
defult break;
}
補充說明(Supplement):
因為我是要做濾波器(fir filter - bandpass)
我希望能給使用者自己選擇頻率(0~540hz,每60hz為一單位)
所以我總共要做C10取2 有45個case要做
這裡再補充一下:
因為選擇的範圍可以是
0~60, 0~120, 0~180, .... ,0~540
60~120, 60~180, 60~240, ... ,60~540
...
...
420~480, 420~540
480~540
而每一個範圍經由matlab的fdatool都會產生一個fdacoefs.h
而每一個.h檔裡面會有一個陣列
我目前作法就是把 matlab的fdatool所產生的45個fdacoefs.h合併為一個.h檔
然後在使用者介面直接寫死
ex:
printf("enter A=120_480 or D=180_480 = ");
就是直接給使用者看著指令選擇
但是我想做到的是給使用者自動輸入想要的頻寬
只是覺得這樣對使用者比較方便,不用把我45個代號看完就可以自動輸入這樣
這樣的作法會比較省時間和空間嗎?
另外對於我上述想做的方式,我該找甚麼資料參考呢?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.114.28.223
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1433230610.A.D55.html
→
06/02 16:21, , 1F
06/02 16:21, 1F
用C,後來改成60為一單位,取0~540 這樣既是45個case
原本所說的應該是55個才對
※ 編輯: totemist (140.114.87.231), 06/02/2015 16:22:17
→
06/02 16:26, , 2F
06/02 16:26, 2F
→
06/02 16:26, , 3F
06/02 16:26, 3F
只有陣列,fdacoefs.h 會有
頻率100~500
const int BL = 82;
const real64_T B[82] = { ... }
因為不同頻率的coef不一樣,只要將這矩陣的變數改一下即可
頻率200~600
const int CL = 82;
const real64_T C[82] = { ... }
當然我目前的做法就會讓 .h和主程式就會變得很冗長
→
06/02 16:28, , 4F
06/02 16:28, 4F
推
06/02 18:36, , 5F
06/02 18:36, 5F
→
06/02 18:36, , 6F
06/02 18:36, 6F
那個意思是
選擇A的話 bandpassfilter 只會留下100~500hz範圍內的頻率
選擇B的話 bandpassfilter 只會留下200~600hz範圍內的頻率
所以我目前的設計 就是讓使用者 按 A or B 這樣
※ 編輯: totemist (140.114.28.223), 06/02/2015 19:59:31
我算是有想法了
就是在另一個變數level讓Fpass1和Fpass2合併起來,這樣應該能避免重複問題
int Fpass1 = 0;
int Fpass2 = 0;
int level =0;
printf("enter Fpass1 = ");
scanf ("%d", &Fpass1);
printf("enter Fpass2 = ");
scanf ("%d", &Fpass2);
if (Fpass1==0)
level = Fpass2*10000;
else
level = Fpass2*1000+Fpass1;
switch(level)
看還有沒有甚麼可以討論囉~
※ 編輯: totemist (140.114.28.223), 06/02/2015 21:46:59
→
06/02 21:54, , 7F
06/02 21:54, 7F
→
06/02 21:55, , 8F
06/02 21:55, 8F
※ 編輯: totemist (36.228.225.58), 06/03/2015 00:09:06
※ 編輯: totemist (36.228.225.58), 06/03/2015 00:12:03
推
06/03 01:03, , 9F
06/03 01:03, 9F
推
06/03 08:06, , 10F
06/03 08:06, 10F
→
06/03 08:07, , 11F
06/03 08:07, 11F
→
06/03 08:07, , 12F
06/03 08:07, 12F
→
06/03 08:07, , 13F
06/03 08:07, 13F
→
06/03 08:09, , 14F
06/03 08:09, 14F
推
06/03 09:50, , 15F
06/03 09:50, 15F
→
06/03 11:10, , 16F
06/03 11:10, 16F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 4 篇):
問題
4
16