当前位置: 首页 > 知识库问答 >
问题:

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

汪阳辉
2023-03-14

我是一个初学者,我从一本书中复制了这段代码,但它不起作用,因为当我进入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;

        }
    }

共有2个答案

计阳泽
2023-03-14

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

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

文件不同,控制台没有EOF标志。尽管如此,您可以通过键入CtrlZ

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

何涵忍
2023-03-14

cin的文档。get()告诉我们您要查找的返回条件是EOF

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

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

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

 类似资料:
  • 所以我这里有一个程序,它只是简单地模仿跳棋(但不是跳,而是一个棋子简单地“吃掉”另一个棋子)。我有一个简单的类,它实现了一个“checkers”类对象,并创建了一个名为“chips”的int数组变量。还有一个“while”语句,它在chip[0]和chips[1]整数大于0时创建了一个循环。看起来是这样的: Checkers类中的count方法如下所示: 板是8 x 8(这就是board.leng

  • 当我输入一个字符串运算符时,无论是加法()、减法(-)、乘法(*)、除法(/)还是模块(%),即使我输入了一个有效的输入,它仍然会进入而循环。我不知道问题可能是什么,因为当循环工作正常时,我必须为变量Num2输入一个int值。

  • 我有以下代码来下载通过TCP传输的文件: 一旦所有的字节都被处理了(它们总是被处理的,它像正常的一样工作,只是不退出循环),文件就被创建了,没有一个问题,但是,循环没有退出。

  • 我有一组用unittest实现的测试,它们是自动运行的。我希望每小时最多运行一次,我有一个方法检查这个条件,并返回True(如果可以运行它们)或False(如果应该退出测试)。

  • 编辑:该问题与fscanf的while循环没有直接关系,而是在用于包含使用fscanf加载的变量的结构的分配中出现了错误 我正在从文件中读取值,并使用它们在使用fscanf的结构中设置参数。我使用Eclipse作为编辑器,并将其调试和gcc作为编译器(从Eclipse内部)。 我下面介绍的由三部分组成:1)我从文件中读入变量的结构的声明。2)我正在读取的文件,以及3)实际从文件中读取的代码。 在所

  • 问题内容: 我正在使用ProcessBuilder启动子进程,并且如果父进程确实需要退出子进程。在正常情况下,我的代码可以正确阻止孩子。但是,如果我导致操作系统杀死父进程,则子进程将继续运行。 有什么方法可以将子进程“绑定”到父进程,以便在父进程被杀死时退出? 问题答案: 子进程与其父进程之间没有联系。他们可能彼此知道进程ID,但是它们之间没有硬连接。您在谈论孤立过程。这是操作系统级别的问题。意味