这个while循环执行其正常的功能,但需要其他东西吗?

时间:2015-06-13 22:05:03

标签: c++

我正在用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

会员不存在

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

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

2 个答案:

答案 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/