我正在尝试编写一个c ++程序来读取包含数据的txt文件(122X300矩阵 - 制表符分隔矩阵)到我的代码中并让它显示出来。以下是我在本网站上广泛引用google和许多类似问题后编写的代码。在运行代码时,我没有得到任何错误,但它确实给了我巨大的数字列表,我似乎无法理解。以下是代码:任何帮助都会很棒。我不知道我哪里出错了。谢谢。
在考虑@ZekeMarsh下面的评论之后发生了一些变化,现在的问题是我的文本数据是这样的:
我得到的输出是:
行计数器不会移动到下一行,而是在递增后继续在同一行....不知道为什么。修改后的代码如下:
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
using namespace std;
int main(){
int HEIGHT = 3;
int WIDTH = 2;
int array_req[HEIGHT][WIDTH];
string userinputprompt, filename;
userinputprompt = "Data Filename: ";
cout<<userinputprompt<<endl;
getline(cin,filename);
ifstream inputfile;
inputfile.open(filename.c_str());
for(int i=0; i<HEIGHT; i++)
{
for(int j=0; j<WIDTH; j++)
{
/*if(!(inputfile>>array_req[i][j]))
{
cerr<<"Error";
break;
}
else if(!inputfile) // its error.. , can use a cerr here...
{
cerr<<"Error";
break;
}
else*/
inputfile>>array_req[i][j];
cout<<i<<","<<j<<"-->"<<array_req[i][j]<<endl;
}
/* This is not needed, read above comment
else
{
inputfile >> array_req[i][j];
}*/
}
for(int p=0; p<HEIGHT; p++)
{
for(int q=0; q<WIDTH; q++)
{
cout<<array_req[p][q]<<" ";
}
cout<<"\n";
}
inputfile.close();
getchar();
return 0;
}
。 EDITED CODE - 输出数组是一个空矩阵。请帮忙。代码有什么问题..编译正确。尝试使用getline和stringstream逐行读取,基于我在这里阅读的很多例子......仍然无法正常工作。
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
#include <sstream>
#include <stdlib.h>
const int HEIGHT = 3;
const int WIDTH = 4;
const int BUFFSIZE = 10000;
using namespace std;
int main(){
int array_req [HEIGHT][WIDTH];
char buff[BUFFSIZE];
string userinputprompt, filename;
userinputprompt = "COLORDATA FILENAME: ";
cout<<userinputprompt<<endl;
getline(cin,filename);
ifstream inputfile;
stringstream ss;
inputfile.open(filename.c_str());
for (int i=0; i<HEIGHT; i++)
{
inputfile.getline(buff,BUFFSIZE,'\n');
ss<<buff;
for(int j=0;j<WIDTH; j++)
{
ss.getline(buff,1000,'\n');
array_req[i][j]=atoi(buff);
}
ss<<"";
ss.clear();
}
for(int p=0; p<HEIGHT; p++)
{
for(int q=0; q<WIDTH; q++)
{
cout<<array_req[p][q]<<" ";
}
cout<<"\n";
}
inputfile.close();
getchar();
return 0;
}
答案 0 :(得分:0)
首先,在打印数组期间,您不会使用任何会导致数字的数据来划分数据。您应该添加分隔符和换行符。
第二个也是最重要的一点:你尝试打印尚未填充的数组的全部值。我相信你的意思是将打印放在与变量 i 一起使用的循环之外。现在,您正在未填充数组的位置打印垃圾。
编辑:这里只是阅读部分,因为我相信这只是你要找的东西:
for (int i = 0; i < HEIGHT; ++i)
{
std::string tmpString;
std::getline(inputfile, tmpString);
std::stringstream ss(tmpString);
for(int j=0;j < WIDTH; ++j)
{
ss >> array_req[i][j];
}
}