user-0 提问: C语言主函数gets（）自动输入了子函数内容！求解！

回复:
user: user-1
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];

user: user-0
content: 引用 11 楼 qq_26122039 的回复:printf_max()函数中，每次执行完 printf("Please enter your choice 1-5："); scanf("%d", &i)；后缓冲区中都有一个换行符，然而gets()就把这个换行符都进去了，终止了gets的输入   如果没有getchar()（吃掉scanf留下来的回车符 ）gets（）会吃掉回车符 那为什么这条puts("****************************");会出现在 printf("max [%d] = Continue input: ", i);后面 ，表示不理解！

user: user-1
content: 参考2楼。  在现实世界中，除时间和空间可能是无限的以外，其它任何事物都是有限的。

user: user-2
content: printf_max()函数中，每次执行完 printf("Please enter your choice 1-5："); scanf("%d", &i)；后缓冲区中都有一个换行符，然而gets()就把这个换行符都进去了，终止了gets的输入

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:char max[10] = { 0 }; 应改为 char max[10][80];  赵4老师 char max[10]和char max[10][80];的区别是什么？ 我一直认为max[10]用指针输入字符串每个max[i]都可以无限放字符串 这样的理解是不是有错误？

user: user-1
content: char max[10] = { 0 }; 应改为 char max[10][80];

user: user-2
content: 引用 13 楼 libinden71的回复:[quote=引用 11 楼 qq_26122039 的回复:] printf_max()函数中，每次执行完 printf("Please enter your choice 1-5："); scanf("%d", &i)；后缓冲区中都有一个换行符，然而gets()就把这个换行符都进去了，终止了gets的输入   如果没有getchar()（吃掉scanf留下来的回车符 ）gets（）会吃掉回车符 那为什么这条puts("****************************");会出现在 printf("max [%d] = Continue input: ", i);后面 ，表示不理解！ [/quote] 因为printf函数执行完后，没有换行，而且因缓冲区的换行符gets停止输入，则马上执行printf-max函数

user: user-0
content: 求帮忙解决！哎！ 怎么感觉学了指针内存之后 感觉要考虑的东西好多好多！特别是内存的问题是不是因为本人太笨了   感觉越学越不懂C了

user: user-0
content: 有getchar（）输出则正常！

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:越界访问数组max[10]，会覆盖数组后的变量p的值。  判断是否越界访问，可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断，可将数组多声明一个元素，并设置数据读写断点在该多出元素对应的地址上。 #include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }   赵4老师 有个问题 真弄不明白啊！求解答啊！完全蒙了！跪求老师帮忙！ int prinf_max(void) { 	int i = 0; 	puts("****************************"); 	puts("1. Output string list."); 	puts("2. ASCII code output string."); 	puts("3. Sequence output string by length."); 	puts("4. Output string by the length of the first word in the string."); 	puts("5. quit!"); 	puts("****************************"); 	printf("Please enter your choice 1-5："); 	scanf("%d", &i);  	return i; }  int main() { 	int i = 0, number = 0; 	char max[10] = { 0 }; 	char *p = max;  	printf("Enter the 10 strings, confirm that please press enter\n"); 	while (i< 10) 	{ 		getchar(); 		printf("max [%d] = Continue input: ", i); 		gets(&p[i++]);  		number = prinf_max();  		switch (number) 		{ 			case 1:puts(""); break; 			case 2:puts(""); break; 			case 3:puts(""); break; 			case 4:puts(""); break; 			case 5:puts(""); break; 		} 	}  	return 0; } 终端：  getchar（）起到什么作用？为什么没有getchar（）输出则是：  没了getchar（）为什么会自动输入puts("****************************");  （执行完一遍后到了gets(&p[i++]); 都还没调用number = prinf_max();为什么会自动输入puts("****************************");  ）我表示无法理解

user: user-1
content: 越界访问数组max[10]，会覆盖数组后的变量p的值。  判断是否越界访问，可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断，可将数组多声明一个元素，并设置数据读写断点在该多出元素对应的地址上。 #include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:char max[10];//只够保存9个半角字符和末尾的'\0'，保存不下10个字符串。 char max[10][80];//够保存max[0..9]共10个字符串，每个字符串中够保存79个半角字符和末尾的'\0'   是这个原因导致 自动输入puts("****************************");？

user: user-0
content: 在线等！

user: user-0
content: 是这个原因导致 自动输入puts("****************************");？

user: user-1
content: char max[10];//只够保存9个半角字符和末尾的'\0'，保存不下10个字符串。 char max[10][80];//够保存max[0..9]共10个字符串，每个字符串中够保存79个半角字符和末尾的'\0'