2016-04-08 2 views
-1

Я пытаюсь написать программу на C++, чтобы прочитать файл txt, содержащий данные (матрица с матрицей матрицы 122X300), в мой код и получить его для отображения. Ниже приведен код, который я написал после многократного обращения к Google и многих подобных вопросов на этом сайте. При запуске кода я не получаю никаких ошибок, однако он дает мне огромный список чисел, которые, по моему мнению, не имеют никакого смысла. Ниже приведен код: Любая помощь будет отличной. Я не знаю, где я ошибаюсь. Благодарю.Не получать выходные данные

DID некоторые изменения после рассмотрения комментарий ниже по @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; 

}

+0

Может быть, вам нужно отлаживать его с помощью F-10 ключ, чтобы увидеть, что именно происходит в каждой строке кода? –

+0

@FirstStep Спасибо, что вернулись к этому так быстро ... это правильный код? .. как ты помечаешь кого-то .. в первый раз на этом сайте .... О.оооо! – fattypanda

+0

Если он скомпилирован, тогда код будет правильным (No Syntax Error). Однако проблема может быть в значениях от/до переменных и объектов (Логическая ошибка). Единственный способ найти это - шаг (ping) - над вашим кодом, оператором с помощью ключа F-10 при проверке значения каждой переменной на вашем пути –

ответ

0

Прежде всего во время печати вашего массива, не ограничивающий ваших данных ничего, что приведет к строке чисел. Вы должны добавить разделитель и разрывы строк.

Во-вторых, самое главное: вы пытаетесь напечатать полное значение массива, пока оно еще не заполнено. Я полагаю, вы хотели поставить печать за пределы цикла, которая работает с вашей переменной i. Теперь вы печатаете мусор в тех местах, где массив еще не был заполнен.

Edit: Вот только чтение часть, как я считаю, что это только то, что вы ищете:

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

Marsh. Я сделал изменения, которые вы упомянули, теперь я получаю организованный выход, но еще одна проблема, упомянутая выше. Не могли бы вы посмотреть. Спасибо – fattypanda

+0

@fattypanda Справедливости ради, я не совсем понимаю, о чем вы говорите _ Счетчик строк не переходит к следующей строке, а продолжает в той же строке после инкремента ._. Причина, по которой вы получаете только частичные данные и отображается неправильно, потому что ваши ** HEIGHT ** и ** WIDTH ** переменные не содержат значений, которые фактически представляют высоту и ширину вашей матрицы. Теперь код будет читать только 6 значений (3 * 2). Если вы исправите это, это будет хорошо. – ZekeMarsh

Смежные вопросы