我创建了一个文件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...
答案 0 :(得分: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;
}
}
}
请注意,在像79这样的幻数中进行硬编码是不好的做法。如果你放了line.size()
而不是你会看到字符串的实际大小,并且没有未定义的行为。如果您担心性能,可以将它存储在循环外的变量中,尽管它可能没什么区别。