user-0 提问: C语言问题新手求助

回复:
user: user-1
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-2
content: 建议lz去看看C语言基础方面的视频，推荐一个： www.tudou.com/home/93506222/

user: user-3
content: play.c:34:9: warning: too many arguments for format [-Wformat-extra-args]          printf("age=",pArr);          ^ play.c:37:9: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[20]’ [-Wformat=]          scanf("%s",&pArr[k].name);          ^ 你的scanf没有设置读取长度  还有你有个printf后面的量也不对

user: user-4
content: #include <stdio.h> #include <malloc.h> struct stu {     int age;     char name[20];     float score; };   int main() {     int k,len;     struct stu * pArr;     struct stu student;       //动态的构造一维数组     printf("请输入学生的个数:\nlen=");     scanf("%d",&len);     pArr = (struct stu *)malloc(len*sizeof(struct stu));           for(k=0; k<len; k++)     {         printf("请输入学生的基本信息：\n");         printf("age=");         scanf("%d",&pArr[k].age);         printf("name=");         scanf("%s",pArr[k].name);         printf("score=");         scanf("%f",&pArr[k].score);     }     for(k=0; k<len; k++)     {         printf("\n\n第%d学生的基本信息：",k+1);         printf("age=");         printf("%d\n",pArr[k].age);         printf("name=");         printf("%s\n",pArr[k].name);         printf("score=");         printf("%f\n",pArr[k].score);     }         free(pArr);           return 0;   }

user: user-0
content: 引用 2 楼 iamkconghua 的回复:#include <stdio.h> #include <malloc.h>  struct stu { 	int age; 	char name[20]; 	float score; };  int main() { 	int k,len; 	struct stu * pArr;  	//动态的构造一维数组 	printf("请输入学生的个数:\nlen = "); 	scanf("%d", &len); 	pArr = (struct stu *)malloc(len * sizeof(struct stu)); 	 	for (k = 0; k < len; k++) 	{ 		printf("请输入第%d个学生的基本信息：\n", k + 1); 		printf("age = "); 		scanf("%d", &pArr[k].age);  		printf("name = "); 		scanf("%s", pArr[k].name);  		printf("score = "); 		scanf("%f", &pArr[k].score); 		float fx = pArr[k].score;//使用一下pArr[k].score 	}  	for (k = 0; k < len; k++) 	{ 		printf("\n第%d学生的基本信息：\n", k + 1); 		printf("age = %d ", pArr[k].age); 		printf("name = %s ", pArr[k].name); 		printf("score = %f\n", pArr[k].score); //		float fx = pArr[k].score; 	}  	free(pArr); 	return 0; }  我刚刚把你加的那个代码注释后程序又可以正常运行了，睡了一觉又好了？这编译器太郁闷了

user: user-0
content: 引用 2 楼 iamkconghua 的回复:#include <stdio.h> #include <malloc.h>  struct stu { 	int age; 	char name[20]; 	float score; };  int main() { 	int k,len; 	struct stu * pArr;  	//动态的构造一维数组 	printf("请输入学生的个数:\nlen = "); 	scanf("%d", &len); 	pArr = (struct stu *)malloc(len * sizeof(struct stu)); 	 	for (k = 0; k < len; k++) 	{ 		printf("请输入第%d个学生的基本信息：\n", k + 1); 		printf("age = "); 		scanf("%d", &pArr[k].age);  		printf("name = "); 		scanf("%s", pArr[k].name);  		printf("score = "); 		scanf("%f", &pArr[k].score); 		float fx = pArr[k].score;//使用一下pArr[k].score 	}  	for (k = 0; k < len; k++) 	{ 		printf("\n第%d学生的基本信息：\n", k + 1); 		printf("age = %d ", pArr[k].age); 		printf("name = %s ", pArr[k].name); 		printf("score = %f\n", pArr[k].score); //		float fx = pArr[k].score; 	}  	free(pArr); 	return 0; }  确实没问题了，可是我想知道这是为什么呢？

user: user-2
content: #include <stdio.h> #include <malloc.h>  struct stu { 	int age; 	char name[20]; 	float score; };  int main() { 	int k,len; 	struct stu * pArr;  	//动态的构造一维数组 	printf("请输入学生的个数:\nlen = "); 	scanf("%d", &len); 	pArr = (struct stu *)malloc(len * sizeof(struct stu)); 	 	for (k = 0; k < len; k++) 	{ 		printf("请输入第%d个学生的基本信息：\n", k + 1); 		printf("age = "); 		scanf("%d", &pArr[k].age);  		printf("name = "); 		scanf("%s", pArr[k].name);  		printf("score = "); 		scanf("%f", &pArr[k].score); 		float fx = pArr[k].score;//使用一下pArr[k].score 	}  	for (k = 0; k < len; k++) 	{ 		printf("\n第%d学生的基本信息：\n", k + 1); 		printf("age = %d ", pArr[k].age); 		printf("name = %s ", pArr[k].name); 		printf("score = %f\n", pArr[k].score); //		float fx = pArr[k].score; 	}  	free(pArr); 	return 0; }

user: user-2
content: 在scanf("%f",&pArr[k].score);后加入如下代码试试： scanf("%f",&pArr[k].score); float fTemp = pArr[k].score; //使用一下pArr[k].score