看板 C_and_CPP 關於我們 聯絡資訊
請教各位高手 我在做一練習題 題目如下: 產生一個陣列至多儲存10個學生的名字 以及另一個陣列儲存每個學生的成績(0~100) 用迴圈提示使用者輸入名字和成績 計算平均成績(利用迴圈計數) 顯示此平均成績並以表格顯示所有學生的名字和成績 我已初步達成題目要求 Question 1:可是為什麼顯示的時候 數字 名字 都無法對齊 是我setw使用錯誤嗎 還是另有原因 Question 2:輸入名字的時候 一定要以#結束嗎 一開始我的程式碼沒使用getline(cin,name[i],'#'); 而是使用getline(cin,name[i]); 可是就是會有問題 不知道原因 可請懂的人稍微解釋一下嗎 謝謝~ 煩請高手解答~謝謝 以下為程式碼: #include<iostream> #include<iomanip> #include<cctype> using namespace std; int main() { const int student_number=10; string name[student_number]={}; int grade[student_number]={0}; int count=0; double average_grade=0.0; char answer='y'; for(int i =0;( i<student_number && tolower(answer)=='y');i++) { cout<<"Please enter the student's name:"<<endl; getline(cin,name[i],'#'); cout<<"Please enter the grade of student "<<name[i]<<"."<<endl; cin>>grade[i]; count++; cout<<"Do you still want to input any data ? "<<endl; cin >> answer ; } int sum=0; for(int i=0; i<count ; i++) { sum += grade[i]; } average_grade = static_cast<float>(sum) / static_cast<float>(count); cout<<"student name grade"<<endl; for(int i =0;i< count;i++) { cout<<setw(12)<<name[i]<<setw(15)<<grade[i]; } cout<<"\n average "<<average_grade<<endl; return 0; } -- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.204.42.2 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1425153128.A.91F.html
PRAM: 你是不會去google一下getline()的參數意義嗎? 03/01 04:01
trainausidd: 他的含意我懂 只是不懂為什麼第二次跑迴圈 setw似乎 03/01 04:51
trainausidd: 沒起作用 03/01 04:51
trainausidd: 不知道是否與name[i]為string有關... 03/01 04:52
LPH66: 你的沒對齊是沒對齊標頭還是每行間都不齊? 03/01 07:42
LPH66: setw() 是會作用在 string 上的 03/01 07:43
LPH66: 另外你的問題一, 關鍵在你 cin >> answer 了 03/01 07:44
LPH66: (啊, 總之是輸入名字的那個問題) 03/01 07:44
LPH66: 因為 answer 是 char 所以只會吃恰好一個字元 03/01 07:45
LPH66: 所以那一行剩下的東西 (包含換行) 會留給下一個讀取 03/01 07:45
LPH66: 在這裡就正好被 getline 抓到變成空行輸入 03/01 07:46
LPH66: 解決法可以一樣 getline 進一個 string 去再取 [0] 出來 03/01 07:46
LPH66: 也就是變成判斷「這一行輸入的開頭是不是 y」 03/01 07:47
trainausidd: 感謝您專業的回答 可是我還是看不懂 你在說什麼 = = 03/01 19:48
trainausidd: 我所謂的對齊是要對齊student name的左邊 03/01 19:48
trainausidd: Student name 03/01 19:49
trainausidd: Ann 03/01 19:49
trainausidd: Steve 像這樣 03/01 19:50
remizu: 對齊左邊用std::left 對齊右邊用std::right 03/01 22:34
LPH66: 也就是先 << left 再輸出字串即可 03/02 06:31