2015-02-25 4 views
0

Я пишу функцию, которая читает строку за строкой от cin и возвращает, когда видит ; символ.Чтение строки в C++ до EOF

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

using namespace std; 

int read_cmd(char *cmd) 
{ 
    cout << "Please enter a string: \n"; 
    cmd[0]='\0'; 

    while(1){ 
     char currentLine[10000]; 
     currentLine[0]='\0'; 
     cin.getline(currentLine,10000); 
     if (strcmp(currentLine,";")==0){ 
      break; 
     } 
     strcat(cmd, "\n"); 
     strcat(cmd, currentLine); 
    } 
    return 0; 
} 

int main(){ 
    char cmd[1000]; 
    while (1){ 
     read_cmd(cmd); 
     cout<< cmd << endl; 
    } 
} 

Затем я проверил его, используя текст, переданный из другого файла через трубу. ./read_cmd < test_file

содержимое test_file:

line 1 
line 2 
; 

Это выводит результаты только штраф, однако он дает мне ошибку сегментации в конце. Есть ли способ для cin, чтобы проверить, подходит ли он к EOF и завершается?

+3

Вы прочитали страницу руководства для 'getline'? – lurker

+0

Что-то вроде 'while (getline (cin, line))' должно преуспеть. –

ответ

0

Я бы настоятельно предложил использовать объект string для чего-то подобного, таким образом, вы не теряете пространство, а также гарантируете, что у вас есть пространство enouch. Вы также можете сделать это без цикла.

string currentLine; 
getline(cin, currentLine, ';'); 

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

string currentLine; 
while(getline(cin, currentLine)){ 
    if(currentLine.find(";") != string::npos){ 
     break; 
    } 
} 

Используйте струны, чтобы обойти вокруг. Всегда есть метод .clear(), так что любая строка для облегчения опорожнения.

string getline
string Object

0

Чтобы обнаружить EOF, вы должны использовать что-то вроде:

while (cin.good() && !cin.eof()) 
{ 
    // Read the file 
} 

См documentation for cin, в частности good() (для проверки ошибок) и eof() функций-членов.

В частности this example может быть полезно.

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