user-0 提问: C语言中数据统计疑问？

回复:
user: user-1
content: i没有初始化...  and  printf ("The min is %d,max is %d   %f\n",min,max,(double)sum/i);

user: user-1
content: 引用 5 楼 Idle_ 的回复:[quote=引用 4 楼 pingheng74 的回复:] [quote=引用 3 楼 Idle_ 的回复:] 1. scanf()返回值是成功获取的个数，因为你格式字符串中只有一个“%d”, 因此scanf()扫描到输入缓冲区中第一个非数字时就停止了并且返回了1表示成功获取了一个参数。这样while条件为真，循环继续执行。第二次scanf()时因为缓冲区中仍然有内容而且是数字，所以scanf()继续获取了一个参数，所以循环可以继续执行直到缓冲区中内容都被读完； 这也就是你循环第二次不需要继续输入的原因。  2. 因为你min, max没有初始化，其值是个随机数，因此进过循环后min, max并不能正确设置成你输入的数字，即if(x < min), if(x > max)不满足条件。  MSDN suggests using a different method if you need more accuracy:  To obtain metrics suitable for adjacent strings in layout (for example, when implementing formatted text), use the MeasureCharacterRanges method or one of the MeasureString methods that takes a StringFormat, and pass GenericTypographic. Also, ensure the TextRenderingHint for the Graphics is AntiAlias.   #include <stdio.h>  int main() { 	int i,n,sum=0,min=0,max=0; 	printf ("Please input number:\n"); 	while (scanf("%d",&n)==1) 	{ 		sum+=n; 		if (n<min)  min=n; 		if (n>max)  max=n; 		i++; 	} 	printf ("The min is %d,max is %d    %d\n",min,max,(double)sum/i); 	 } 为啥在这个里面(double)sum/i  输出的值好像是溢出了，咋了？  [/quote]  i没有初始化...[/quote] and  printf ("The min is %d,max is %d    [color=#FF0000]%f[/color]\n",min,max,(double)sum/i);

user: user-2
content: 初始化工作没做好

user: user-3
content: 引用 1 楼 user-6 的回复:max和min没有初始化。scanf好像是在输入缓冲区去读取数据，在你输入1，2，3后，scanf首先读取1，接着再在缓冲区中读取2。你可以搜索以下scanf。+1

user: user-4
content: 引用 4 楼 pingheng74 的回复:[quote=引用 3 楼 Idle_ 的回复:] 1. scanf()返回值是成功获取的个数，因为你格式字符串中只有一个“%d”, 因此scanf()扫描到输入缓冲区中第一个非数字时就停止了并且返回了1表示成功获取了一个参数。这样while条件为真，循环继续执行。第二次scanf()时因为缓冲区中仍然有内容而且是数字，所以scanf()继续获取了一个参数，所以循环可以继续执行直到缓冲区中内容都被读完； 这也就是你循环第二次不需要继续输入的原因。  2. 因为你min, max没有初始化，其值是个随机数，因此进过循环后min, max并不能正确设置成你输入的数字，即if(x < min), if(x > max)不满足条件。  MSDN suggests using a different method if you need more accuracy:  To obtain metrics suitable for adjacent strings in layout (for example, when implementing formatted text), use the MeasureCharacterRanges method or one of the MeasureString methods that takes a StringFormat, and pass GenericTypographic. Also, ensure the TextRenderingHint for the Graphics is AntiAlias.   #include <stdio.h>  int main() { 	int i,n,sum=0,min=0,max=0; 	printf ("Please input number:\n"); 	while (scanf("%d",&n)==1) 	{ 		sum+=n; 		if (n<min)  min=n; 		if (n>max)  max=n; 		i++; 	} 	printf ("The min is %d,max is %d    %d\n",min,max,(double)sum/i); 	 } 为啥在这个里面(double)sum/i  输出的值好像是溢出了，咋了？  [/quote]  i没有初始化...

user: user-0
content: 引用 3 楼 Idle_ 的回复:1. scanf()返回值是成功获取的个数，因为你格式字符串中只有一个“%d”, 因此scanf()扫描到输入缓冲区中第一个非数字时就停止了并且返回了1表示成功获取了一个参数。这样while条件为真，循环继续执行。第二次scanf()时因为缓冲区中仍然有内容而且是数字，所以scanf()继续获取了一个参数，所以循环可以继续执行直到缓冲区中内容都被读完； 这也就是你循环第二次不需要继续输入的原因。  2. 因为你min, max没有初始化，其值是个随机数，因此进过循环后min, max并不能正确设置成你输入的数字，即if(x < min), if(x > max)不满足条件。   #include <stdio.h>  int main() { 	int i,n,sum=0,min=0,max=0; 	printf ("Please input number:\n"); 	while (scanf("%d",&n)==1) 	{ 		sum+=n; 		if (n<min)  min=n; 		if (n>max)  max=n; 		i++; 	} 	printf ("The min is %d,max is %d    %d\n",min,max,(double)sum/i);  } 为啥在这个里面(double)sum/i  输出的值好像是溢出了，咋了？

user: user-4
content: 1. scanf()返回值是成功获取的个数，因为你格式字符串中只有一个“%d”, 因此scanf()扫描到输入缓冲区中第一个非数字时就停止了并且返回了1表示成功获取了一个参数。这样while条件为真，循环继续执行。第二次scanf()时因为缓冲区中仍然有内容而且是数字，所以scanf()继续获取了一个参数，所以循环可以继续执行直到缓冲区中内容都被读完； 这也就是你循环第二次不需要继续输入的原因。  2. 因为你min, max没有初始化，其值是个随机数，因此进过循环后min, max并不能正确设置成你输入的数字，即if(x < min), if(x > max)不满足条件。

user: user-5
content: 为啥经常有人这么写 while (scanf("%d",&x)==1) 建议楼主可以去详细的了解scanf的用法

user: user-6
content: max和min没有初始化。scanf好像是在输入缓冲区去读取数据，在你输入1，2，3后，scanf首先读取1，接着再在缓冲区中读取2。你可以搜索以下scanf。