我正在尝试按列读取文件。主要功能是我的文件应该显示所有值的列之一。 我试图用矢量来做。
void search(){
const int COLUMNS = 4;
vector< vector <int> > data;
string filename = "bla.txt";
ifstream ifile(filename.c_str());
if (ifile.is_open()) {
int num;
vector <int> numbers_in_line;
while (ifile >> num) {
numbers_in_line.push_back(num);
if (numbers_in_line.size() == COLUMNS) {
data.push_back(numbers_in_line);
numbers_in_line.clear();
}
}
}
else {
cerr << "There was an error opening the input file!\n";
exit(1);
}
//now get the column from the 2d vector:
vector <int> column;
int col = 2;//example: the 2nd column
for (int i = 0; i < data.size(); ++i) {
column.push_back(data[i][col - 1]);
cout << column[i] << endl;
}
ifile.close();
}
我的文件如下:
John 1990 1.90 1
Peter 1980 1.88 0
...
此代码编译,但我没有在控制台中显示任何值。当我尝试调试最后一行时,它不会被缓存,所以我猜他们什么都不做?
答案 0 :(得分:2)
ApiInterface apiService = ApiClient.getmRetrofitClient().create(ApiInterface.class); Call<RestResponse> call = apiService.getCountry(); call.enqueue(new Callback<RestResponse>() { @Override public void onResponse(Call<RestResponse> call, Response<RestResponse> response) { List<Result> results = response.body().getResult(); } @Override public void onFailure(Call<RestResponse> call, Throwable t) { Log.e("onFailure", t.getMessage()); } });
永远不会输入循环,因为while (ifile >> num) {
是num
,输入行的第一个元素是int
,不能解释为John
,所以{ {1}}设置为错误状态,循环条件立即为false。
干净的解决方法是首先使用int
读取整行,然后将结果ifile
标记,例如使用std::getline
。
该标记化产生的单个std::string
令牌可以转换为具有std::istringstream
等功能的适当类型。
答案 1 :(得分:1)
一步一步地确保每一步都是正确的。
您可以轻松找到每个步骤的良好解决方案。