
Patrick B. answered 07/01/21
Math and computer tutor/teacher
using namespace std;
#include <iostream>
#include <string.h>
#include <ctype.h>
#include <limits.h>
#define INPUT1 (1)
#define INPUT2 (2)
// Filename can have a valid pathname Ex. E:\\input2.txt is valid
int GetFilename(char * filename)
{
int iReturn=-1;
printf(" Please input the name of the file to process :> ");
scanf("%s",filename);
int nStrLen = strlen(filename);
for (int iLoop=0; iLoop<nStrLen; iLoop++)
{
char ch = filename[iLoop];
filename[iLoop] = toupper(ch);
}
if (strstr(filename,"INPUT1.TXT")!=NULL)
{
iReturn=INPUT1;
}
if (strstr(filename,"INPUT2.TXT")!=NULL)
{
iReturn=INPUT2;
}
return(iReturn);
}
void ProcessFileStats(FILE * fptr)
{
int minVal = INT_MAX; //32768
int maxVal = INT_MIN; //-32767
int sumRowCount = 0;
int count=0;
int numRows=0;
int numOdd=0;
int numEven=0;
while (!feof(fptr))
{
char inbuff[1024];
if (fgets(inbuff,1024,fptr) !=NULL)
{
numRows++;
int curRowCount=0;
int iNum;
char * token;
char * buffPtr = inbuff;
while ((token = strtok(buffPtr," \t"))!=NULL)
{
iNum = atoi(token);
// printf(" current integer is %d \n",iNum);
if (iNum<minVal) { minVal = iNum; }
if (iNum>maxVal) { maxVal = iNum; }
curRowCount++;
count++;
if (iNum%2==0) { numEven++; } else { numOdd++; }
buffPtr=NULL;
}
sumRowCount += curRowCount;
}
} //while
printf(" Count: %d \n",count);
printf(" Odd: %d \n",numOdd);
printf(" Even: %d \n",numEven);
printf(" Rows: %d \n",numRows);
printf(" Average row size : %d \n",sumRowCount/numRows);
printf(" min: %d \n",minVal);
printf(" max: %d \n",maxVal);
}
Go()
{
char filename[255];
int fd = GetFilename(filename);
FILE * fptr;
switch (fd)
{
case 1:
case 2:
{
fptr = fopen(filename,"r");
if (fptr!=NULL)
{
ProcessFileStats(fptr);
fclose(fptr);
}
break;
}
default:
{
printf(" invalid filename \n");
return -1;
break;
}
}
}
main() { Go(); }