Проблема при выводе ответа

106
28 августа 2019, 00:10

Есть задача: в файле 20 чисел,и надо вывести:

1.Количество всех троек (даже если дано число 333, то должна просчитаться каждая тройка)

2.Количество всех чисел , которые больше 10.

На языке Си решил за 10 минут, а вот на C++ не получается. Например-почему из файла выводятся все символы как они есть, а когда приводишь их к типу int , чтобы потом сравнить- выводится только первый символ? Прошу обьяснить на примере кода языка С++.

#include "pch.h"
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
using namespace std;
int main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    const int mas_count = 20;
    string line;
    int three_count = 0, int_line[mas_count];
    string mas[mas_count];
    ifstream file_nums("numbers.txt");
    if (file_nums.is_open()) {
        int i = 0;
        while (getline(file_nums, line))
        {       
            mas[i] = line;
            int_line[i] = stoi(mas[i]);
            cout << mas[i] << endl;
            cout << int_line[i] << endl;
            i++;
        }
    }
    //сюда не обращайте внимания
    for (int i = 0; i < mas_count; i++) {
        int_line = stoi(mas[i]);
        cout << int_line << endl;
        int_line = 0;
    }
    return 0;
}
int i = 0;
  while (!feof(f1))
  {
    i++;
    num = fgetc(f1);
    if (!feof(f1))
    {
      printf("%c", num);
      if (num == '3') n++;
    }
  };
  sum = 0;
  for (int j = 1; j < 16; j++)
    if (mas[j] > 10) {      
      sum = sum + 1;
    }
    else
    {
      sum = sum + 0;
    }
  fclose(f1);
  printf("\n");
  printf("\nВ тексте встречается %i раз цифра 3\n", n);
  printf("\n");
  printf("\nВ тексте  %i чисел больше за  10\n", sum);
  printf("\n");
}

Файл: numbers.txt

Содержимое: 1 3 5 8 12 13 16 20 23 24 27 30 33 35 36 40 42 43 45 49 50

Ответ должен выглядеть так:

1.Количество троек: 9

2.Чисел больше 10: 17

Answer 1

Не нужно посимвольное считывание.

Если сделан ввод из файла по уму - сразу чисел (например, с помощью cin), то нужно просто посчитать количество цифр-троек

while(n) {
   digit = n % 10;
   if (digit==3)
      count3++;
   n = n / 10; 
}

Если вводятся строки, то по каждой можно пройти, подсчитать символы-тройки

READ ALSO
Почему std::count() возвращает знаковое число?

Почему std::count() возвращает знаковое число?

Почему алгоритм std::count() возвращает difference_type, ведь это знаковое число, а количество вхождений чего-то во что-то может быть 0+, те

132
Алгоритм hypot для 3 и более элементов

Алгоритм hypot для 3 и более элементов

Существует ли аналог алгоритма std::hypot() для вектора с 3+ элементами в стандартной библиотеке? Если нет, то можно предложить подобный по функционалу...

133
Stak around the variable was corrupted

Stak around the variable was corrupted

Такая вот проблема, пишу алгоритм для расчёта полинома Ньютона и сталкиваюсь с этой ошибкой

140
Стек, ошибка Access violation at address с разными размерами

Стек, ошибка Access violation at address с разными размерами

Дана задача: создать стек из чисел, найдти среднее арифметическое и удалить елементы меньше егоC++ Builder6

134