0

I need to compute the number of nonnegative numbers from an input file. Everything works fine (for good input files and bad input files) except when there is a no data file (with nothing in it). Then, the number of nonneg numbers reads 1, even though it should be 0. Any ideas on how to fix the code?

// Program SumNums reads and counts nonnegative integers until
// the end of file is reached on file SumNums.txt

#include <iostream>
#include <cctype>
#include <fstream>
#include <string>
using namespace std ;

int main ()
{
    ifstream  	data;
    int  	number;	// input value
    int  	count = 0;		// number of positive values
    string	File_Name; 	

    cout <<"Enter file name: " ;
    cin >> File_Name;
    data.open(File_Name.c_str());

	if (data.fail())			
		cout << "Bad input file." << endl << "Program stopped." << endl; 
	else
	{
		while (!data.eof())
		{
			data >> number;
			if (number >= 0)
				count = count++;
		}
    cout  << "The number of nonnegative integers is " << count  << endl;
	}
	
    return 0;
}
3
Contributors
4
Replies
5
Views
7 Years
Discussion Span
Last Post by Zjarek
1

while (!file.eof()) is a bad solution. Remember that ifstream returns 0 when it can't read desired variable from file.
Your "number" is a random number, because if your file is empty you don't write anything into it.

0

while (!file.eof()) is a bad solution. Remember that ifstream returns 0 when it can't read desired variable from file.
Your "number" is a random number, because if your file is empty you don't write anything into it.

while (!file.eof()) is what my professor taught and expected us to use. How would you fix it, using while (!file.eof()) or something new entirely?

0

dirty way : number>0
better (imo) way: while(file>>number){if ...

Edited by Zjarek: n/a

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.