txt 文件中的值采用以下格式:
4
2 3
5 6
3 7
6 9
并且输出必须如下所示:
[2:3][5:6][3:7][6:9]
这是我的代码:
#include <iostream>
#include <stdio.h>
using namespace std;
class node {
public:
int info;
node* next;
node(){
next = NULL;
}
node (int value){
info = value;
next = NULL;
}
};
class list {
private:
node* head;
public:
list() { //Constructor
head = NULL;
}
void insert(int value){
if (head == NULL){
head = new node;
head -> info = value;
return;
}
node *temp = head;
while (temp) {
temp = temp -> next;
}
temp -> next = new node;
temp -> info = value;
}
void showlist(){
node* temp = head;
temp = temp -> next; //ignore first number in txt file
cout << "Liste \n" << endl;
while (temp){
printf ("%d", temp -> info);
//cout << temp -> info << endl;
temp = temp -> next;
}
}
~list() { //Destructor
node* temp = head;
while (head -> next != NULL) {
delete temp -> next;
temp -> next = NULL;
temp = temp -> next;
}
delete head -> next;
head -> next = NULL;
}
};
int main(int argc, const char * argv[]) {
list stone;
FILE* fp;
if (argc > 1)
fp = fopen(argv[1], "r");
else
fp = fopen("output.txt", "r");
if (!fp)
printf("Can't open file \n");
else {
int value, state;
int i = 0;
do {
state = fscanf(fp, "%d", &value);
if (state != EOF){
stone.insert(value);
}
stone.showlist();
}
while (state != EOF);
fclose (fp);
}
return 0;
}
没有错误,但如果我想执行它,我会得到一个崩溃报告。 一开始我忽略了请求的格式。
最佳答案
您的代码中有几个错误。我将列出几个明显的供您考虑:
- 你如何处理头?您在显示列表时忽略了头部,但它实际上包含第一个值。
- 每次尝试使用
node->next
时,都应保证该节点不为NULL - 正如第一个答案所指出的,在
while
循环之后,temp 为 NULL。解决方案可能是while (temp->next)
- 列表的析构函数不正确,您将遇到空列表的段错误
- 您使用
printf
和fgets
而不是iostream
,并且您使用了两个类。你更喜欢哪一种,C 还是 C++?选择一个你喜欢的。
关于c++ - 读取 txt 文件并将值放入列表中 (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16884043/