c++简单If语句,使程序的其余部分不执行
C++ simple If statement making the rest of the program not execute
我有一个作业,我必须从一个文件中读取并对其执行各种计算,并将答案写入输出文件。一切都很顺利,直到我来到这一步:
"重新读取文件,计算文件中整数的和,只要总和不超过1000。使用标志控制的循环结构。"
我的代码片段如下:dataFile2.close();
dataFile2.clear();
dataFile2.open("J:\datafile2.txt");
sum = 0;
while(sum < 1000)
{
dataFile2 >> num;
sum = sum + num;
if(sum > 1000)
sum = sum - num;
}
answers << "The sum of the integers not exceeding 1000 is " << sum << endl;
cout << "The sum of the integers not exceeding 1000 is " << sum << endl;
return 0;
我的变量已经被声明了。当我取出if语句时,总和加上最后一个数,然后总和超过1000。如果保留If语句,则不会执行answers和cout语句,也不会出现编译器警告或错误。
如果有任何帮助,我将不胜感激。
-ThePoloHobo
既然没有人想给你一个正确的答案…(和公平地说,很难给出一个正确的答案,没有实际为你做你的工作
你的代码中有两个问题。首先是需求你用了一面旗帜。正如我在评论中所说的,习惯用语解决方案不会使用标志,但使用标志也没有问题。标志是一个布尔变量,将在while
,并且将在循环中设置条件,当您找到一些让你想要离开这个圈子的东西。
第二个问题是,您使用num
没有检查输入成功。>>
后必须检查操作符。习惯的检查方法(也是唯一的方法)应该由没有经验的人使用
dataFile2 >> num;
if ( dataFile2 ) {
// Input succeeded...
} else {
// Input failed for some reason, maybe end of file
}
因为流上的所有操作都返回对流中,通常合并测试和输入:
if ( dataFile2 >> num ) {
// succeeded
} else {
// failed
}
就我个人而言,我发现修改状态的想法在条件中if
或while
的可怕。但是这个习语是如此无处不在,你应该用它,对于简单的因为那是每个人都期望的。
在教学环境中,可能是可以接受的将任何失败视为文件结束,只需移动测试即可进入while
(当然,除非你被要求)使用旗帜)。在其他情况下,你需要考虑考虑到失败可能是由于语法错误造成的在input—有人将"abc"
插入到文件中你在等一个数字。有很多方法处理这些,这些都超出了你的能力范围试着去做,但是要注意在之后的你已经检测到失败了,你可以询问流来了解原因。特别是,如果dataFile2.eof()
是正确的,那么失败是(可能)应得的祝你读了所有的数据,一切都好。(在换句话说,读取数据失败不一定是错误。
您似乎没有使用标志变量,这在这种情况下可能会有所帮助。像这样的代码应该可以修复它:
sum = 0;
bool sumUnder1000 = true; //Or the C++ equivalent, I'm a bit rusty
while(sumUnder1000)
{
if(!dataFile2.good()){
sumUnder1000 = false; //We've reached end of file or an error has occurred
return;
}
dataFile2 >> num;
sum = sum + num;
else if(sum > 1000){
sum = sum - num;
sumUnder1000 = false;
}
}
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在没有信号的情况下从C++执行QML插槽
- 如何确认我的constexpr表达式实际上已经在编译时执行
- C++17中的并行执行策略
- QML按钮点击功能执行顺序
- 程序在执行程序的其余部分之前退出
- 为什么catch中的代码没有被执行
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 将执行、作业和WinAPI相乘
- 对字符数组中的元素执行逐位操作
- 为什么g++在未执行的代码处标记强制转换错误
- 如何使用原子指针执行双缓冲