gpt4 book ai didi

C++ 链表 - 使用哨兵从文件中读取数据

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

所以我对此做了很多研究,但无法让我的输出正常工作。我需要从文件中读取数据并将其存储到链接列表中。使用的 while 循环一旦遇到 $$$$$ 哨兵就应该停止。然后我要显示数据(通过 ID 号 [用户输入] 搜索)我还没有那么远,我只是想正确显示数据并立即读取它。

我的问题是当它显示数据时并没有在 $$$$$ 处停止(即使我执行 "inFile.peek() != EOF 并省略 $$$$$)我仍然得到一个额外的垃圾记录。

我知道这与我的 while 循环以及我创建新节点的方式有关,但我无法以任何其他方式让它工作。

如有任何帮助,我们将不胜感激。

学生.txt

Nick J Cooley
324123
60
70
80
90
Jay M Hill
412254
70
80
90
100
$$$$$

assign6.h文件

#pragma once
#include <iostream>
#include <string>
using namespace std;
class assign6
{
public:
assign6(); // constructor
void displayStudents();


private:
struct Node
{ string firstName;
string midIni;
string lastName;
int idNum;
int sco1; //Test score 1
int sco2; //Test score 2
int sco3; //Test score 3
int sco4; //Test score 4
Node *next;
};
Node *head;
Node *headPtr;


};

assign6Imp.cpp//实现文件

#include "assign6.h"
#include <fstream>
#include <iostream>
#include <string>
using namespace std;

assign6::assign6() //constructor
{

ifstream inFile;
inFile.open("students.txt");

head = NULL;
head = new Node;
headPtr = head;
while (inFile.peek() != EOF) //reading in from file and storing in linked list
{

inFile >> head->firstName >> head->midIni >> head->lastName;
inFile >> head->idNum;
inFile >> head->sco1;
inFile >> head->sco2;
inFile >> head->sco3;
inFile >> head->sco4;

if (inFile != "$$$$$")
{
head->next = NULL;
head->next = new Node;
head = head->next;
}
}

head->next = NULL;

inFile.close();
}

void assign6::displayStudents()
{
int average = 0;
for (Node *cur = headPtr; cur != NULL; cur = cur->next)
{
cout << cur->firstName << " " << cur->midIni << " " << cur->lastName << endl;
cout << cur->idNum << endl;
average = (cur->sco1 + cur->sco2 + cur->sco3 + cur->sco4)/4;
cout << cur->sco1 << " " << cur->sco2 << " " << cur->sco3 << " " << cur->sco4 << " " << "average: " << average << endl;
}
}

最佳答案

也许您应该像这样逐行阅读。

const string END_OF_FILE_DELIM = "$$$$$";
ifstream inFile("students.txt");
string line;
while( getline(inFile,line) ){
cout << "line = " << line << endl;
if(line == END_OF_FILE_DELIM){
break;
}
else{
//create new Node with value = line;
}
}

关于C++ 链表 - 使用哨兵从文件中读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13148692/

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