这个 while 循环执行其适当的功能,但对于其他内容是必需的
This while loop does its proper function, but required for something else?
我正在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/
- 对于BTreeMap和其他依赖于Ord的东西,是否有等效于C++比较器对象?
- MOVNTI 存储是否相对于由同一线程创建的其他 MOVNTI 存储重新排序?
- 相同的 for 循环适用于其他项目,但不适用于此项目。为什么?
- 依赖于其他模板参数的模板参数
- QT 无法识别 UTF-8 编码,适用于其他所有位置
- 如何根据用户输入"weighted"随机数生成,使某些数字优先于其他数字?
- deadline_timer::wait 是否让位于其他任务
- 依赖于其他静态库的静态库
- C++/VIM相对于其他IDE的怪异EOF行为
- 如何强制转换优先于其他转换
- 如何设置依赖于其他参数的参数默认值
- 如何相对于其他元素过滤矢量元素
- 是否有等效于其他语言中C++的类型特征
- c++:应用于向量的STL算法也适用于其他容器对象
- 将专用基指针强制转换为专用于其他模板参数的派生指针("adding on"专用化)
- 依赖于其他DLL的DLL
- 在OpenMP中屈服于其他线程/任务
- c++使对象依赖于其他对象是一种好的设计
- 依赖于其他 slib 的静态库是否需要它们的实际'code'才能工作?
- 删除std::lock_guard相对于其他堆栈分配对象的顺序/速度