c присваивание, усреднение целых - PullRequest
0 голосов
/ 19 сентября 2010

Я работал над этим вчера около 5 часов и получил код для работы с помощью справки с этого сайта, но я думаю, что способ, которым я сделал это, был обманным путем, я использовал команду scanfВ любом случае, я хочу исправить это правильно.Спасибо, парни!О, код компилируется, но среднее значение, которое выплевывается, неверно.Я хотел бы концептуально понять, что я делаю неправильно, а также закончить задание.

#include <stdio.h> 
#include <stdlib.h>
double get_number(int num);


main () {
  double n1,n2,n3;
  double average;

  printf("\nCompute the average of 3 integers\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 number %i: ", num);
  while ((c = getchar()) != '\n') { 
    if ( (c<'0') || (c>'9') ) { 
      printf("Incorrect character entered as a number - %i\n",c);
      exit(-1);
    }
    else {
      c =value;
    }
  }
  return(value);
}

Ответы [ 2 ]

6 голосов
/ 19 сентября 2010

Ваша функция get_number всегда возвращает 0, потому что вы никогда ничего не назначаете переменной value. Я предполагаю, что вы хотите:

value = value*10 + (c - '0');

Вместо

c = value;

Для уточнения:

Вы читаете цифру цифра за цифрой (с getchar вы читаете один символ). Допустим, вы прочитали цифры 1 2 3:

Когда вы читаете 1, вы делаете value = value*10 + ('1' - '0'), что означает value = 0 + 1 = 1.

Когда вы читаете 2, вы делаете то же самое и получаете value = 1*10 + ('2' - '0'), что означает value = 12.

То же самое для 3.

Что вам нужно понять, так это то, что умножение чего-либо на 10 добавляет 0 в конце этого чего-то. Добавление цифры к чему-либо, заканчивающемуся нулем, заменяет этот 0 на эту цифру.

Вы также должны понимать, что имеете дело с символами, которые на самом деле являются целыми числами. Символ '0' представлен кодом ASCII, скажем, x. '1' представлен x + 1 и т. Д. Если бы вы напечатали значение '0'+'3', это не было бы 3, как вы ожидаете. Вот почему мы вычитаем '0' (то есть x) из символов, чтобы получить действительные цифры.

Надеюсь, это прояснит некоторые вещи.

1 голос
/ 19 сентября 2010
  1. Учитывая символ, соответствующий цифре, вам необходимо получить саму цифру.Например, вы хотите получить число 0, а не число 48 (код ASCII для символа «0»).Для этого есть хитрость, если ваши символы ASCII, что подразумевает тот факт, что цифры начинаются последовательно с «0», и тот факт, что вы можете «вычитать» символы друг из друга.* Вам нужно создать номер, используя цифры, которые вы уже ввели.Было бы полезно, если бы у вас была операция, которая может переместить цифру в столбец 10 с, из столбца 10 с в столбец 100 с и т. Д.Вы можете подумать, что это за операция?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...