2010-09-19 20 views
0

我想要一个读入文件并返回ascii值之和的函数。我已经看过此页:我想要一个函数读入文件并返回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); 
    } 
+1

我们正在做的功课还是什么? – dzen 2010-09-19 22:58:13

+0

你打赌。我至少在尝试。 – pisfire 2010-09-20 00:21:22

+0

另请参阅[SO 3747144](http://stackoverflow.com/questions/3747144/c-assignment-averaging-integers)和[SO 3743444](http://stackoverflow.com/questions/3743444/averaging-3-整数)。 – 2010-09-20 02:48:03

回答

1

没有预建在标准库中执行此功能。你必须自己编写代码或依赖其他库。

标准库中可用的函数在'网络和大量书籍中的几处被描述,但是你必须首先知道你在找什么。 从初学者的书开始,并从那里开始。

+0

我从来没有能够得到这个任务的任何地方。我尝试了几件事,但我确定如果我甚至正确输入文件。 – pisfire 2010-09-20 00:37:59

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; 
+0

好吧,我想我正在寻找第二个版本。谢谢。 – pisfire 2010-09-19 23:00:25

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; 
} 
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; 
} 
相关问题