我想要一个读取文件并返回ascii值之和的函数

时间:2010-09-19 22:45:37

标签: c function

我想要一个读取文件并返回ascii值之和的函数。我看过这个页面:

How to open a file and find the longest length of a line and then print it out

我的问题的答案可能是我的主角,但我不能完全遵循这些代码,以使其适合我。另外,如果你能告诉我如何寻找我想要的功能,而不必在这里询问那将是很酷的。谢谢。

或者这是我需要建立的东西吗? 目前的代码:

#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);
  }

4 个答案:

答案 0 :(得分:3)

“ascii值之和”的含义并不完全清楚。如果你的意思是你有一个任意数据的文件,你想做一些像所有数据的校验和(无论它是什么),那么它很简单,如:

int ch;
long checksum=0;

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

如果,OTOH,你的意思是你的文件已经被转换为ASCII的数字,例如:

12   100
14

你想要的是126,然后你会做类似的事情:

int value;
long total = 0;

while (1==scanf("%d", &value))
   total += value;

答案 1 :(得分:1)

标准库中没有预先构建的功能。您必须自己编写代码或依赖其他库。

标准库中提供的功能在“网络和大量书籍”的几个地方有所描述,但您必须首先了解您要查找的内容。 从初学者的书开始,然后从那里开始。

答案 2 :(得分:0)

这是一个或多或少完成工作的功能,每行读一个数字。它停止读取第一个错误而没有表明它这样做;它会忽略一行上第一个整数后的所有内容;它不能防止long的溢出;它不能防止可笑的超长线(超过4095个字符)。

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;
}

答案 3 :(得分:0)

不需要缓冲;慢,但便携: 读取超过127的扩展ASCII值作为以构建总和,例如:

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;
}