用c ++从文件中读取char

1 c++

我创建了一个文件hangman_word_collection.txt并将所有文件内容存储到字符串行中.

现在我想在我的程序中使用行字符串,但line[0]没有任何值,或者我不知道它是否有内容.

我是新手,请帮忙.

这是代码:

#include <iostream>
#include <fstream>

using namespace std;

int main() {
string line;

ifstream myfile ("hangman_word_collection.txt");
if (myfile.is_open()) {
    while (myfile.good()) {
        getline (myfile,line);
        cout << line << endl;
    }
}
for(int i=0; i <= 79; i++) {
    cout << "\n" << i;
    cout << ":" << line[i];
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)

并输出:

actingraringbackupcampusdacoiteasilyfabricgardenhackediceboxprimeralwaysupload.


0:
1:c
2:t
3:i
4:n
5:g
6:r
7:a
8:r
9:i
10:n
11:g
12:b
13:a
14:c
15:k
Press <RETURN> to close this window...
Run Code Online (Sandbox Code Playgroud)

Cas*_*Cow 5

如果getline写入目标失败,line则假设它不会修改该字符串中的内容,但它会消隐字符串,该字符串在内部用空字符替换字符0.

其余的是未定义的行为,因为您正在读取逻辑字符串末尾的字符.

要解决此问题,请将代码更改为;

string line;

ifstream myfile ("hangman_word_collection.txt");
if (myfile.is_open())
{
    while (myfile.good())
    {
       std::string temp;
       if( getline( myfile, temp ) )
       {
           temp.swap( line );
           cout <<line<<endl;
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,在像79这样的幻数中进行硬编码是不好的做法.如果你已经放置了,line.size()你会看到字符串的实际大小,并且没有未定义的行为.如果你担心性能,你可以将它存储在循环外的变量中,尽管它可能没什么区别.