我是一个初学者,我从一本书中复制了这段代码,但它不起作用,因为当我进入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()
从流中提取单个字符作为未格式化的输入。
当您输入-1
时,它被视为两个独立的输入-
和1
它们都不匹配任何情况,这就是为什么默认消息会被打印两次,并且退出while循环的条件从未满足的原因
与文件不同,控制台没有EOF
标志。尽管如此,您可以通过键入CtrlZ
一个简单的解决方法是更改条件,例如输入“X”退出循环while((grade=cin.get())!='X')
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,但是它们之间没有硬连接。您在谈论孤立过程。这是操作系统级别的问题。意味