2016-04-08 13 views
-1

データを含むtxtファイル(122X300マトリックス - タブ区切りのマトリックス)を自分のコードに読み込んで表示するためのC++プログラムを作成しようとしています。以下は私がこのサイトでgoogleと多くの同様の質問に広範囲に言及した後に書いたコードです。コードを実行すると、エラーは発生しませんが、何の意味もない数字の膨大なリストが表示されます。以下はコードです:どんな助けも素晴らしいでしょう。私はどこが間違っているのか分かりません。ありがとう。私はほしい出力を得ていません

が@ZekeMarshで以下のコメントを考慮した後にいくつかの変更をDID、問題は今、私のテキストデータが似ているということです。

Output of Code

Data Matrix Snapshot

私は取得しています出力はこれです

行カウンタは次の行に移動せず、インクリメント後も同じ行に続きます。理由は考えられません。変更されたコードは以下の通りです:

#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

@FirstStepこれをすばやく元に戻していただきありがとうございます...コードは正しいですか? ..あなたは誰かをタグ付けしています...このサイトで私の初めてのことを... .... O.o oops! – fattypanda

+0

コンパイルした場合、コードは正しい(構文エラーなし)。しかし、問題は変数とオブジェクトからの値(論理エラー)にある可能性があります。それを見つけるための唯一の方法は、ステップ(ping)です - あなたのコード、文ごとのステートメントはあなたの道にあるすべての変数の値をチェックしながらF-10キーを使用して –

答えて

0

まず、あなたの配列の印刷時に、あなたは数字の行になります何でもあなたのデータを区切るされていません。区切り文字と改行を追加する必要があります。

第2の最も重要なことは、配列の完全な値がまだ塗りつぶされていないときに印刷することです。私はあなたの変数で動作するループの外側に印刷を置くことを意味すると信じています私はです。今度は、配列がまだ埋め込まれていない場所にゴミを印刷しています。たぶん、あなたは正確にすべての行に何が起こっているかを確認するためにF-10のキーを使用してデバッグする必要がある

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]; 
    } 
} 
+0

@ZekeMarsh ...私はあなたが正しいかもしれないと思います。私は一度チェックしてみましょう。あなたのアドバイスを取り入れます。 – fattypanda

+0

マーシュ。私はあなたが言及した変更を行った、今私は上記の別の問題を組織化された出力を得ている。あなたは一見を持てますか?ありがとう – fattypanda

+0

@fattypanda公正であるように、私はあなたが何を意味するかを完全に理解していません_行カウンタは次の行に移動せず、インクリメント後も同じ行に続きます。 ** HEIGHT **および** WIDTH **変数が実際に行列の高さと幅を表す値を保持しないため、部分データのみを取得して正しく表示されない理由です。コードは6つの値(3 * 2)だけを読み込みます。あなたがそれを修正するなら、それは良いことになるでしょう。 – ZekeMarsh

関連する問題