我正在用C ++制作酒店预订程序。当用户想要打开访客的信息文件时,他们必须输入访客的名字和姓氏。如果没有包含该名称的数据文件,它会告诉用户该文件不存在。然后再次询问文件名,用户输入真实文件名。
问题是如果有人输入他们知道的真实文件名,就会说该文件不存在。但是,如果他们在提示时重新输入文件名,则会加载文件。
顺便说一下,这个循环是打开文件所必需的。这是我不知所措的主要内容。我试着弄乱它,看看我是否真的需要它,我显然是这样做的。我还需要第一个file_ptr.open(filename,ios::in);
和第二个cout << "Open Member File";
system ("cls");
char filename [100];
ifstream file_ptr;
cout << "\n\t\t\t\tSaved Members:\n\n";
system ("dir/b *.");
cout << "\n\nPlease type the name of the member you\n";
cout << " wish to open as it appears above OR\n";
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 exist\n";
gets (filename);
file_ptr.open(filename,ios::in);
}
。我也不明白为什么我需要两者。
这是while循环的具体代码:
<?php
include '../filter.php';
$chatjson = Array(); // define array like this
$sender = SecurePost($_POST["sender"]);
$message = SecurePost($_POST["message"]);
if ($sender || $message) {
$chatarray[] = array('sender' => $sender, 'message' => $message); // assign values every time to a new index.
$decodejson = json_decode($chatjson, true);
$merge = array_merge((array)$chatarray, (array)$decodejson); // push the new data
$chatjson = json_encode($merge);
echo $chatjson;
}
?>
我不明白为什么如果用户提供了合法的文件名,则需要使用while循环来打开文件。但它总是说文件不存在,然后在第二次尝试时打开文件。
这是输出:
已保存的会员:
Hunter Grad
请输入您希望打开的会员姓名,如上所示 键入z(小写)返回主菜单:Hunter Grad
会员不存在
我第二次输入相同的文件名时,会将我带到文件
我不明白为什么会这样?我希望有人知道。感谢
答案 0 :(得分:1)
http://www.cplusplus.com/reference/istream/istream/ignore/
您告诉输入流忽略一个字符,因此文件名不是您输入的内容。如果他们键入“John”,那么您尝试打开文件“ohn”。
如果您在调试器中查看过变量或只是检查了输出,那就显而易见了。调试器在解决大多数问题方面比stackoverflow更有效。当你真的陷入困境时,你想来这里。
第二次输入“John”时,你会找到一个名为“John”的文件,因为循环中没有忽略。
答案 1 :(得分:1)
删除cin.ignore()并重试。请参阅此处关于忽略 - &gt; http://www.cplusplus.com/reference/istream/istream/ignore/