Чтение int в строке и отображение процента

Итак, в настоящее время я пытаюсь создать программу, в которой она читает файл с именем input.txt, в котором целые числа хранятся следующим образом, и вычисляет, сколько процентов из них больше нуля, меньше нуля и равно нулю.

10
-4
0
34
42
-2
0

вот мой код:

использование пространства имен std;

ifstream inputFile;
int count = 0;
int value,negative,positive,zero;
double negPerc,posPerc,zeroPerc;

inputFile.open("input.txt");
if ( !inputFile.fail()){

while (inputFile >> value)
{
count++;

if(value < 0)
negative++;
if(value == 0)
zero++;
if(value > 0)
positive++;

}

}
else
{
cout << "\nError, unable to open input file ";
}

cout << fixed << setprecision(1);

negPerc = (negative/count)*100;
posPerc = (positive/count)*100;
zeroPerc = (zero/count)*100;cout << "There were " << negPerc << "% negative numbers." << endl;
cout << "There were " << zeroPerc << "% numbers equal to zero." << endl;
cout << "There were " << posPerc << "% numbers greater than zero." << endl;

и вне:

There were 1864443476.0% negative numbers.
There were 204178000.0% numbers equal to zero.
There were 0.0% numbers greater than zero.

Я дважды проверил свой код и попытался диагностировать, почему это так, но я не смог найти никаких проблем. Что я делаю неправильно?

1

Решение

Вот ваш код с комментариями каждого, собранными для изучения.

// Compile with "g++ yourCPPfile.cpp -o yourExecName -g -Wall"#include <iostream>
#include <iomanip>
#include <fstream>
using std::ifstream;
#include <cstdio>
using std::cout;

int main() {
ifstream inputFile;
int count, value, negative, positive, zero;
count = negative = positive = zero = 0;
double negPerc, posPerc, zeroPerc;

inputFile.open("input.txt");

if (!inputFile.fail()) {
while (inputFile >> value) {
count++;
if (value < 0)
negative++;
if (value == 0)
zero++;
if (value > 0)
positive++;
}
}
else {
cout << "\nError, unable to open " << inputFile << "!\n";
}

// Stays this way until you setPrecision() to something else.
cout << std::setprecision(1);

// Troubleshooting!!
cout << negative << "\n";
cout << positive << "\n";
cout << zero << "\n";
cout << count << "\n";

// Calculations.
negPerc = (negative * 100.0 / count);
posPerc = (positive * 100.0 / count);
zeroPerc = (zero * 100.0 / count);

// Your desired result...
cout << "There were " << std::fixed << negPerc << "% negative numbers." << "\n";
cout << "There were " << std::fixed << zeroPerc << "% numbers equal to zero." << "\n";
cout << "There were " << std::fixed << posPerc << "% numbers greater than zero." << "\n";
return 0;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]