2015-07-27 2 views
-1

Я пытаюсь читать текстовый файл по строкам, а затем читать каждый столбец как вектор, но когда я пытаюсь выполнить первый столбец cout, он показывает нули, т. Е. Не читает файл правильно.could'nt читает правильные значения вектора, полученного из файла

int main(void) 
{ 


    ifstream myfile ("data1.txt"); 
    string line; 


    if (myfile.is_open()) 
    { 

     int ln=1; 

    while (getline (myfile,line)) 
    {  
     if(ln==1){ln++; continue;} 
     istringstream iss(line); 
     string word; 
     vector<double> column; 
     int w=1; 
     while(iss >> word) 
     { 

      //double dw=atof(Form("%s",word));  
      column.push_back(atof(Form("%s",word))); 
      cout<<column[0]; 

     w++; 


     } 

    ln++; 
    cout<<"\n"; 
    } 
    myfile.close(); 
    } 
    //else 
    else cout<<"Unable to open file"; 
    cout<<"\n"; 
    return ; 
    }enter code here 
+0

Вы отлаживали его? Правильно ли слово 'word'? Что такое 'Form'? - возвращает ли оно правильное значение? – marcinj

+0

да «marcinj», когда я бежал cout << слово; без определения вектора он дал мне те же значения, что и в текстовом файле. Но с вектором он не делает. – user4823966

ответ

0

push_back добавляет элемент в качестве последнего элемента вектора в то время как columns[0] всегда относится к первому элементу вектора.

ли первый элемент 0

Есть еще одна проблема?

(Пожалуйста, объясните, что Form, приведет пример входного файла и вывод в командной строке)

+0

yes Первый элемент первого столбца равен нулю. Да, есть еще одна проблема, я хочу использовать эти векторы при построении графиков с использованием корневой структуры. Форма используется для чтения слова как строки, а также потому, что atof принимает 1 параметр для преобразования строки в double. Я хочу, чтобы мой текст сохранялся как двойной в векторе. – user4823966

+0

Но почему бы не использовать 'word.c_str()', который является стандартным способом преобразования 'string' в' char [] 'подходит для' atof'? – styko

+0

Я бы сказал, что струнный поток является более стандартным способом. C_str не возвращает char */char [] он возвращает const char */const char []. – TLOlczyk

0

Прежде всего научиться отступ и последовательно использовать некоторые схемы для вставки пустых строк, что имеет смысл. Когда вы это сделаете, вы можете прочитать свой собственный код и выяснить, работает ли он так, как вы думаете.

Второй. Сохраните форму («% s», слово) в строке (назовем ее form_string), добавьте эту строку cout<<"form returns "<<form_string<<endl; 99.99%, вероятно, она будет печатать нули.

И последнее изменение: cout<<column[0]; - cout<<column[0]<<" "; или cout<<*(column.rbegin())<<" ";. Последний печатает все значения, которые вы читаете, первый печатает первое значение, которое вы читаете снова и снова.

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