целые числа в текстовом файле - PullRequest
0 голосов
/ 24 марта 2020

, поэтому мне нужно написать программу, которая производит сумму всех разделенных пробелами целых чисел в текстовом файле. мой код до сих пор выглядит так:

#include "std_lib_facilities.h"
int main()
{
    int sum = 0;
    char text;
    ifstream txtfile;

    txtfile.open("intfile.txt");

    if (!txtfile) {
        cout << "Unable to open file";
        exit(1);
    }

    while (txtfile >> text ){
        if (txtfile){
            sum = sum + text;
        }else if (txtfile.fail()){
            txtfile.clear();
            for (char text;txtfile>>text && !isdigit(text);)
                {};

        }
    }
    txtfile.close();
    cout << "Sum = " << sum << endl;
    return 0;
}

мой текстовый файл выглядит так:

bears: 17 elephants 9 end

, и мой вопрос заключается в том, почему у меня вывод Сумма = 2019. Также у меня нет любые ошибки, так что я не знаю, что случилось.

1 Ответ

3 голосов
/ 24 марта 2020

Вам необходимо проверить, является ли символ чтения символом число, поскольку в c ++ тип символа неявно преобразуется в его значение ASCII, если вы выполняете над ним числительные c операции. Из-за разницы между значением ASCII числа и фактическим значением вам необходимо вычесть первое число '0' в таблице.

#include <iostream>
#include <fstream>
#include <cctype>

int main()
{
  int sum = 0;
  char text;
  std::ifstream txtfile;

  txtfile.open("../intfile.txt");

  if (!txtfile.is_open()) {
    std::cout << "Unable to open file" << std::endl;
    exit(1);
  }

  while (txtfile >> text ){
    if (txtfile && isdigit(text)){  // check if character is a digit
      sum += text - '0';            // take into account the ASCII table offset
    }else if (txtfile.fail()){
      txtfile.clear();
      for (char text;txtfile>>text && !isdigit(text);)
      {};

    }
  }
  txtfile.close();
  std::cout << "Sum = " << sum << std::endl;
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...