提问人:Vlad Chuklin 提问时间:11/4/2023 最后编辑:genpfaultVlad Chuklin 更新时间:11/4/2023 访问量:68
使用没有字符串且没有 structs/_p 的文本文件 != nullptr“错误
Work with text files without string and without structs/_p != nullptr" error
问:
我希望按顺序从文本文件中读取数据
<last name>,<group_number>,<score1>,<score2>,<score3>;<last name>...
...等等。学生人数不详。字符串和结构不能在程序中使用。阅读后,我会检查有债务的学生(分数低于 3)。我写了代码,但它不能正常工作。将不需要的内容写入控制台和文件。
并弹出一个错误,代码为_p != nullptr“错误:
代码有什么问题?
功能:getSize
int getSize(const char* filename) {
ifstream file(filename); // Відкриття файлу для читання
if (!file.is_open()) {
cout << "Не вдалось відкрити файл!" << endl;
return 0;
}
int fileSize = 0; // Змінна для зберігання розміру файлу
while (!(file.eof())) { // Цикл, поки не досягнуто кінця файлу
char currentChar; // Змінна для зберігання поточного символу
file.get(currentChar); // Читання символу з файлу
fileSize++; // Збільшення розміру файлу на один
}
file.close();
return fileSize;
}
功能:read_and_write_data_1()
void read_and_write_data_1() {
const char* namefile1 = "results.txt";
ofstream outfile(namefile1);
if (!outfile.is_open()) { // Перевірка, чи файл відкритий
cout << "Не вдалось відкрити файл для запису " << endl;
return;
}
const char* namefile = "students.txt";
int fileSize = getSize(namefile); // Отримання розміру файлу
ifstream infile; // Створення об'єкта для читання з файлу
infile.open(namefile); // Відкриття файлу
char* str = new char[fileSize]; // Створення масиву символів для зберігання даних з файлу
infile.getline(str, fileSize); // Читання даних з файлу у масив
char* reader;
char* next_token1{};
reader = strtok_s(str, ";,", &next_token1);
while (reader) {
char surname[12];
int group_number, grade1, grade2, grade3;
strncpy_s(surname, sizeof(surname), reader, _TRUNCATE);
reader = strtok_s(nullptr, ",", &next_token1);
group_number = atoi(reader);
reader = strtok_s(nullptr, ",", &next_token1);
grade1 = atoi(reader);
reader = strtok_s(nullptr, ",", &next_token1);
grade2 = atoi(reader);
reader = strtok_s(nullptr, ",", &next_token1);
grade3 = atoi(reader);
bool has_debt = (grade1 < 3) && (grade2 < 3) && (grade3 < 3);
if (has_debt) {
cout << surname << endl;
outfile << surname << endl;
}
}
infile.close();
outfile.close();
delete[] str;
}
答: 暂无答案
评论
while(!feof(file))
总是错的get()
std::filesystem::file_size()
istream::getline()
std::getline()
getline
','
';'
std::string
find()
strtok()
std::stringstream
std::string
operator>>
std::getline