2012-04-15 21 views
1

我试图用Ctrl + Z退出循环,但它不起作用。我仔细查看了我的代码,但我无法弄清楚问题所在。您的帮助将不胜感激。我正在使用Dev-C++。该代码只是波纹管:尝试退出循环时Ctrl + Z不起作用

#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; 
} 
+1

哪里是来检查的人进入Ctrl键的代码+ Z?我只看到EOF的支票。 – 2012-04-15 05:44:32

+0

我认为通过使用(getch()!= EOF),它会在用户按下ctrl + Z时退出。 – T4000 2012-04-15 05:50:04

回答

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-而格式:

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 
1

如果您使用的是UNIX衍生的编译器,尝试使用Ctrl + d。我对Dev-C++并不是很熟悉,但是当我看到它时,它说明了MinGW的一些情况。

+0

该任务让我们在dos中使用Ctrl-Z。由于我使用的是Windows Vista,所以我认为Ctrl-Z是在该操作系统上使用的。 – T4000 2012-04-15 05:55:35

2

控制台不是文件。控制台不会结束。控制台无法获得文件结尾。

我想你忘了,你正在使用控制台I/O(conio.h/getch),而不是文件I/O(stdio.h/getchar)。不管你在想什么EOF,这不是一个控制台I/O的东西。我找不到任何建议getch可以返回EOF的文件,并且据我所知,这是没有任何意义的。

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

+0

是的,而EOF的值是-1。顺便说一下,Ctrl-Z的ASCII名称是SUB而不是EOF。 – 2012-04-15 06:37:39