У меня проблема с распечаткой массива

0

Я не могу понять, почему это не печатает правильно.

void countChars(ifstream& inData, string filename, int x[], int y[])
{
    char ch;
    int count = 0;

    for(int i=0; i < 58; i++)
    {
        x[i] = 0;
}
    inData.open(filename.c_str());

    while (inData >> ch)
    {
        count++;
        if ((ch >= '!') && (ch <= 'Z'))
        {
            x[ch - '!']++;
        }
    }

    for(int i=0; i < 58; i++)
    {
        y[i] = (x[i] / count * 100);
        cout << y[i] << endl;
    }   
}

Он должен распечатать% файла, который каждый символ составляет. То, что он распечатывает, составляет 58 0 с. Я не понимаю, почему он не распечатывается правильно, я перечитывал главы о массивах и не мог найти ничего об этом типе проблемы. Сначала я попытался выполнить поиск, но я даже не уверен, какие условия я должен искать с этой проблемой.

  • 0
    x[i] / count - целочисленная операция, которая приводит к 0, поскольку целое число - это целое число, а не число с плавающей запятой. Переставьте формулу так, чтобы этого не произошло, или приведите одно из целых чисел к числу с плавающей точкой.
  • 1
    @RetiredNinja Согласен. Ожидайте 0 или 100 и ничего между ними.
Теги:

4 ответа

1
Лучший ответ

Массивы x, y и count являются целыми массивами. Так как x [i] <count всегда, значение деления всегда равно 0. поэтому измените x, y, считайте double.

  • 1
    За исключением случаев, когда все символы одинаковы и находятся в пределах досягаемости.
  • 0
    @bvj: да, но с гораздо меньшей вероятностью
1

Ну, очевидно, в вашей линии

 y[i] = x[i]/count * 100

каждое поле вашего x-массива, вероятно, меньше, чем count, поэтому результат вашего разделения всегда ниже 1, поскольку вы решили использовать целые числа, которые всегда равны 0 и 0 * 100 = еще 0.

1

изменить типы данных любого из x или count на float или double.

1
y[i] = (int)(x[i] * 100.0 / count + 0.5);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню