【发布时间】:2018-04-11 02:52:58
【问题描述】:
所以我创建了一个链接列表,它应该从文件中打印出姓名、年龄、专业和 GPA。
当我在 Qt Creator 中运行它时似乎可以正常工作,但是当我尝试在 cloud9 中运行它时,它似乎并没有成功。
例如,findStudent 函数没有找到学生,而是显示为“未找到学生”。
它似乎也不喜欢我格式化它的方式,节点中的所有内容(姓名、年龄、专业、gpa)看起来都打印在彼此之上。
它会这样做,除非我将每个信息的信息标记到最右边,但这并不是我真正想要的,因为在 cloud9 之外它看起来并不那么好。
studentlist.h:
#ifndef STUDENTLIST_H
#define STUDENTLIST_H
#include <iostream>
#include <iomanip>
#include <fstream>
#include <stdlib.h>
using namespace std;
struct StudentNode{
string name;
int age;
string major;
double gpa;
StudentNode *link;
};
void createLinkedList(StudentNode *&head);
void findStudent(StudentNode *&head, string find);
void removeStudent(StudentNode *&head);
double calculateGPA(StudentNode *&head);
void printList(StudentNode *&head);
#endif // STUDENTLIST_H
studentlist.cpp:
#include "studentlist.h"
void createLinkedList(StudentNode *&head){
StudentNode *last = NULL;
StudentNode *newNode = NULL;
fstream inFile;
inFile.open("inFile.txt");
if (inFile.fail()){
cout << "file failed to open" << endl;
exit(1);
}
else{
string newLine;
getline(inFile, newLine);
newNode = new StudentNode;
getline(inFile, newNode->name);
inFile >> newNode->age;
getline(inFile, newLine);
getline(inFile,newNode->major);
inFile >> newNode->gpa;
newNode->link = NULL;
head = newNode;
last = newNode;
while(!inFile.eof()){
getline(inFile, newLine);
getline(inFile, newLine);
newNode = new StudentNode;
getline(inFile, newNode->name);
inFile >> newNode->age;
getline(inFile, newLine);
getline(inFile,newNode->major);
inFile >> newNode->gpa;
newNode->link = head;
head = newNode;
}
}
inFile.close();
}
void findStudent(StudentNode *&head, string find){
StudentNode *current = head;
if(current->link == NULL){
cout << "Student Not Found" << endl;
}
else if(current->name == find){
cout << "Student Found:" << endl;
cout <<left<< setw(15);
cout <<current->name <<setw(7);
cout << current->age<<setw(15);
cout << current->major << setw(4);
cout << current->gpa;
}
else{
findStudent(current->link, find);
}
}
void removeStudent(StudentNode *&head){
StudentNode *temp_ptr;
temp_ptr = head->link;
cout << "Front Node Deleted:" << endl;
cout << left << setw(15);
cout << "Name" <<setw(7) << "Age" <<setw(15)
<< "Major" <<setw(4) << "GPA" <<setw(15) << endl;
cout <<head->name <<setw(7);
cout << head->age<<setw(15);
cout << head->major << setw(4);
cout << head->gpa;
delete head;
head = temp_ptr;
temp_ptr = NULL;
}
double calculateGPA(StudentNode *&head){
StudentNode *current = head;
double calculatedGPA;
int num_students=0;
while(current!= NULL){
calculatedGPA += current->gpa;
current = current->link;
num_students++;
}
cout << fixed << setw(3) << setprecision(2);
return calculatedGPA/num_students;
}
void printList(StudentNode *&head){
StudentNode *current = head;
cout << left << setw(15) << "Name"
<<setw(7)<<"Age" << setw(15)<< "Major"
<< setw(7) << "GPA" << endl;
while(current!= NULL){
cout << setw(15) << current->name<< setw(7);
cout << current->age << setw(15);
cout << current->major << setw(7);
cout << current->gpa << endl;
current = current->link;
}
}
main.cpp:
#include <iostream>
#include "studentlist.h"
using namespace std;
int main(int argc, char *argv[])
{
StudentNode *head;
createLinkedList(head);
printList(head);
cout << endl;
findStudent(head, "Anna White");
cout << endl << endl;
removeStudent(head);
cout << endl << endl;
cout << "Updated Student List: " << endl;
printList(head);
cout << endl;
cout << "GPA: " << calculateGPA(head) << endl;
return 0;
}
QT 中的输出:
Name Age Major GPA
Paul Johnson 18 Physics 3.7
Anna White 19 English 3.2
John Smith 20 Math 3.5
Anthony Rogers 21 Art 3.1
Cynthia Morris 24 History 3.6
Student Found:
Anna White 19 English 3.2
Front Node Deleted:
Name Age Major GPA
Paul Johnson 18 Physics 3.7
Updated Student List:
Name Age Major GPA
Anna White 19 English 3.2
John Smith 20 Math 3.5
Anthony Rogers 21 Art 3.1
Cynthia Morris 24 History 3.6
GPA: 3.35
Press <RETURN> to close this window...
在 Cloud9 中输出而不重新格式化:
Name Age Major GPA
3.7 cs
3.2 lish
3.5
3.1
3.6
Student Not Found
Front Node Deleted:
Name Age Major GPA
3.7 ysics
Updated Student List:
Name Age Major GPA
3.2 lish
3.5
3.1
3.6
GPA: 3.35
cloud9 中重新格式化的输出:
Name Age Major GPA
Paul Johnson 18 Physics 3.7
Anna White 19 English 3.2
John Smith 20 Math 3.5
Anthony Rogers 21 Art 3.1
Cynthia Morris 24 History 3.6
Student Not Found
Front Node Deleted:
Name Age Major GPA
Paul Johnson 18 Physics 3.7
Updated Student List:
Name Age Major GPA
Anna White 19 English 3.2
John Smith 20 Math 3.5
Anthony Rogers 21 Art 3.1
Cynthia Morris 24 History 3.6
GPA: 3.35
【问题讨论】:
标签: c++ qt-creator cloud9