C_and_CPP 板


LINE

初次來到這個版 已經爬過文與翻閱至底十誡 但是似乎還是沒辦法解決目前的問題 感謝昨晚幾位好手的幫助 解決了不少地方 不過目前在string的部分卡住了(嘆~ 問題基本敘述: 程式目標希望能 在輸入n個數值以後 求出平均 並且列出表格 表格有輸入之數值 與平均之差 以及a/r 其中A/R代表的 若數值與平均之差小於平均的1% 則顯示A 否則顯示R 開發平台: Dev-C++ 有問題的code: (請善用置底文標色功能) #include<iostream> #include<cmath> #include <string> using namespace std; const int number=100; long double pass (double aver,double x) 原為double arr[] { int i; return 1-(x/aver); } //求出(數值與平均之差 )除以平均的值 此處似乎有著錯誤A->改為x以後似乎已解決 double Average(double arr[],int n) { double sum=0; for(int i=0;i<n;i++) sum+=arr[i]; return sum/n; } //求出平均 int main() { double arr[number]; int i; string str =arr[i]; cout<<"Enter a number or separated by 's'\n"; for(int i=0;i<number;i++) { cout<<"Input "<<i+1<<" :"+1; cin>>arr[i]; if (str.empty()) //此處似乎有不明錯誤B break; } 嘗試使用string做修正 不過目前試過許多種方法(就是少一個=.把string那行移來移去....之類的) 最好的狀況是 (cpp conversion from `double' to non-scalar type `std::basic_string<char, std::char_traits<char>, std::allocator<char> >' requested ) 找不太到問題出在哪裡... int total=i; cout<<"================================================\n"; cout<<"Average:"<<Average(arr,number)<<endl; cout<<"================================================\n"; cout<<"Item Difference PASS\n"; double t; double aver=Average(arr,number); 新增 double x=arr[i]; double s=pass(arr[i],aver); (此處由於錯誤C cannot convert `double' to `double*' for argument `2' to `long double pass(double, double*)' 而無法進行下一部的檢驗 ) 目前已解決 t=fabs(s); //為將pass的值轉為正數 char K[2]={'R','A'}; for (i=0;i<total;i++) { if(t>=0.01) {cout<<arr[i]; cout<<" "; cout<<arr[i]-aver; cout<<" "; cout<<K[0];} else {cout<<arr[i]; cout<<" "; cout<<arr[i]-aver; cout<<" "; cout<<K[1]; } //此處似乎亦有未知錯誤D } system("PAUSE"); return 0; } 目前執行程式時遇到的問題 1.在疑似錯誤B的部分 輸入數據之後再輸入S並沒有如預期的結束迴圈 反而是強制將所有的"Input"都當作輸入空白而跑完 並且無法求出平均 曾經考慮使用cin.getline(arr,數字) 但是似乎會有更多錯誤 目前因為錯誤C而無法確認是否已經正常 2.在疑似錯誤D的部分我是依照對課本的概念去寫的 但是因為目前還沒辦法順利的跑到這裡 所以沒辦法確認是否有錯 還煩請指導了 感謝 01:07 修正了pass的double問題之後 錯誤A與C均已解決 感謝fragileness大的指導 目前錯誤B依然無法找出解決辦法 求其平均會出現 -1.#QNAN 意義不明 -- 我對普通人沒有興趣, 如果妳們之中有偽娘、百合女、或是蘿莉屬性正太的話再來找我吧! 以上! --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.131.226
1F:→ fragileness:pass裡面的int i沒有給值啊 12/03 00:32
2F:→ Ricrollp:想請教一下 i不是應該是跟隨arr[i]的變數嗎? 12/03 00:36
3F:→ Ricrollp:我以為只要讓程式知道它是一個int就夠了 12/03 00:37
4F:→ fragileness:arr[]本身沒有跟隨一個"現在要取第幾個值"的變數 12/03 00:40
5F:→ fragileness:要你自己在[]裡面填一個已知值i,程式才知道arr[i]是啥 12/03 00:41
6F:→ fragileness:你把arr[i]傳給pass的時候 pass只知道arr[i]的值 12/03 00:42
7F:→ fragileness:不知道他是出自arr[]這個array 更不知道他是第i個 12/03 00:43
8F:→ fragileness:還有你pass宣告的時候應該要傳一個double和一個 12/03 00:45
9F:→ fragileness:double array進去 結果你使用的時候傳兩個double進去 12/03 00:45
※ 編輯: Ricrollp 來自: 140.116.131.226 (12/03 01:09)
10F:→ Ricrollp:感謝fragileness大的指導 錯誤AC都已經解決了 12/03 01:09
11F:→ akasan:你直接拿double 跟字元是想比較什麼= =? 12/03 01:11
12F:→ Ricrollp:可以請問一下樓上的意思是... 我用x=arr[i]是錯的嗎? 12/03 01:16
※ 編輯: Ricrollp 來自: 140.116.131.226 (12/03 01:17)
13F:推 VictorTom:錯誤B就是樓上說的, 錯誤D等你跑到再說, 應該是OK的吧. 12/03 01:17
14F:→ fragileness:akasan說的是 if (arr[0]=='s') 這行吧 12/03 01:17
15F:→ akasan:arr[0] == 's' <----問題點 12/03 01:18
16F:→ VictorTom:-1.#QNAN就是算出了一個非正常結果的浮點數, 詳情請查 12/03 01:18
17F:→ VictorTom:IEEE 754浮點數表示法, 其中定義了怎樣的bit表示是非正 12/03 01:18
18F:→ VictorTom:常浮點數(如超小數, 無限大, 非數), NAN就是非數的case, 12/03 01:19
19F:→ VictorTom:當你執行某些錯誤運算時就可能產生NAN, 如0/0; 或者你操 12/03 01:19
20F:→ VictorTom:作記憶體錯誤導致寫壞浮點數結構, 也有可能發生. 12/03 01:19
21F:→ Ricrollp:是這樣的 之前曾照範例用arr[0]=='\0'會得到一樣的結果 12/03 01:20
22F:→ Ricrollp:所以想說嘗試用字母來表示看看 12/03 01:20
23F:→ VictorTom:arr[0]是一個double, 's', '\0'是一個字元, 雖然實際跑 12/03 01:20
24F:→ VictorTom:程式不是不能比, 問題是你拿一個浮點數和字元想要比出什 12/03 01:21
25F:→ akasan:說真的double 跟 字元比 沒丟警告之類的還滿意外的... 12/03 01:21
26F:→ VictorTom:麼結果??請先釐清你這個條件判斷的邏輯.... 12/03 01:21
27F:→ Ricrollp:明白了 原來是我誤解了範例的意思 12/03 01:21
28F:→ Ricrollp:那可以請問一下如果要在這裡使用if進行停止 12/03 01:22
29F:→ Ricrollp:是要使用哪一類型的東西呢? 12/03 01:23
30F:推 VictorTom:你的cin的目標是double, 如果你不能挑選一個特殊的 12/03 01:23
31F:→ VictorTom:double數值來當作停止輸入的特別訊號, 你就得改別你輸入 12/03 01:23
32F:→ VictorTom:的模式, 比如每次輸入double都問user是否繼續輸入然後請 12/03 01:24
33F:→ VictorTom:user輸入的Y或N, 你再另行讀入字元判斷; 或者cin有其他 12/03 01:24
34F:→ fragileness:還有不管arr[0]==? 這裡的?你打算用啥 好像0要改成i吧 12/03 01:24
35F:→ VictorTom:method可以直接做好這種判斷, 就請其他強者補完了@_@" 12/03 01:25
36F:→ fragileness:永遠都拿第0個來比 如果第0個不是表示結束的那個 12/03 01:25
37F:→ fragileness:不就注定要跑到完... 12/03 01:26
38F:→ Ricrollp:arr[0]也是我誤解了範例的原意.. 另.感謝VictorTom大幫助 12/03 01:26
39F:→ Ricrollp:題目要求的顯示畫面似乎是以輸入空白或s進行結束 12/03 01:27
40F:→ Ricrollp:如果無法使用double進行的話 小數點亦無法計算 12/03 01:27
41F:推 VictorTom:那有一個簡單的策略, 先用一個string存每次的輸入, 12/03 01:29
42F:→ Ricrollp:另有使用輸入-1當做結尾的 我試試看 12/03 01:29
43F:推 ledia:那麼就是用 string 或 char* 接下來, 判斷是結束還是資料 12/03 01:29
44F:→ VictorTom:然後判斷string是不是空白或s, 是就代表迴圈要break, 12/03 01:29
45F:→ ledia:慢了... orz 12/03 01:29
46F:→ VictorTom:不是就從string去讀數值出來轉成double(toDouble??) 12/03 01:29
47F:→ VictorTom:l大想偷襲....XD 12/03 01:30
48F:→ Ricrollp:string嗎...從沒用過@@ 開始爬文+翻書 12/03 01:37
49F:推 VictorTom:像l大說的開個夠大的char[]來放也可以, 只是想說既然你 12/03 01:45
50F:→ VictorTom:都寫C++了, 直接抓string應該會方便簡單很多:) 12/03 01:45
51F:→ Ricrollp:因為我真正學C++還不到兩週 所以很多東西都還不明白 12/03 01:46
52F:→ Ricrollp:麻煩大家了 12/03 01:47
53F:→ Ricrollp:想請教一下 string的使用和new是一樣的嗎? 12/03 01:47
54F:→ fragileness:上面這句還真難回答 12/03 01:53
55F:→ fragileness:你不如問我 吃跟午餐是一樣的嗎 12/03 01:54
56F:→ Ricrollp:string的用法還摸索不出來的樣子 我再翻書看看好了 12/03 01:55
57F:→ Ricrollp:麻煩各位了 12/03 01:56
58F:推 VictorTom:http://www.cplusplus.com/reference/string/string/ 12/03 09:09
59F:→ VictorTom:再說我覺得string的使用, C++的入門書多少會教一些吧!? 12/03 09:09
※ 編輯: Ricrollp 來自: 140.116.131.226 (12/03 09:22)
60F:推 VictorTom:我很想請你先試著畫流程圖再回來寫code.... 12/03 09:43
61F:→ VictorTom:你的arr[]與i都還沒有初值你就做str = arr[i], 你覺得 12/03 09:44
62F:→ VictorTom:會得到什麼結果?? 程式是一步一步執行的, 你可以自己試 12/03 09:44
63F:→ VictorTom:用大腦人工走一遍你的code, 只要有哪一步你懷疑不知道 12/03 09:45
64F:→ VictorTom:會有什麼結果, 八成那行程式碼就有問題....@_@" 12/03 09:45
65F:→ VictorTom:寫程式要明確了解自己每一行再幹麻, 而不是把=還是 12/03 09:46
66F:→ VictorTom:string用猜的胡亂移來移去就想湊出結果, 你這樣只是純 12/03 09:47
67F:→ VictorTom:脆浪費時間, 對寫程式的基礎與技術沒有任何幫助.... 12/03 09:47
68F:推 VictorTom:再整理一次大致的流程: 1. 每次迴圈先輸入到string裡, 12/03 09:50
69F:→ VictorTom:別懷疑string輸入一樣用cin>>str;就可以; 2. 從讀回來 12/03 09:50
70F:→ VictorTom:的str裡判斷是不是's'或者你設定的其他條件, 操作方式 12/03 09:51
71F:→ VictorTom:你可以參考我上面貼過的連結; 3. 符合中止條件就結束迴 12/03 09:52
72F:→ VictorTom:圈, 否則就把該str轉成double存入arr[i]裡去. 12/03 09:54
73F:→ VictorTom:至於怎麼從string轉成double, C我會, C++就有請板上大 12/03 09:54
74F:→ VictorTom:大們補完了....Orz 12/03 09:54
75F:→ Ricrollp:感謝V大的耐心指點... 我會先試著了解學會string的 12/03 09:56
76F:推 VictorTom:PS. 雖然自己寫時盡量不要, 但是看/研究別人的程式或者 12/03 10:00
77F:→ Ricrollp:因為照V大說的 我在string跟陣列值之間的轉換思考有問題 12/03 10:00
78F:→ VictorTom:sample時, 改東改西移來移去反而是一個測試/了解方式:) 12/03 10:00







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP