从文本文件(c++)中读取单词和数字
Read words and numbers from text file (c++)
我有一个格式为的文本
NAME(char) ID(int) MARK(int)
例如:
JOSH 1234 100
SARA 5678 90
..
..
我想读取这个文件,将params输入到学生结构中,然后将其打印在屏幕上(你可以在代码中看到)。
我的问题是,我似乎读不清这个名字,这句话:while (file >> id >> word >> grade)
-正在获得正确的id
和mark
,但变量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数组,也会更容易。
相关文章:
- 从字符串变量中逐字符读取单词
- 是否可以在文本文件中找到最长单词的长度,并在同一个文本文件中读取,只需 1 个 while 循环?
- 如何从文件中读取单词,将它们分配给数组并分析其内容?
- 我们如何重新制作程序以打开xml文件并在价格单词之后读取百分比值并更改此值
- C++读取大文件并将其保存到字符串中,然后删除特定的随机单词
- 我需要C++读取字符串数组中每个单词的第一个字母
- 如何读取文件的内容,如果文件中的单词重复,请将它们添加到列表中?
- 如何读取特定单词之间的文本文件?
- 无法读取文本文件中的每个单词
- C 读单词读取文件,而没有任何符号
- C :按行读取txt文件的读数,单词用单词读取,每行的单词不均匀
- 从文件重载运算符>>读取单词
- 从文本文件(c++)中读取单词和数字
- 读取单词并将它们存储到数组中
- 如何从 std::istringstream 读取单词而不通过 >> 分配给 tmp 变量?
- 从字符串中读取单词C++,同时忽略空格、数字和符号
- 为什么我的ifstream程序以错误的顺序读取单词
- 从文件中逐字符读取单词列表,并将其存储在数组中
- 从输入中读取单词序列。使用"Quit"终止,按输入顺序打印,不要打印两次单词。
- 从一个c++文本文件中读取单词(奇怪的字符)