views:

121

answers:

4

I want a function that reads in a file and returns the sum of ascii values. I have looked at this page:

http://stackoverflow.com/questions/1292630/how-to-open-a-file-and-find-the-longest-length-of-a-line-and-then-print-it-out/1292676#1292676

and the answer to my question was probably starring me in the face, but I cant follow the code enough to make it work for me. Also if you could tell me how to look for the functions I want instead of having to ask on here that would be cool. Thank you.

Or is this something I need to build? Current code:

#include <stdio.h> 

#include <stdlib.h>

double get_number(int num);

main ()
 {

     double n1,n2,n3;
     double average;

      printf("\nCompute the ascii average of 3 files\n");
      printf("--------------------------------\n");
      n1 = get_number(1);
      n2 = get_number(2);
      n3 = get_number(3);
      average = (n1 + n2 + n3)/3;
      printf("The average is %0.2f\n",average);
}

    double get_number(int num) { 
      double value = 0;
      int c;
      printf("Please input entry %i: ", num);
      while ((c = getchar()) != EOF) {
    value = value + (c);
      }

  return(value);
  }
+3  A: 

It's not entirely clear what you mean by "sum of ascii values". If you mean you have a file of arbitrary data and you want to do something like a checksum of all that data (whatever it happens to be), then it is pretty simple, something like:

int ch;
long checksum=0;

while (EOF != (ch=getc(infile)))
    checksum += ch;

If, OTOH, you mean you have file full of numbers that have been converted to ASCII, such as:

12   100
14

and what you'd want from that would be 126, then you'd do something like:

int value;
long total = 0;

while (1==scanf("%d", &value))
   total += value;
Jerry Coffin
ok, I think I am looking for the second version. Thank you.
pisfire
+1  A: 

There is no pre-built function in the Standard library to do it. You have to code it yourself or rely on some other library.

THe functions available in the Standard library are described in several places over the 'net and in lots of books, but you have to know what you are looking for in the first place. Start with a beginner's book and go from there.

pmg
I was never able to get anywhere with this assignment. I tried a few things, but I really sure If I am even inputting the file correctly.
pisfire
A: 

Here is a function that more or less does the job, reading one number per line. It stops reading on the first error without indicating that it did so; it ignores everything after the first integer on a line; it does not protect against overflow of long; it does not protect against ridiculously overlong lines (more than 4095 characters).

long read_and_sum(FILE *fp)
{
    char buffer[4096];

    long sum = 0;
    while (fgets(fp, buffer, sizeof(buffer)) != 0)
    {
         long value;
         if (scanf(buffer, "%ld", &value) != 1)
             break;
         sum += value;
    }
    return sum;
}
Jonathan Leffler
A: 

No buffer needed; slow, but portable: Reads extended ASCII-values over 127 as positive for building the sum, eg:

unsigned long sumExtendedASCIIValuesFromFile(const char *fname)
{
  unsigned char c;
  unsigned long lu=0;
  FILE *fp = fopen(fname,"rb");
  if( !fp ) return -1;
  while( 1==fread( &c, 1, 1, fp ) )
    lu += c;
  fclose( fp );
  return lu;
}