2013-03-14 4 views
1

Я работаю над программой C++, которая считывает string из файла. В конце string есть некоторые цифры. Моя задача - показать номер nth с конца строки.строки в C++ ошибка времени выполнения

Вот мой код. Программа принимает путь к файлу:

#include<iostream> 
#include<fstream> 
#include<string> 
#include<stdlib.h> 

using namespace std; 

int main(int argc,char** argv) 
{ 
    ifstream file; 
    int num,i=0,pos;  
    std::string lineBuffer; 
    file.open(argv[1],ios::in) ; 
    while (!file.eof()) 
     { 
     getline(file, lineBuffer);   
     if (lineBuffer.length() == 0) 
       continue; //ignore all empty lines 
     else 
      { 
      pos=0;    
      std::string str1(""); 
      std::string str2(""); 
      std::string final(""); 
      std::string number(""); 
      std::string output(""); 
       while(pos!=(-1)) 
       { 
        pos=lineBuffer.find(" ");        
        str2=lineBuffer.substr(0,1); 
        lineBuffer=lineBuffer.substr(pos+1); 
        final+=str2; 
        i++; 
       } 
       number=final.substr((i-1)); 
       num=atoi(number.c_str()); 
       output=final.substr(i-(num+1),1); 
       cout<<output;        
      }  
     } 
     file.close(); 
     return 0; 
} 

Моя программа дает правильный вывод для первой строки в файле. Но после этого он дает мне ошибку времени выполнения. Я не знаю, почему это происходит.

Файл Я посылаю к терминалу содержит:

a b c d 4 
b e f g 2 
+0

Что такое операционная система? –

+1

Какая ошибка? –

+1

Для начала вы должны запустить свою программу в отладчике. Это скажет вам, где ошибка. Он также позволит вам просматривать переменные, поэтому вы можете выяснить, что-то вызывает ошибку. –

ответ

1

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

gdb может быть простейшим, и вы можете начать работу с Gogling «gdb cheatsheet» или около того. Не забудьте скомпилировать с -g.

+0

программа также добавляет строку для следующей строки, но когда строка редактирования на буфере строки имеет место для второй строки, ее ошибка givng i dnt знает, как разрешить :( –

0

Вы должны объявить pos, как size_t вместо int так std::string::find() возвращает size_t.

Также, когда std::string::find() ничего не соответствует, он возвращает string::npos вместо -1. Таким образом, вы должны сравнить pos с string::npos вместо целого литерала -1.

+0

программа также выводит строку для следующей строки, но когда редактирование на линии буфера происходит для второй строки его ошибка givng i dnt знает, как разрешить :( –

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