为什么当我进入退出条件时,程序会打印两倍的默认条件而不是退出 while 循环?

Why the program prints twice the default condition instead of quitting the while loop when i enter the exit condition?

本文关键字:退出 条件 默认 两倍 while 循环 为什么 打印 程序      更新时间:2023-10-16

我是初学者,我从一本书中复制了这段代码,但它不起作用,因为当我进入 EOF 时,程序而不是退出 while 循环打印默认消息两次。这就像一个小时,我寻找解决方案,但我尝试过的一切都不起作用,谢谢你的帮助。 该程序应该计算每种等级的数量。

#include "stdafx.h"
#include <iomanip>
#include <iostream>
#include <math.h>
#include <ctype.h>
using namespace std;

int main()
{ 
int grade,
aCount = 0,
bCount = 0,
cCount = 0,
dCount = 0,
fCount = 0;

cout << "Enter the letter grades (EOF to quit) ->>";
while ((grade = cin.get()) != 'EOF')  {
switch (grade) {
case 'A':
++aCount;
break;
case 'B':
++bCount;
break;
case 'C':
++cCount;
break;
case 'D':
++dCount;
break;
case 'F':
++fCount;
break;
case 'n':
case 't':
case ' ':
break;
default :
cout << "Invalid letter grade entered. Enter a new grade." << endl;
break;
}
}

>cin.get()的文档告诉我们,您正在寻找的返回条件是EOF

while ((grade = cin.get()) != EOF)  {

就是这样 - 没有引号!它是一个扩展到整数的宏。你所做的是编写一个"多字节字符文字"'EOF',它具有实现定义的含义,在这里没有真正的相关性。

要么你抄错了书,要么书错了。

文档说:cin.get()从流中提取单个字符作为无格式输入。

当您输入-1时,它被视为 2 个单独的输入-并且1它们都不匹配任何情况,这就是为什么默认消息被打印两次并且永远不满足退出 while 循环的条件的原因

与文件控制台不同,它没有EOF标志。尽管如此,您可以通过键入Ctrl+Z来模拟它

一个简单的解决方法是更改条件,例如输入"X"退出循环while ((grade = cin.get()) != 'X')