user-0 提问: 求助，这个编程，哪里出现了逻辑错误？？？

回复:
user: user-1
content: #include<stdio.h> int ch=0,num=0,sp=0,other=0; int main() { 	void statistics(char c); 	char c; 	//char *p; 	//int a=0,b=0,d=0,f=0; 	while((c=getchar())!='\n') 	{ 		statistics(c); 	} 	//printf("the ch: %d\nthe ch: %d\nthe sp: %d\nthe other: %d\n",a,b,d,f); 	printf("the ch: %d\nthe ch: %d\nthe sp: %d\nthe other: %d\n",ch,num,sp,other); 	return 0; }  void statistics(char c) { 	if(c>='a'&&c<='z'||c>='A'&&c<='Z') 		ch++; 	else if(c>='0'&&c<='9') 		num++; 	else if(c==' ') 		sp++; 	else 		other++; 	//printf("the ch: %d\nthe ch: %d\nthe sp: %d\nthe other: %d\n",ch,num,sp,other); }

user: user-1

user: user-1
content: 你用getchar函数只是传一个字符，而且子函数中的 ch=0,num=0,sp=0,other=0;这几个变量需要设置成全局变量，因为你用while循环语句，会导致一个一个字符去子函数那验证，也就是说你输入abcd四个字符，你传给子函数的过程是：先验证是否为'\n'，然后传一个字符a，就对ch，num,sp,other这几个变量进行初始化，导致你每次都是从0开始，个数最多为1，我帮你改了下程序，你可以参考下，亲测可行

user: user-2
content: 引用 2 楼 qq_36624458 的回复:[quote=引用 1 楼 paschen的回复:]你main函数中的a,b,d,f 没有初始化就使用了 我试了，还是不行，输出值都是0[/quote]  你参数是按值传递的，函数中的参数只是一个复制品，并不会影响到函数外面的参数

user: user-3
content: 你这样根本就不行的。 你修改statistics函数中的ch,num,sp,other这些变量，并不会影响到main函数里的ch,num,sp,other 如果学习过指针，可以用指针来实现

user: user-0
content: 引用 1 楼 paschen的回复:你main函数中的a,b,d,f 没有初始化就使用了 我试了，还是不行，输出值都是0

user: user-0
content: 引用 8 楼 qq_36624458的回复:[quote=引用 7 楼 晗生缘的回复:]#include<stdio.h> int ch=0,num=0,sp=0,other=0; int main() { 	void statistics(char c); 	char c; 	//char *p; 	//int a=0,b=0,d=0,f=0; 	while((c=getchar())!='\n') 	{ 		statistics(c); 	} 	//printf("the ch: %d\nthe ch: %d\nthe sp: %d\nthe other: %d\n",a,b,d,f); 	printf("the ch: %d\nthe ch: %d\nthe sp: %d\nthe other: %d\n",ch,num,sp,other); 	return 0; }  void statistics(char c) { 	if(c>='a'&&c<='z'||c>='A'&&c<='Z') 		ch++; 	else if(c>='0'&&c<='9') 		num++; 	else if(c==' ') 		sp++; 	else 		other++; 	//printf("the ch: %d\nthe ch: %d\nthe sp: %d\nthe other: %d\n",ch,num,sp,other); } 我今早已经解决了，谢谢你[/quote] #include<stdio.h> int main() { 	void statistics(); 		statistics(); 	return 0; }  void statistics() { 	char c;    int ch=0,num=0,sp=0,other=0;    while((c=getchar())!='\n')   {	if(c>='a'&&c<='z'||c>='A'&&c<='Z') 		ch++; 	else if(c>='0'&&c<='9') 		num++; 	else if(c==' ') 		sp++; 	else 		other++;   }   printf("the ch: %d\nthe num: %d\nthe sp: %d\nthe other: %d\n",ch,num,sp,other); }

user: user-0
content: #include<stdio.h> int main() { 	void statistics(); 		statistics(); 	return 0; }  void statistics() { 	char c;    int ch=0,num=0,sp=0,other=0;    while((c=getchar())!='\n')   {	if(c>='a'&&c<='z'||c>='A'&&c<='Z') 		ch++; 	else if(c>='0'&&c<='9') 		num++; 	else if(c==' ') 		sp++; 	else 		other++;   }   printf("the ch: %d\nthe num: %d\nthe sp: %d\nthe other: %d\n",ch,num,sp,other); }

user: user-0
content: 引用 7 楼 晗生缘的回复:#include<stdio.h> int ch=0,num=0,sp=0,other=0; int main() { 	void statistics(char c); 	char c; 	//char *p; 	//int a=0,b=0,d=0,f=0; 	while((c=getchar())!='\n') 	{ 		statistics(c); 	} 	//printf("the ch: %d\nthe ch: %d\nthe sp: %d\nthe other: %d\n",a,b,d,f); 	printf("the ch: %d\nthe ch: %d\nthe sp: %d\nthe other: %d\n",ch,num,sp,other); 	return 0; }  void statistics(char c) { 	if(c>='a'&&c<='z'||c>='A'&&c<='Z') 		ch++; 	else if(c>='0'&&c<='9') 		num++; 	else if(c==' ') 		sp++; 	else 		other++; 	//printf("the ch: %d\nthe ch: %d\nthe sp: %d\nthe other: %d\n",ch,num,sp,other); } 我今早已经解决了，谢谢你

user: user-2
content: 你main函数中的a,b,d,f 没有初始化就使用了