这个 while 循环执行其适当的功能,但对于其他内容是必需的

This while loop does its proper function, but required for something else?

本文关键字:其他 于其他 执行 循环 while 这个 功能      更新时间:2023-10-16

我正在C++进行酒店预订计划。当用户想要打开访客的信息文件时,他们必须输入访客的名字和姓氏。如果其中没有具有该名称的数据文件,则会告知用户该文件不存在。然后再次询问文件名,用户输入真实的文件名。

问题是,如果有人输入一个他们知道是真实的文件名,它会说该文件不存在。但是,如果他们在出现提示时重新输入文件名,则会加载文件。

顺便说一下,打开文件需要此循环。这是我感到困惑的主要事情。我试着弄乱它,看看我是否真的需要它,显然我确实需要。我还需要第一个file_ptr.open(filename,ios::in);,以及第二个。我也不明白为什么我需要两者。

以下是 while 循环的具体代码:

cout << "Open Member File";
system ("cls");
char filename [100];
ifstream file_ptr;
cout << "nttttSaved Members:nn";
system ("dir/b *.");
cout << "nnPlease type the name of the member youn";
cout << "     wish to open as it appears above ORn";
cout << "     type z (Lower case) to return to main menu: ";
cin.ignore();
gets (filename);
if (filename[0]  != 'z')
{
    //cout<< "nPlease enter 6 digit Registration Access Code: ";
    //cin>>RAC;
    //if (RAC == (file_ptr, membershipNumber))
    //{
           file_ptr.open(filename,ios::in);
           // char in_char;
           while(!file_ptr)
           {
              cout << "Member does not existn";
              gets (filename);
              file_ptr.open(filename,ios::in);
           }

我不明白如果用户提供了合法的文件名,为什么需要 while 循环来打开文件。但它总是说该文件不存在,然后在第二次尝试时打开文件。

这是输出:

保存的成员:

亨特毕业生

请输入您希望打开的会员姓名,如上所示,或键入z(小写)返回主菜单:猎人毕业生

成员不存在

第二次输入相同的文件名时,它会将我带到文件

我不明白为什么?我希望有人知道。谢谢

http://www.cplusplus.com/reference/istream/istream/ignore/

告诉输入流忽略一个字符,因此文件名不是您键入的。 如果他们输入"John",那么您尝试打开文件"ohn"。

如果您在调试器中查看变量或只是检查输出,那将是显而易见的。调试器在解决大多数问题方面将比堆栈溢出更有效。当你真的陷入困境时,你想来这里。

他们第二次输入"John"时,您会查找名为"John"的文件,因为循环中没有忽略。

擦除 cin.ignore() 并重试。请参阅此处有关忽略 -> http://www.cplusplus.com/reference/istream/istream/ignore/