【问题标题】:Ctrl+Z does not work when trying to exit loop尝试退出循环时 Ctrl+Z 不起作用
【发布时间】:2012-04-15 05:41:57
【问题描述】:

我正在尝试使用 Ctrl+Z 退出循环,但它不起作用。我仔细查看了我的代码,但我无法找出问题所在。您的帮助将不胜感激。我正在使用 Dev-C++。代码如下:

#include <iostream>
#include<conio.h>

using namespace std;

class student 
{
  private:
   string name;
   int age;
   double GPA;
  public:

   void read ();

};

void student::read()
{
  do
   {   //enter student data
     cout << "Name:  " ;
     cin>>name;
     cout<<"Age:  ";
     cin>>age;
     cout << "GPA:  ";
     cin>>GPA;

    cout<<"\n\n  any key to continue or Ctrl+Z to exit."<<endl<<endl;
   }
   while(getch()!=EOF);  //Ctrl+Z to exit
}


int  main()
{
  student stud;
  stud.read();
  return 0;
}

【问题讨论】:

  • 检查人员是否按Ctrl+Z的代码在哪里?我只看到了 EOF 的检查。
  • 我以为通过使用(getch()!=EOF),当用户按下ctrl+Z时它会退出。

标签: c++ class exit eof do-loops


【解决方案1】:

您正在将 Windows 控制台 I/O 与 C++ 流 I/O 混合使用。套用Gary Larson,你在玻璃容器中混合了不相容的物种。

尝试只使用 C++ 结构,如下所示:

std::cout << "Enter name, age, GPA; or CTRL-Z to exit\n";
while ( cin >> name >> age >> GPA )
{
  // do something with one set of input
}

或者,如果你想保持你的 do-while 格式:

do
{   //enter student data
  cout << "Name:  " ;
  if( !cin>>name ) break;
  cout<<"Age:  ";
  if( !cin>>age) break;
  cout << "GPA:  ";
  if( !cin>>GPA) break;
}
while(cin);  //Ctrl+Z to exit

【讨论】:

    【解决方案2】:

    控制台不是文件。控制台不会结束。控制台不可能有文件结尾。

    我认为您忘记了您使用的是控制台 I/O (conio.h/getch),而不是文件 I/O (stdio.h/getchar)。无论您在想什么EOF,它都不是控制台 I/O。我找不到任何建议 getch 可以永远返回 EOF 的文档,据我所知,这没有任何意义。

    如果您想检查 Control-Z,您可以。它是十进制的 26 或 0x1A

    【讨论】:

    • 是的,而 EOF 的值为 -1。顺便说一句,Ctrl-Z 的 ASCII 名称是 SUB 而不是 EOF。
    【解决方案3】:

    如果您使用的是 unix 派生编译器,请尝试 ctrl-D。我对 Dev-C++ 不是很熟悉,但是当我查找它时,它说明了一些关于 MinGW 的内容。

    【讨论】:

    • 作业要我们在dos中使用Ctrl-Z。由于我使用的是 Windows vista,所以我认为 Ctrl-Z 是在该操作系统上使用的。
    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 2022-11-11
    相关资源
    最近更新 更多