当我从我的程序中读入一个包含5个单词的.txt文件并放入一个包含20个空格的数组时,我文件中的最后一个单词填满了我的数组中的最后16个位置。有什么想法吗?我输入的文件最多有20个单词。
newArray string[20];
if (inputFile) {
while (i<20) {
inputFile >> word;
if (word.length()<2) { //gets rid of single character words
i++;
}
else{
newArray[i] = word;
cout<<newArray[i]<< " ";
}
}
inputFile.close();
}
答案 0 :(得分:1)
您的问题尚不清楚,但我确信在您的循环中您可能仍在添加最后一个单词,因为您使用while循环的方式。完成添加单词后,您没有突破循环。如果你在文件的末尾,你应该突破循环,这应该可以解决你多次出现的最后一个单词的问题。
更好的方法是将整个文件读入1个字符串,并在数组中一次标记并添加每个单词。
如果这没有用,那么请提供完整的代码。另外,我不明白为什么你有i++ }
两次。这是一个错字吗?
希望这有帮助。
编辑:试试这段代码:
int i = 0;
string line;
ifstream myfile("names.txt");
if (myfile.is_open())
{
while ( getline (myfile,line) )
{
arr[i] = line;
i++;
}
myfile.close();
}
您不会在
之后添加任何行答案 1 :(得分:1)
如果我错了,请纠正我,但为什么你需要一个20个字符串的数组来读5个字?下面的代码是从文件读取到数组的标准方法。
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
string myArray[20];
ifstream file("file.txt");
string word;
if(file.is_open())
{
int i = 0;
while(file>>word)
{
if(word.length()<2)
continue;
else
{
myArray[i] = word;
i++;
}
}
}
}
附录:编辑将读取所有单词并在没有更多文本时停止。你原来的问题是文件流在读完所有5个单词后都没有读取任何内容,因此word
保持不变,导致它填满数组。