用C++读取文件中的字符
我已经创建了一个文件hangman\u word\u collection.txt,并将该文件的所有内容存储到字符串行中 现在我想在程序中使用行字符串,但行[0]中没有任何值,或者我不知道其中是否有内容 我是新手,请帮忙 代码如下:用C++读取文件中的字符,c++,C++,我已经创建了一个文件hangman\u word\u collection.txt,并将该文件的所有内容存储到字符串行中 现在我想在程序中使用行字符串,但行[0]中没有任何值,或者我不知道其中是否有内容 我是新手,请帮忙 代码如下: #include <iostream> #include <fstream> using namespace std; int main() { string line; ifstream myfile ("hangman_word_c
#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;
}
以及输出:
ActingRaringBackupCampusAcoite易于制造,并以原始方式装载。
0:
1:c
2:t
3:我
4:n
5:g
6:r
7:a
8:r
9:我
10:n
11:g
12:b
13:a
14:c
15:k
按以关闭此窗口。。。
当getline写入目标行失败时,您假定它不会修改该字符串中的内容,但会将该字符串置空,这在内部将用空字符替换字符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,则会看到字符串的实际大小,并且不会出现未定义的行为。如果担心性能,您可以将其存储在循环外的变量中,尽管这可能没有什么区别。当getline在写入目标行时失败时,您假设它不会修改该字符串中的内容,但会将该字符串置空,它在内部将字符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,则会看到字符串的实际大小,并且不会出现未定义的行为。如果您担心性能问题,可以将其存储在循环外的变量中,但很可能没有什么区别。如果您将最终cout行更改为coutit,则正在打印一些数字Hello World!ActingRaringBackupCampusAcoite易于制造,并以原始方式装载。0:0 1:99 2:116 3:105 4:110 5:103 6:114 7:97 8:114 9:105 10:110 11:103 12:98 13:97 14:99 15:107按此按钮可关闭此窗口…while循环首先有什么用途吗。您只需要文件中的最后一行??查看初始输出行之后有多少空间。至少有三个返回,这告诉我你的数据行后有空行,因此清除行缓冲区并硬终止它,正如CashCow下面所描述的。不是在这件事上,但我将用于一些多行文件,如果你将最后的cout行更改为cout,它将打印一些数字Hello World!ActingRaringBackupCampusAcoite易于制造,并以原始方式装载。0:0 1:99 2:116 3:105 4:110 5:103 6:114 7:97 8:114 9:105 10:110 11:103 12:98 13:97 14:99 15:107按此按钮可关闭此窗口…while循环首先有什么用途吗。您只需要文件中的最后一行??查看初始输出行之后有多少空间。至少有三次返回,这告诉我你的数据行后面有空行,因此清除你的行缓冲区并硬终止它,正如CashCow在下面描述的那样。不是在这件事上,但我将使用一些多行文件+1,这完全是个问题。不知道while循环是为了什么;也许是未来对多行单词列表的渴望。接得好。我也不知道它为什么在那里。我只是应用了可以工作的最小修复,即读取文件中的最后一行有效代码;cout@CashCow我的文件中有两条文本。但只有第二个是read+1,这完全是问题所在。不知道while循环是为了什么;也许是未来对多行单词列表的渴望。接得好。我也不知道它为什么在那里。我只是应用了可以工作的最小修复,即读取文件中的最后一行有效代码;cout@CashCow我的文件中有两条文本。但只有第二个被读取