我正在尝试从文本文件中读取。我相信打开文件的语法是:
ifstream file("Info.txt");
file.open("Info.txt");
如果文件格式化为:
戴夫 加布8 Ryan 10 Green
我可以创建3个这样的变量吗?
string name;
int age;
string color;
然后从这样的文件中读取信息?
file >> name >> age >> color;
如果文件中的某些行没有年龄和/或颜色,该文件如何读取?
答案 0 :(得分:0)
我当然不太熟悉c ++字符串函数,但这是我的尝试:
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main()
{
std::ifstream fin("Info.txt");
if(!fin)
{
std::cout << "Error opening the file" << std::endl;
return(1);
}
char* line_cstr = new char[1000];
char name[1000];
int age;
char color[1000];
char* rest = new char[1000];
fin.getline(line_cstr, 1000);
while ( strlen(line_cstr) != 0 ) {
int numTokensRead = sscanf(line_cstr, "%s %d %s %1000[0-9a-zA-Z ]s", name, &age, color, rest);
if ( numTokensRead >= 3 ) {
std::cout <<"name: " << name <<", age: " << age <<", color: " << color <<"\n";
strcpy(line_cstr, rest);
}
// do some error checking for incomplete entries
else if (numTokensRead == 1) {
if ( strlen(name) == strlen(line_cstr) ) {
// we're done!
return 0;
}
// skip the first token
sscanf(line_cstr, "%*s %1000[0-9a-zA-Z ]s", line_cstr);
}
else if (numTokensRead == 2) {
// skip the first 2 tokens
sscanf(line_cstr, "%*s %*d %1000[0-9a-zA-Z ]s", line_cstr);
}
}
}
代理以下文本文件:
Mike 25 Red Dave Gabe 8 Green 10 Green
$ ./a.out
name: Mike, age: 25, color: Red
name: Gabe, age: 8, color: Green
我不是100%确定这会处理所有可能的错误情况 - 连续两个整数,浮点数,多行等 - 但它应该让你开始。