C ++搜索文本文件并输出与搜索词匹配的行

时间:2018-06-29 15:38:34

标签: c++ file search output

我已经制作了一个文本文件,并向其中添加了一些数据。我正在尝试在文本文件中搜索学生ID,并输出与该学生ID匹配的行。否则输出“未找到学生”

我已经设法搜索和输出,但是我无法输出具有匹配搜索ID的特定行。

这是我的代码:

#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

名称:Dante Mishima

年龄:20

课程:网页设计

地址:Grimmauld Place 13号

The text file

Output aftersearching

1 个答案:

答案 0 :(得分:1)

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

您使用i(int var),但从未定义i = 0并使用i ++。变量i包含“随机”数字,并且程序在编译search [i] == line [i]时失败,因为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;
}

如果您对代码有疑问,请在注释中提问。