我正在尝试从文本文件填充2D char数组,如下所示:
Bob
Jill
Mike
Steven
并且我不确定如何在每行中使用不同长度的字符。这是我的代码:
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main(){
char names[4][7];
string fileName = "names.txt";
ifstream inFile(fileName);
while(!inFile.eof()){
for(int i=0; i<4; i++){
for(int j=0; j<7; j++){
inFile.get(names[i][j]);
}
}
}
for(int i=0; i<4; i++){
for(int j=0; j<7; j++){
cout << names[i][j];
}
}
return 0;
}
这将打印
Bob
Jill
Mike
Steven????????
每个?只是一个胡言乱语的人物。我很确定这种情况正在发生,因为文本文件的每一行都不是7个字符长,所以它试图填充数组的其余部分。这样做的正确方法是什么?我认为while(!inFile.eof()){}
会阻止它。
答案 0 :(得分:1)
由于您使用的是C ++,因此您需要使用string
和vector
。
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
ifstream file("file");
string line;
vector<string> names;
if (file.is_open())
while (getline(file, line))
names.push_back(line);
for (auto it = names.begin(); it != names.end(); ++it)
cout << *it << '\n';
return 0;
}
答案 1 :(得分:0)
您可以通过在此处添加大括号来突出显示C-array和固定循环大小的问题:
for(int i=0; i<4; i++){
std::cout << '{';
for(int j=0; j<7; j++){
cout << names[i][j];
}
std::cout << '}';
}
将打印:
{Bob
Jil}{l
Mike
}{Steven<garbage>}{<garbage>}
确实,您的名字存储如下:
char names[4][7] {
{'B', 'o', 'b','\n', 'J', 'i', 'l'},
{'l','\n', 'M', 'i', 'k', 'e','\n'},
{'S', 't', 'e', 'v', 'e', 'n', <garbage>},
{<garbage>}
};
请参阅stackptr's answer进行更正。