![](/img/trans.png)
[英]When I enter Ctrl+Z to finish the loop below, I get the null string in variable z. Why?
[英]Ctrl+Z does not work when trying to exit loop
我正在尝试使用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;
}
控制台不是文件。 控制台不会结束。 控制台不可能有文件结尾。
我想您已经忘记了您使用的是控制台 I/O ( conio.h
/ getch
),而不是文件 I/O ( stdio.h
/ getchar
)。 无论您在想什么EOF
,它都不是控制台 I/O 的事情。 我找不到任何建议文档getch
都不能返回EOF
,而据我所知,这将没有任何意义。
如果你想检查 Control-Z,你可以。 它是十进制 26 或0x1A
。
您将 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
如果您使用的是 unix 派生编译器,请尝试ctrl - D 。 我对 Dev-C++ 不是很熟悉,但是当我查了一下它时,它说了一些关于 MinGW 的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.