1
我是C++的初學者。我正在編寫一個簡單的程序,創建student_info
的記錄。我創建了一個包含成員變量名稱和作業成績矢量的structs
數組。我希望從終端輸入cin
讀入這個structs
的數組中。請在下面找到我試圖做到這一點。我感到困惑的是如何在運行程序時終止/退出程序中的讀循環。我需要繼續閱讀姓名和一系列作業成績,形成一個單一的記錄。如果我刪除is.clear()
,那麼當我輸入程序退出的下一個學生的姓名時,它只會獲得一條記錄。從cin讀取結構數組時終止輸入
我將不勝感激任何建議。
#include <cstdlib>
#include <string>
#include <iostream>
#include <vector>
using namespace std;
struct student_info{
string name;
vector<double> hw_grades;
};
istream& read_single_record (istream& is, student_info& s){
is>>s.name;
double x;
while(is>>x)
{
s.hw_grades.push_back(x);
}
is.clear();
return is;}
int main() {
//read data into an array of student info
vector<student_info> vec_st_info;
student_info x;
while(read_single_record(cin,x))
{
vec_st_info.push_back(x);
}
return 0;
}
爲節目A樣本輸入將是
John
88
98
89
67
Sam
78
90
Tom
89
90
76
名稱隨後功課等級每一個「返回」鍵輸入的序列。作業成績的數量也不固定。
您需要一些實際的邏輯來確定記錄何時完成。例如,如果格式是將一條記錄中的所有值輸入到一行中,則應該使用'std :: getline',然後使用'std :: istringstream'從字符串中讀取。如果所有的值都在不同的行上,並用空行分隔,那麼在這種情況下'std :: getline'會再次起作用。如果結束記錄的成績有一個哨兵值(例如'-1'),請確保您正在處理該記錄。否則,您可能需要一次讀取一個字符,並在字符看起來不像數字時放回該字符。 – paddy
感謝您的評論。這是Accelerated C++中代碼的簡化版本,我沒有更改代碼的任何結構細節。我沒有看到他們正在使用任何特殊檢查來確定記錄何時完成。有什麼方法可以說分配一個字符或輸入cmd + D表示記錄已完成 – Prag1
如果在問題中包含示例以準確顯示輸入的內容,這將有所幫助。 – paddy