2012-04-15 17 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キーを入力するかどうかを確認するためのコードです:あなたは、DO-しばらく形式を維持したい場合は、

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

しますか、 + Z?私はEOFのチェックを見るだけです。 –

+0

私は(getch()!= EOF)を使うと、ユーザーがctrl + Zを押したときに終了すると考えました。 – T4000

答えて

1

WindowsコンソールI/OとC++ストリームI/Oをミックスしています。 Gary Larsonという言い方をすると、テラリウムには互換性のない種が混在しています。

このように、単にC++構文を使用してみてください:

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はそのOSで使用するものだと思っていました。 – T4000

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名はEOFではなくSUBです。 –

関連する問題