在C ++上使用eof

时间:2011-09-12 13:49:08

标签: c++ input pascal eof

我正在为这个pascal代码寻找C ++编码

var
jumlah,bil : integer;
begin
jumlah := 0;
while not eof(input) do
begin
   readln(bil);
   jumlah := jumlah + bil;
end;
writeln(jumlah);
end.

我不明白在C ++上使用eof

它的目的是计算从第1行到文件末尾的数据

编辑: 好吧,我试过这个,但没有运气

#include<iostream>
using namespace std;

int main()
{
    int k,sum;
    char l;
    cin >> k;
    while (k != NULL)
    {
          cin >> k;
          sum = sum + k;
    }
    cout << sum<<endl;
}
抱歉,我是C ++的新手

3 个答案:

答案 0 :(得分:6)

通常的习语是

while (std :: cin >> var) {
   // ...
}

cin对象在operator>>失败后被强制转换为假,通常是因为EOF:check badbit, eofbit and failbit

答案 1 :(得分:6)

你非常接近,但是你的Pascal背景可能比理想的更多。你可能想要的更像是:

#include<iostream>
using namespace std;   // Bad idea, but I'll leave it for now.

int main()
{
    int k,sum = 0; // sum needs to be initialized.
    while (cin >> k)
    {
          sum += k;  // `sum = sum + k;`, is legal but quite foreign to C or C++.
    }
    cout << sum<<endl;
}

或者,C ++可以将文件大致视为顺序容器,并且可以像处理任何其他容器一样使用它:

int main() { 
    int sum = std::accumulate(std::istream_iterator<int>(std::cin), 
                              std::istream_iterator<int>(),
                              0);    // starting value
    std::cout << sum << "\n";
    return 0;
}

答案 2 :(得分:4)

格式化David在上面写的内容:

#include <iostream>
#include <string>

int main()
{
    int jumlah = 0;
    std::string line;
    while ( std::getline(std::cin, line) )
        jumlah += atoi(line.c_str());

    std::cout << jumlah << std::endl;
    return 0;
}

您还可以在http://www.cplusplus.com/reference/iostream/

找到更多信息