没有得到我想要的输出

时间:2016-04-08 16:03:35

标签: c++ arrays file text import

我正在尝试编写一个c ++程序来读取包含数据的txt文件(122X300矩阵 - 制表符分隔矩阵)到我的代码中并让它显示出来。以下是我在本网站上广泛引用google和许多类似问题后编写的代码。在运行代码时,我没有得到任何错误,但它确实给了我巨大的数字列表,我似乎无法理解。以下是代码:任何帮助都会很棒。我不知道我哪里出错了。谢谢。

在考虑@ZekeMarsh下面的评论之后发生了一些变化,现在的问题是我的文本数据是这样的:

Data Matrix Snapshot

我得到的输出是:

Output of Code

行计数器不会移动到下一行,而是在递增后继续在同一行....不知道为什么。修改后的代码如下:

#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;

}

1 个答案:

答案 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];
  }
}