我试图在用户按下 'Ctrl-D' 时结束我的 C++ 程序
I am trying to end my C++ program when the user presses 'Ctrl-D'
我的程序读入了一个大的单词文件(字典)并将它们全部插入到一个散列中 table。我提示用户查找一个词,我希望他们能够通过按 Ctrl-D 来终止程序。这是我尝试过的方法,但是当我按下 Ctrl-D 时,它只是卡在一个循环中,打印出我在 else 语句中的内容。我正在使用 Unix。我试图在这个网站上查找这个,但我尝试的没有任何效果,因此我为什么要问我自己的问题。有什么想法吗? PS。转换是让用户输入全部大写以匹配我正在读取的文件。
void query(){
bool done = false;
string lookupWord;
while(!done){
cout << "Type a word to lookup or type ctrl-D to quit: ";
cin >> lookupWord;
if(atoi(lookupWord.c_str()) == EOF)
done = true;
else{
transform(lookupWord.begin(), lookupWord.end(), lookupWord.begin(), ::toupper);
cout << endl << "Word: " << lookupWord << endl;
cout << endl << "Definition: " << myDict.lookup(lookupWord) << endl << endl;
}
}
}
atoi(lookupWord.c_str()) == EOF
这与您认为的不同。这将检查 atoi()
的 return 值并将其与 EOF
进行比较。 EOF
通常定义为 -1
。因此,代码最终仅在输入 -1
时完成设置。这不是您想要的。
std::istream
有一个方便的operator bool
测试文件流是否处于良好状态。所以,真正需要做的是:
if (cin >> lookupWord)
{
// Your existing code is here
}
else
{
done=true;
}
我的程序读入了一个大的单词文件(字典)并将它们全部插入到一个散列中 table。我提示用户查找一个词,我希望他们能够通过按 Ctrl-D 来终止程序。这是我尝试过的方法,但是当我按下 Ctrl-D 时,它只是卡在一个循环中,打印出我在 else 语句中的内容。我正在使用 Unix。我试图在这个网站上查找这个,但我尝试的没有任何效果,因此我为什么要问我自己的问题。有什么想法吗? PS。转换是让用户输入全部大写以匹配我正在读取的文件。
void query(){
bool done = false;
string lookupWord;
while(!done){
cout << "Type a word to lookup or type ctrl-D to quit: ";
cin >> lookupWord;
if(atoi(lookupWord.c_str()) == EOF)
done = true;
else{
transform(lookupWord.begin(), lookupWord.end(), lookupWord.begin(), ::toupper);
cout << endl << "Word: " << lookupWord << endl;
cout << endl << "Definition: " << myDict.lookup(lookupWord) << endl << endl;
}
}
}
atoi(lookupWord.c_str()) == EOF
这与您认为的不同。这将检查 atoi()
的 return 值并将其与 EOF
进行比较。 EOF
通常定义为 -1
。因此,代码最终仅在输入 -1
时完成设置。这不是您想要的。
std::istream
有一个方便的operator bool
测试文件流是否处于良好状态。所以,真正需要做的是:
if (cin >> lookupWord)
{
// Your existing code is here
}
else
{
done=true;
}