我想要一个读取文件并返回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);
}
答案 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;
}