Я не могу понять, почему это не печатает правильно.
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 с. Я не понимаю, почему он не распечатывается правильно, я перечитывал главы о массивах и не мог найти ничего об этом типе проблемы. Сначала я попытался выполнить поиск, но я даже не уверен, какие условия я должен искать с этой проблемой.
Массивы x, y и count являются целыми массивами. Так как x [i] <count всегда, значение деления всегда равно 0. поэтому измените x, y, считайте double.
Ну, очевидно, в вашей линии
y[i] = x[i]/count * 100
каждое поле вашего x-массива, вероятно, меньше, чем count, поэтому результат вашего разделения всегда ниже 1, поскольку вы решили использовать целые числа, которые всегда равны 0 и 0 * 100 = еще 0.
изменить типы данных любого из x или count на float или double.
y[i] = (int)(x[i] * 100.0 / count + 0.5);
x[i] / count
- целочисленная операция, которая приводит к 0, поскольку целое число - это целое число, а не число с плавающей запятой. Переставьте формулу так, чтобы этого не произошло, или приведите одно из целых чисел к числу с плавающей точкой.