如何在条件表达式中使用 'cin' 正确退出 while 循环?(C++、CLion)

How can I properly exit a while loop with 'cin' in the conditional expression?(C++, CLion)

我是 C++ 的新手,在使用这个简单的代码时遇到了问题:

#include <iostream>
using namespace std;

int main() {
  int NumberOfNonBlanks = 0;
  int NumberOfUpperCase = 0;
  char c;
  while (cin >> c) {
    ++NumberOfNonBlanks;
    if ((c>='A' && (c <= 'Z'))) {
      ++NumberOfUpperCase;
    }
  }
  cout << "Nonblank characters : " << NumberOfNonBlanks << endl 
       << "Uppercase characters : " << NumberOfUpperCase << endl;
}

我的操作系统是Windows,Ctrl+D好像退出了循环(Ctrl+Z什么也没做),但问题是它也结束了整个程序。因此,我在代码中的最后一行没有做任何事情......例如,如果我输入为:

BLUE

然后按 Ctrl+D,程序立即结束,return 值为 0。

任何帮助将不胜感激,为什么这种情况一直发生。谢谢!

------------编辑----------------

目前有一些争论认为 ctrl + z 不表示 CLion(在 windows 上运行)的 EOF。在这种情况下,有人知道 CLion 的任何解决方案吗?

Ctrl + D表示EOF,但它只在Linux中有效,如果你想在windows或cmd中将EOF发送到你的程序,你需要使用Ctrl+Z,你可以从这个问题中看到更多 Ctrl+D doesn't stop application from executing in command window

并且 Ctrl+Z 在我的 windows 和 code::block IDE

中工作正常