2012-04-15 24 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