C ++ Поиск в текстовом файле и вывод строки, соответствующей поисковому запросу - PullRequest
0 голосов
/ 29 июня 2018

Я создал текстовый файл и добавил в него некоторые данные. Я пытаюсь найти в текстовом файле, в данном случае идентификатор студента, и вывести строку, соответствующую этому идентификатору студента. Еще выход "Студент не найден"

Мне удалось найти и вывести, но я не могу вывести конкретную строку с соответствующим идентификатором поиска.

Вот мой код:

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

int main(){
    char line[500];
    char search[20];
    int i;

    cout<<endl<<"Student Details"<<endl<<endl;

    ifstream infile;

    infile.open("students.txt");
    cout<<"Search: ";
    cin>>search;

    if (infile.is_open() ){
        while ( !infile.eof() ){
            infile.getline(line, 500, ',');
            if ( search[i] == line[i]){
                    while ( !infile.eof() ){
                            infile.getline(line, 500, ',');
                            cout<<line<<endl;   
                        }
            }   
        }
    }
        infile.close();
} 

Это тип вывода, который я пытаюсь получить после поиска

ID: H173770

Имя: Данте Мисима

Возраст: 20

Курс: веб-дизайн

Адрес: 13 Grimmauld Place

The text file

Output aftersearching

1 Ответ

0 голосов
/ 29 июня 2018

в

if ( search[i] == line[i]){

вы используете i (int var), но вы никогда не определяете i = 0 и используете i ++. Var i содержит «случайное» число, и программа завершается ошибкой при завершении поиска [i] == line [i], потому что я больше 20.

также, в конце строки нет ',', но '\ n'.

попробуйте это:

#include <iostream>
#include <fstream>

using namespace std;

int main(){
    char line[500];
    char search[20];
    int i;

    cout<<endl<<"Student Details"<<endl<<endl;

    ifstream infile;

    infile.open("students.txt");
    cout<<"Search: ";
    cin>>search;

    if (infile.is_open() ){
        while ( !infile.eof() )
        {
            infile.getline(line, 500, ','); // read first line to first ','
            for (i = 0;line[i] == search[i];i++)
            {
                if (search[i] == '\0') // if true search and line is same
                {
                    // print all info
                    cout << "Match found!" << endl;
                    cout << line << endl;
                    infile.getline(line, 500, ',');
                    cout << line << endl;
                    infile.getline(line, 500, ',');
                    cout << line << endl;
                    infile.getline(line, 500, ',');
                    cout << line << endl;
                    infile.getline(line, 500, '\n'); // end of line
                    cout << line << endl;
                    return 1;
                }
            }
            // no match
            for (int j = 0;j < 3;j++) infile.getline(line, 500, ','); // skip the line
            infile.getline(line, 500, '\n'); // we reach end of line
        }
        cout << "Match not found!" << endl;
    }
    else
    {
        cout << "Unable to open: students.txt" << endl;
    }
    infile.close();
    return 0;
}

если у вас есть вопрос о коде, спросите в комментарии.

...