1

我创建了一个文件 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;
}

和输出:

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...
4

1 回答 1

6

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;
       }
    }
}

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

于 2013-01-09T11:09:08.810 回答