从文本文件(c++)中读取单词和数字

Read words and numbers from text file (c++)

本文关键字:读取 单词 数字 文本 文件 c++      更新时间:2023-10-16

我有一个格式为的文本

NAME(char) ID(int) MARK(int)

例如:

JOSH 1234 100
SARA 5678 90
..
..

我想读取这个文件,将params输入到学生结构中,然后将其打印在屏幕上(你可以在代码中看到)。

我的问题是,我似乎读不清这个名字,这句话:while (file >> id >> word >> grade)-正在获得正确的idmark,但变量word(即char *)中的名称正在获得十六进制地址,如0x000a8520。

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
struct Student
{
int id;
char * name = new char [25];
int mark;
};
int makeStudentsArr(Student * ptr, char * address);
void printArr(Student * ptr, int number);
int main() {
char * address = new char[26];
Student * myptr = new Student[50];
cin >> address;
int count;
count = makeStudentsArr(myptr, address);
printArr(myptr, count);
system("pause");
return 0;
}
int makeStudentsArr(Student * ptr, char * address) {
ifstream file;
file.open(address);
char * word = new char[25];
int id,grade;
int index = 0;
while (file >> id >> word >> grade) {
ptr[index].id = id;
ptr[index].name = word;
ptr[index].mark = grade;
index++;
}
return index;
}
void printArr(Student * ptr, int number) {
for (int i = 0;i < number;i++) {
cout << "name: " << (ptr + i)->name << " id: " << (ptr + i)->id << " mark: " << (ptr + i)->mark << endl;
}
}

更改此项:

ptr[index].name = word;

到此:

strcpy(ptr[index].name, word);

因为第一个复制指针,而第二个复制实际字符串(指针指向的位置)!


但是,您的程序没有delete您用new动态分配的内存,这会导致内存泄漏。

如果使用std::string而不是C字符串,则会容易得多。此外,如果使用std::vector而不是普通的C数组,也会更容易。