c赋值,平均整数

时间:2010-09-19 19:29:31

标签: c

我昨天工作了大约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 个答案:

答案 0 :(得分:6)

您的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'由ASCII代码表示,例如x'1'代表x + 1等。如果您要打印'0'+'3'的值,则不会像您期望的那样3。这就是我们从字符中减去'0'x)的原因,以获得实际数字。

希望清除一些事情。

答案 1 :(得分:1)

  1. 给定与数字对应的字符,您需要获取数字本身。例如,您希望获得数字0,而不是数字48(字符“0”的ASCII代码)。如果您的字符是ASCII,这就是一个技巧,这涉及到数字从'0'顺序开始的事实,以及您可以相互“减去”字符的事实。

  2. 您需要使用已输入的数字来建立数字。如果您有一个可以将数字移动到10s列,从10s列到100s列的操作,将会有所帮助,依此类推。你能想到那次行动是什么吗?