c++ - 从文本文件中读取单词和数字(C++)
问题描述
我有这样格式的文本:
NAME(char) ID(int) MARK(int)
例如:
JOSH 1234 100
SARA 5678 90
..
..
我想阅读此文件,将参数输入到学生结构中,然后将其打印在屏幕上(您可以在代码中看到)。
我的问题是我似乎无法正确读取名称,并且这一行:
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
如果你使用 an而不是 C 字符串会容易得多。std::vector
此外,如果您使用 an而不是普通的 C 数组,它也会更容易。
推荐阅读
- c - c 文件的一个目录,它必须首先在 funcs/ 目录中不带 main 编译,& c 文件带有 main 函数和公共头文件在单独的目录中
- svg - Tremap 中的 D3 正确文本()
- r - 从 Shiny 模块中读取反应元素
- sql - 从 reactjs 到 asp.netCore api 的 PUT 请求的 CORS 问题
- javascript - 将一个对象的属性作为键传递给另一个对象
- visual-studio-code - VSCode:使用 URI 在内存中创建文档以进行自动化测试?
- web-scraping - 它如何使用 urllib 和 BeautifulSoup 从网站上抓取文本?我无法获取“b”标签后面的文本
- c - 无法通过c中的strtok函数获取数组中的字符串
- reactjs - React modal hidden.bs.modal 事件不起作用?
- webstorm - 为什么 WebStorm 突出显示项目窗格中的所有文件?