没有得到我想要的输出

Posted

技术标签:

【中文标题】没有得到我想要的输出【英文标题】:Not getting the output I want 【发布时间】:2016-04-08 16:03:34 【问题描述】:

我正在尝试编写一个 c++ 程序来将包含数据(122X300 矩阵 - 制表符分隔的矩阵)的 txt 文件读入我的代码并让它显示。以下是我在广泛参考 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;


。 编辑的代码 - 输出数组是一个空矩阵。请帮忙。代码中有什么问题..正确编译。根据我在此处阅读的大量示例,尝试使用 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;

【问题讨论】:

也许您需要使用 F-10 键对其进行调试,以查看每一行代码到底发生了什么? @FirstStep 感谢您如此迅速地恢复...代码是否正确? ..你如何标记某人..这是我第一次在这个网站上..O.o oops! 如果已编译,则代码正确(无语法错误)。但是,问题可能出在变量和对象的值(逻辑错误)中。找到它的唯一方法是通过 Step(ping)-在您的代码上,使用 F-10 键逐个语句,同时检查途中每个变量的值 @FirstStep 呃 ​​F-10 键?那不是IDE特定的吗?如果他从命令行执行呢? @mwm314 如果我假设 VS 因为他没有提到呢? 【参考方案1】:

首先,在打印数组期间,您不会使用任何会导致一行数字的东西来分隔数据。您应该添加分隔符和换行符。

第二个也是最重要的:你尝试在数组还没有被填满的时候打印它的全部值。我相信您的意思是将打印放在与您的变量 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];
  

【讨论】:

@ZekeMarsh...我想你可能是对的。让我检查一次..将采纳您的建议.. 沼泽。我做了你提到的改变,现在我得到了有组织的输出,但是上面提到了另一个问题。你能看看吗。谢谢 @fattypanda 公平地说,我不完全理解你的意思 行计数器不会移动到下一行,而是在递增后继续在同一行。我> 。您仅获取部分数据并显示不正确的原因是您的 HEIGHTWIDTH 变量不包含实际代表矩阵高度和宽度的值。现在代码将只读取 6 个值 (3*2)。如果你能解决它会很好。 @ZekeMarsh ..我采用这些特定值是为了检查代码是否按照我上面发布的文本文件快照给出了我想要的输出。但事实并非如此。我也尝试了其他值。同样的问题。上图中显示的结果描述了 i 计数器应该按照增量后发布的文本图像继续到第二行,但它没有。它只是继续沿着第一行移动,并将其作为最终数组中的第二行。那是我似乎无法解决的问题。我希望我已经在某种程度上澄清了。 @fattypanda 啊,是的,现在我明白了。但是 operator>> 不是这样工作的,它只是从文件中读取下一个值。它没有考虑您的索引。如果您想这样做,则必须逐行读取,并且每行仅读取所需数量的值。我希望这能回答您的问题/疑虑。

以上是关于没有得到我想要的输出的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Azure Function 中的 ffprobe 获取输出

组合和聚合没有出现在输出 C++ 中

如何使用 C++ 以编程方式杀死进程?

使用“xlsxwriter”在 Excel 中写入时没有输出

SQL 中的 Pivot 语法错误,为啥我得到不正确的结果?

没有得到任何输出或错误ghostscript python