回 帖 发 新 帖 刷新版面

主题:为什么电话号码查寻程序只能查寻一次<求高手>

我是大一学生,作业为编一个电话号码查寻程序,但我的程序只能查寻一次,第二次循环时就不输出了

希望前辈们指点一下,谢谢!(回加30分)

#include<iostream>
#include<fstream>
#include<string>

using namespace std;

int main()
{
    ifstream inFile;
    string ans,F,L,firstname,lastname,firstName,lastName,number;
    
    inFile.open("phonenumber.txt");

    do
    {
        cout<<"Enter the firstname and lastname you want to look up:"<<endl;
        cin>>firstname>>lastname;
        
        do
        {
            inFile>>firstName>>lastName>>number;
            
            if((firstname==firstName)&&(lastname==lastName))
            {
                cout<<firstName<<"  "<<lastName<<"  "<<number<<endl;
                F=firstName;
                L=lastName;
            }
        }while(inFile);
        if(F!=firstname||L!=lastname)
        {
            cout<<"The name is not in the telephne directory"<<endl;
        }

        cout<<"Do you find it again?(Y/N)"<<endl;
        cin>>ans;
    }while(ans=="Y"||ans=="y");

    inFile.close();
    
    return 0;
}

以下为电话薄文件内容:
zhang shan 13435689
zhang hao 1564
li si 1245
li lan 15646
wang hao 156456

回复列表 (共1个回复)

沙发

问题就在于执行一次循环之后inFile文件流已读到文件结束处,之后流就处于错误状态不会正常工作了。因此每一次循环之后必须清除流的状态,使其复位。文件流的打开和关闭也必须放在循环中:
#include<iostream>
#include<fstream>
#include<string>

using namespace std;

int main()
{
    ifstream inFile;
    string ans,F,L,firstname,lastname,firstName,lastName,number;
    do
    {
        inFile.open("phonenumber.txt");//文件流的打开放入循环
        cout<<"Enter the firstname and lastname you want to look up:"<<endl;
        cin>>firstname>>lastname;
        
        do
        {
            inFile>>firstName>>lastName>>number;
            
            if((firstname==firstName)&&(lastname==lastName))
            {
                cout<<firstName<<"  "<<lastName<<"  "<<number<<endl;
                F=firstName;
                L=lastName;
            }
        }while(inFile);
        if(F!=firstname||L!=lastname)
        {
            cout<<"The name is not in the telephne directory"<<endl;
        }

        cout<<"Do you find it again?(Y/N)"<<endl;
        cin>>ans;
        inFile.close();//文件流的关闭放入循环
        inFile.clear();//清除流的当前状态,恢复为有效状态
    }while(ans=="Y"||ans=="y");

    inFile.close();
    
    return 0;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册