注册 登录
编程论坛 C++教室

求助 成绩查询代码

ID不见了 发布于 2016-06-24 17:36, 3906 次点击
这是成绩管理系统的按学号成绩查询板块,为什么第二次查询的时候显示不出来信息?
程序代码:
void lookup_num()           //按学号查询
{
    char a;
    ifstream ist(filename.c_str());
    if(!ist)
    {
        cout<<"读取信息失败"<<endl;
        exit (0);
    }
    string line;
    string num1;
    string num;
    string oo="学号:";
    while(1)
    {
        cout<<"请输入要查询学生的学号:";
        cin>>num1;
        num=oo+num1;
        while(!ist.eof())
        {
            getline(ist,line);
            if(strstr(line.c_str(),num.c_str())!=NULL)
            {
                cout<<"该学生信息为:"<<line<<endl;
            }
        }
        cout<<"是否继续  1.继续查找    2.返回主菜单"<<endl;
        cin>>a;
        system("cls");
        if(a=='1') continue;
        if(a=='2') break;
    }
    a='0';
    ist.close();
}

3 回复
#2
rjsp2016-06-24 18:42
你可以每次都打印出num1的值,看看对不对?

btw:
while(!ist.eof()) 总能看到这种幼稚的错误,难道是书上教的?我怀疑是,否则不可能这么多人犯同样的错
#3
ID不见了2016-06-26 12:47
回复 2楼 rjsp
num1打印是没有错的,不知道为什么会这样。。。   还有while(!ist.eof())为什么错了。。。
#4
rjsp2016-06-27 08:21
我只改了一下你已有的代码
逻辑上的问题,比如输入1,找到“学号:123”,就是你的问题了

程序代码:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

int main( void )
{
    const string filename = "a.txt";

    ifstream ist(filename.c_str());
    if( !ist )
    {
        cerr << "读取信息失败\n";
        return 1;
    }

    for( string num; cout<<"请输入要查询学生的学号:", cin>>num; )
    {
        ist.clear();
        ist.seekg( 0 );

        for( string line; getline(ist,line); )
        {
            if( line.find("学号:"+num) != string::npos )
                cout << "该学生信息为:" << line << endl;
        }

        cout << "是否继续  1.继续查找    2.返回主菜单" << endl;
        char yn;
        cin >> yn;
        if( yn != '1' )
            break;
    }

    return 0;
}

1