#include <iostream>
#include <fstream>
#include <vector>
int main(void)
{
auto& datafile = std::cin;
if (!datafile) {
std::cerr << "Could not open \'foo.txt\', make sure it is in the correct directory." << std::endl;
exit(-1);
}
int num_entries;
// this tests whether the number was gotten successfully
if (!(datafile >> num_entries)) {
std::cerr << "The first item in the file must be the number of entries." << std::endl;
exit(-1);
}
// here we range check the input... never trust that information from the user is reasonable!
if (num_entries < 0) {
std::cerr << "Number of entries cannot be negative." << std::endl;
exit(-2);
}
// here we allocate an array of the requested size.
// vector will take care of freeing the memory when we're done with it (the vector goes out of scope)
std::vector<int> ints(num_entries);
int sum = 0;
for( int i = 0; i < num_entries; ++i ) {
// again, we'll check if there was any problem reading the numbers
if (!(datafile >> ints[i])) {
std::cerr << "Error reading entry #" << i << std::endl;
exit(-3);
}
sum += ints[i];
}
std::cout << "Read " << num_entries << " numbers having a sum of " << sum << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KCmludCBtYWluKHZvaWQpCnsKCWF1dG8mIGRhdGFmaWxlID0gc3RkOjpjaW47CgkKCWlmICghZGF0YWZpbGUpIHsKCSAgICBzdGQ6OmNlcnIgPDwgIkNvdWxkIG5vdCBvcGVuIFwnZm9vLnR4dFwnLCBtYWtlIHN1cmUgaXQgaXMgaW4gdGhlIGNvcnJlY3QgZGlyZWN0b3J5LiIgPDwgc3RkOjplbmRsOwoJICAgIGV4aXQoLTEpOwoJfQoJCglpbnQgbnVtX2VudHJpZXM7CgkvLyB0aGlzIHRlc3RzIHdoZXRoZXIgdGhlIG51bWJlciB3YXMgZ290dGVuIHN1Y2Nlc3NmdWxseQoJaWYgKCEoZGF0YWZpbGUgPj4gbnVtX2VudHJpZXMpKSB7CgkgICAgc3RkOjpjZXJyIDw8ICJUaGUgZmlyc3QgaXRlbSBpbiB0aGUgZmlsZSBtdXN0IGJlIHRoZSBudW1iZXIgb2YgZW50cmllcy4iIDw8IHN0ZDo6ZW5kbDsKCSAgICBleGl0KC0xKTsKCX0KCQoJLy8gaGVyZSB3ZSByYW5nZSBjaGVjayB0aGUgaW5wdXQuLi4gbmV2ZXIgdHJ1c3QgdGhhdCBpbmZvcm1hdGlvbiBmcm9tIHRoZSB1c2VyIGlzIHJlYXNvbmFibGUhCglpZiAobnVtX2VudHJpZXMgPCAwKSB7CgkgICAgc3RkOjpjZXJyIDw8ICJOdW1iZXIgb2YgZW50cmllcyBjYW5ub3QgYmUgbmVnYXRpdmUuIiA8PCBzdGQ6OmVuZGw7CgkgICAgZXhpdCgtMik7Cgl9CgkKCS8vIGhlcmUgd2UgYWxsb2NhdGUgYW4gYXJyYXkgb2YgdGhlIHJlcXVlc3RlZCBzaXplLgoJLy8gdmVjdG9yIHdpbGwgdGFrZSBjYXJlIG9mIGZyZWVpbmcgdGhlIG1lbW9yeSB3aGVuIHdlJ3JlIGRvbmUgd2l0aCBpdCAodGhlIHZlY3RvciBnb2VzIG91dCBvZiBzY29wZSkKCXN0ZDo6dmVjdG9yPGludD4gaW50cyhudW1fZW50cmllcyk7CglpbnQgc3VtID0gMDsKCWZvciggaW50IGkgPSAwOyBpIDwgbnVtX2VudHJpZXM7ICsraSApIHsKCSAgICAvLyBhZ2Fpbiwgd2UnbGwgY2hlY2sgaWYgdGhlcmUgd2FzIGFueSBwcm9ibGVtIHJlYWRpbmcgdGhlIG51bWJlcnMKCSAgICBpZiAoIShkYXRhZmlsZSA+PiBpbnRzW2ldKSkgewoJICAgICAgICBzdGQ6OmNlcnIgPDwgIkVycm9yIHJlYWRpbmcgZW50cnkgIyIgPDwgaSA8PCBzdGQ6OmVuZGw7CgkgICAgICAgIGV4aXQoLTMpOwoJICAgIH0KCSAgICBzdW0gKz0gaW50c1tpXTsKCX0KCQoJc3RkOjpjb3V0IDw8ICJSZWFkICIgPDwgbnVtX2VudHJpZXMgPDwgIiBudW1iZXJzIGhhdmluZyBhIHN1bSBvZiAiIDw8IHN1bSA8PCBzdGQ6OmVuZGw7CglyZXR1cm4gMDsKfQo=