c++简单If语句,使程序的其余部分不执行

C++ simple If statement making the rest of the program not execute

本文关键字:余部 执行 程序 If 简单 语句 c++      更新时间:2023-10-16

我有一个作业,我必须从一个文件中读取并对其执行各种计算,并将答案写入输出文件。一切都很顺利,直到我来到这一步:

"重新读取文件,计算文件中整数的和,只要总和不超过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
}
就我个人而言,我发现修改状态的想法在条件中ifwhile的可怕。但是这个习语是如此无处不在,你应该用它,对于简单的因为那是每个人都期望的。

在教学环境中,可能是可以接受的将任何失败视为文件结束,只需移动测试即可进入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;
    }
}