Я хочу функцию, которая читает в файл и возвращает сумму значений ASCII - PullRequest
0 голосов
/ 20 сентября 2010

Мне нужна функция, которая читает файл и возвращает сумму значений ascii.Я посмотрел на эту страницу:

Как открыть файл и найти самую длинную строку, а затем распечатать его

и ответ на мой вопросвероятно, в главных ролях мне в лицо, но я не могу следовать коду достаточно, чтобы он работал для меня.Также, если бы вы могли сказать мне, как искать нужные мне функции вместо того, чтобы спрашивать здесь, это было бы круто.Спасибо.

Или это то, что мне нужно построить?Текущий код:

#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 ]

3 голосов
/ 20 сентября 2010

Не совсем понятно, что вы подразумеваете под «суммой значений 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 голос
/ 20 сентября 2010

В стандартной библиотеке нет встроенной функции для этого.Вы должны написать его самостоятельно или положиться на какую-то другую библиотеку.

Функции, доступные в стандартной библиотеке, описаны в нескольких местах в сети и во многих книгах, но вы должны знать, что ищетево-первых. Начните с книги для начинающих и перейдите оттуда.

0 голосов
/ 20 сентября 2010

Буфер не требуется;медленный, но переносимый: считывает расширенные значения ASCII за 127 как положительное для построения суммы, например:

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;
}
0 голосов
/ 20 сентября 2010

Вот функция, которая более или менее выполняет свою работу, читая по одному числу в строке.Прекращает чтение при первой ошибке, не указывая, что это так;он игнорирует все после первого целого числа в строке;не защищает от переполнения 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...