gpt4 book ai didi

C++ sstream 跳过文件中的前三个输入

转载 作者:太空宇宙 更新时间:2023-11-04 13:19:11 25 4
gpt4 key购买 nike

我需要打开这种格式的文件

Dat Nguyen 77.7 88.8 99.9 11.1 22.2

Pat Nguyen 2 3 4 5 6

我需要将一行的名字分配给结构的成员数组,将行的姓氏分配给结构的另一个成员,并将行的每个编号分配给结构中的分数数组,每个新行都会到结构数组的下一个索引,做同样的事情(对不起,如果我措辞不好)。

我的名字和姓氏分配正常,但在将数字分配给结构成员时,它会跳过前三个数字。我做错了什么?

这是我的代码

void fileLoad(Gradebook *students, int &stuCount, int &assignments)
{
ifstream fin;
fin.open("Scores.txt");
if (!fin.is_open())
cout << "Failed to open file.\n";

if (stuCount < 10)
{
int n = 0;
string tempLine;
string line[10];
while (!fin.eof())
{
getline(fin, tempLine);
line[n] = tempLine;
stringstream ss(tempLine);
ss >> students[stuCount].fname >> students[stuCount].lname;
assignments = 0;
for (int i = 0; tempLine[i] != '\0'; i++)
{
ss >> students[stuCount].score[assignments];
if (tempLine[i] == ' ')
assignments++;

}
cout << line[n] << endl;
assignments--;
stuCount++;
n++;
cout << assignments << endl;
}
}
else
cout << "Already max students.\n";
}

这是输出

Dat Nguyen 77.7 88.8 99.9 11.1 22.2


Pat Nguyen 2 3 4 5 6


1. Add a new student to the class
2. Assign grades for a new assignment
3. List one student, displaying all their grades and their course average
4. List all the scores for a chosen assignment
5. Display all grades currently contained in the gradebook
6. Save the gradebook to file
7. Exit the program
Enter choice: 3

Enter a student #: 1

Dat Nguyen

Assignment 1: 11.1

Assignment 2: 22.2

Assignment 3: -9.25596e+61

Assignment 4: -9.25596e+61

Assignment 5: -9.25596e+61

Assignment 6: -9.25596e+61

Average: -5.28912e+61

最佳答案

这段逻辑值得怀疑:

for (int i = 0; tempLine[i] != '\0'; i++)
{
ss >> students[stuCount].score[assignments];
if (tempLine[i] == ' ')
assignments++;

}

这会逐一遍历 tempLine 中的所有字符,并尝试从 ss 中读取整个单词。想一想:对于每个字符,阅读一个完整的单词。 ss 包含 tempLine 的拷贝,但除此之外,它们是独立的实体。在字大小的 block 中读取 ss 并在 char 大小的 block 中读取 tempLine,字将在循环终止之前很久就用完。由于 OP 没有测试单词的读取是否成功,因此 Crom 只知道发生了什么。

我想你想要的更像是:

while (assignments < MAX_ASSIGMENTS &&
ss >> students[stuCount].score[assignments])
{ // read all assignments until array full or couldn't read an assignment score
assignments++;
}

MAX_ASSIGMENTS 是用于调整 score 数组大小的任何 OP 的占位符。

关于C++ sstream 跳过文件中的前三个输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35950000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com