gpt4 book ai didi

c++ - 如何在 C++ 中使用 "sscanf"?

转载 作者:行者123 更新时间:2023-11-30 05:29:58 27 4
gpt4 key购买 nike

我正在尝试将我的一个旧程序从 C 移植到 C++。我在想出代码来完成解析文件的每一行(用分号分隔)的任务时遇到了麻烦。我知道要将每一行读入一个字符串,我应该使用 std::getline() 并且还阅读了涉及 stringstream 的解决方案。但是,就将行解析为单个变量而言,我迷路了。以前,在 C 中,我使用的是 sscanf()。这是我的旧代码...

void loadListFromFile(const char *fileName, StudentRecordPtr *studentList) {
FILE *fp; // Input file pointer
StudentRecord student; // Current student record being processed
char data[255]; // Data buffer for reading line of text file

// IF file can be opened for reading
if ((fp = fopen(fileName, "r")) != NULL) {
// read line of data from file into buffer 'data'
while (fgets(data, sizeof(data), fp) != NULL) {
// scan data buffer for valid student record
// IF valid student record found in buffer
if (sscanf(data, "%30[^,], %d, %d, %d, %d, %d, %d, %d", student.fullName, &student.scoreQuiz1,
&student.scoreQuiz2, &student.scoreQuiz3, &student.scoreQuiz4, &student.scoreMidOne,
&student.scoreMidTwo, &student.scoreFinal) == 8) {
// Process the current student record into the student record list
processStudentToList(student, studentList);
}
}
}
else {
// Display error
puts("**********************************************************************");
puts("Could not open student record file.");
puts("**********************************************************************");
}
// Close file
fclose(fp);
}

还有我当前的代码,由于我被困在这个问题上,所以它是不完整的。

void Database::loadFromFile(const string filename) {
ifstream file(filename);
string data;
if ( file.is_open() ) {
cout << "Sucessfully loaded " << filename << ".\n" << endl;
while (getline(file, data)) {
//
}
}
else {
cerr << "Error opening input file.\n" << endl;
}
}

如果对与此方法等效的 C++ 有任何见解,我将不胜感激。

编辑:这被标记为重复的帖子没有回答我的问题。该解决方案不考虑分号(或任何字符)分隔的字符串。

最佳答案

我相信这就是您所追求的: What should I use instead of sscanf?

#include <sstream>

std::ifstream file( fileName );

if ( file ) { //Check open correctly
std::stringstream ss;
ss << file.getline();
int a, b, c;
ss >> a >> b >> c;
}

关于c++ - 如何在 C++ 中使用 "sscanf"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36213659/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com