2017-02-03 21 views
1

Я пытаюсь найти документ и найти подмножество, чтобы распечатать эту конкретную строку, однако он, кажется, затягивает все сообщение сразу.Функция Cline getline(), приводящая весь файл

ifstream inputFile("searchfile.dat"); 

    int search; 

    cout << "Enter what you're searching: "; 
    cin >> search; 

    string line; 
    //bool notFound; 

    while(getline(inputFile, line) /*&& notFound*/){ 
    if (line.find(search)) { 
     cout << line << endl; 
     //notFound = false; 
    } 
    //line = ""; 
    } 


    inputFile.close(); 

Это домашнее задание, поэтому я изменил некоторые из моих переменных. Пожалуйста, имейте это в виду при ответе (т. Е. Объясните, что произошло, поэтому я могу узнать из этого)

Большое вам спасибо!

P.S. Вот данные, которые я сейчас работаю с:

Name1 Name1 1000001 12.00 
Name2 Name2 1000002 14.00 
Name3 Name3 1000004 16.00 

мне нужно искать номер 1000000. и печать только линию. Например, я бы искал 1000002 и напечатает: Имя2 Имя2 1000002 14.00

Сейчас он будет печатать все дело

+0

[MCVE] (http://stackoverflow.com/help/mcve) пожалуйста. Как выглядит исходный файл? Это одна линия? –

+0

Это все разные строки, которые выглядят так: first last id wage –

+0

Я ищу идентификатор –

ответ

3

Для очень простой затруднительного сделать это

#include<iostream> 
#include<fstream> 
using namespace std; 

int main(){ 
    ifstream inputFile("searchfile.dat"); 

    string search; 

    cout << "Enter what you're searching: "; 
    cin >> search; 

    string line; 

    while(getline(inputFile, line)){   
     if (line.find(search) != string::npos) { 
      cout << line << endl; 
     } 
    } 
} 

Вопросы вы были в два раза.

Во-первых, string::find не возвращает то, что может быть правильно оценено в булевом контексте. Он возвращает индекс, по которому можно найти значение, или иначе string::npos. Поэтому, если вы проверите это, он будет правильно оценивать вас.

Другая проблема заключается в том, что вы вводите поиск как целое число, а затем пытаетесь найти его в строке. В результате он вызывает эту перегрузку size_type find (charT c, size_type pos = 0) const;, которая пытается найти персонажа. Это происходит потому, что int может быть неявно преобразован в char. Вы должны прочитать в своем id как строку или преобразовать ее в строку перед ее использованием с помощью find.

Обратите внимание на несколько других факторов. Этот код немного хрупкий, так как он найдет эту строку в любом месте строки, поэтому, если имя или заработная плата каким-то образом содержат это значение, оно будет найдено. Вам также не нужно явно закрывать ifstream, он закрыт в деструкторе.

+0

Я добавил эту строку, но она работает только в том случае, если я просматриваю первую строку –

+0

Я попытался найти что-то в середине и в конце и не работал –

+0

Ничего, я забыл сделать поиск строки. Спасибо огромное! Теперь он отлично работает! Есть ли способ любить этот ответ или что-то в этом роде? –