Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 一个打印的问题

回复:
user: user-1
content: 引用 2 楼 skzeng@ros 的回复:你将q定义为char类型，而打印时却要求打印unsigned int，那么要进行强制类型转换。 无符号存储是将有符号存储的负数部分的个数全部加到正数部分，比如int型范围是-1~1，那么unsigned范围就是2。 望采纳～～～ 你的描述是不是有问题呢。  char类型先转int类型，再转unsigned int，由于转Int是-1，最高位是符号位，转unsigned int后最高位为有效数据位。因此输出的是很大的值。

user: user-1
content: 因为q是char类型，而输出的是%u是unsigned int类型，根据类型提升，逐步提升。0xFF提升到int是-1；-1转%u就是你得到的结果。

user: user-2
content: 因为 char a=0xff，它就是char的-1；负数是用补码表示，一般的编译器下，char代表的是7位二进制数，最高位是符号位 最高位为1表示是一个负数，负数使用补码表示，负数的补码，每位取反，然后加一，那么-1 ，源码 应该是 1000，0001，每位取反（注意不包括最高位） 是 1111，1110 .然后加一，就是1111，1111=0XFF,所以0xff就是char 的-1，那么如果把一个char赋给int，是不是应该保持数值不变啊？你把（char)-1给了int 应该还是-1，对吧，int 的-1,如果按上述计算方法，应该是0xffffffff

user: user-3
content: 引用 4 楼 自信男孩 的回复:[quote=引用 2 楼 skzeng@ros 的回复:] 你将q定义为char类型，而打印时却要求打印unsigned int，那么要进行强制类型转换。 无符号存储是将有符号存储的负数部分的个数全部加到正数部分，比如int型范围是-1~1，那么unsigned范围就是2。 望采纳～～～ 你的描述是不是有问题呢。  char类型先转int类型，再转unsigned int，由于转Int是-1，最高位是符号位，转unsigned int后最高位为有效数据位。因此输出的是很大的值。[/quote]   为啥0xFF提升到int是-1呢，请赐教

user: user-3
content: 你将q定义为char类型，而打印时却要求打印unsigned int，那么要进行强制类型转换。 无符号存储是将有符号存储的负数部分的个数全部加到正数部分，比如int型范围是-1~1，那么unsigned范围就是2。 望采纳～～～

user: user-4
content: char向int转换，进行了符号位扩展，0xff扩展为0xffffffff，按无符号输出就是unsigned int最大值
user-0 提问: 如何用C++输出特殊字符呢？

回复:
user: user-1
content: 红桃♥️♠️方块♦️♣️

user: user-1
content: 设置命令行支持中文

user: user-2
content: 图形用户界面（GUI）编程可以学习C++ Builder，架构先进（和C#一样拖控件），入门比较容易。  　　C++ Builder是真正的可视化的开发工具。C++ Builder可以用鼠标拖拉控件加上设置属性轻松的“设计”出一个程序的图形用户界面，利用可视的组件/控件像“搭积木”一样，以“所见即所得”的方式搭建应用程序的界面，这也是C++ Builder这个名字中Builder的概念。这样，只需要用C++语言编写业务逻辑代码，类似于DOS下文本界面编程，只要专注于实现业务逻辑功能就可以了，代码非常简洁。数据的输入和表现，都在图形用户界面，非常直观、易用。这就是RAD开发（Rapid Application Development，快速应用程序开发）。  书籍推荐： 《C++Builder 6程序设计教程（第二版）》 （陆卫忠，刘文亮　等编著 /2011-04-01 /科学出版社）（当当网） 《C++Builder 6编程实例精解》（赵明现），PDF，是数字版的，非扫描版的，里面还有一个俄罗斯方块游戏的完整实现。 《精彩C++Builder 6程序设计》（台湾 吴逸贤），里面有10几个简单小游戏的实现，可以自己看懂以后再重写，才是自己掌握的。 《C++ Builder 5高级编程实例精解》（刘滨 编著）都是较大的实用的程序。  C++ Builder 6.0几个示例程序项目源代码下载：       C++ Builder第一个程序（模拟聊天室）v1.11 C++ Builder模拟数字双时钟示例（未完成）v0.2.1 C++ Builder纸牌游戏Demo v0.03 C++ Builder不规则图像透明贴图（位图的透明显示）三种方法及简单动画v1.3 C++ Builder写的《ZEC 四则运算练习程序》 海底海星情景v0.9.2 C++ Builder简单电话簿Demo例子v1.11

user: user-0
content: 已解决，把小黑窗的字体改为点阵字体就好啦！

user: user-0
content: 引用 1 楼 Simple-Soft 的回复:设置命令行支持中文您好，应该怎么操作呢？

user: user-3
content: 支持加学习，谢谢楼上分享，红桃♥️♠️方块♦️♣️
user-0 提问: 请大佬帮我看看这里循环出了什么问题

回复:
user: user-0
content: #include <stdio.h> #include <stdlib.h> #include <time.h>  int main(){ 	int arr[9][9]={0};	//	规范数独大小  	int i, j;	//	i:一维下标	j:二维下标   	int label_1, label_2, label_3; 	//	label_1：当前行是否满足填写条件		label_2：当前列		label_3：当前九宫格	 	srand(time(NULL));		//	随机数种子   	for (int num=1; num<=9; num++){	//	依次填入数字 1-9  		for(int count=1; count<=9; count++){		//	每个数字填入9次  			do{ 				i = rand()%9;	//	一维下标 				j = rand()%9;	//	二维下标  				label_1 = 0;	//	初始值 				label_2 = 0; 				label_3 = 0; 				if (arr[i][j]!=0)	continue; 					for (int k=0; k<9; k++) 						if (arr[i][k]!=num)	label_1++; 					for (int m=0; m<9; m++) 						if (arr[m][j]!=num)	label_2++; 					for (int p=i/3*3; p<i/3*3+3; p++) 						for (int q=j/3*3; q<j/3*3+3; q++) 							if (arr[p][q]!=num)	label_3++;												 			}while (label_1<9 || label_2<9 || label_3<9); 			 			arr[i][j] = num; 		}		 	}  	printf("\n\n\n"); 	for (int i=0; i<9; i++){ 		for (int j=0; j<9; j++){ 			printf("%d   ", arr[i][j]); 			if ((j+1)%3==0)	printf("   "); 		} 		printf("\n\n"); 		if ((i+1)%3==0)	printf("\n"); 	} 	return 0; }
user-0 提问: c语言基础知识字符串

回复:
user: user-0
content: 引用 2 楼 qiu_shaofeng的回复:%s 是打印字符串  printf("%c",*p);打印一个字符 好的↖(^ω^)↗，谢谢

user: user-0
content: 引用 1 楼 user-2的回复:返回的是剩下字符串的首地址，所以剩下的全打印出来了 好的😄，谢谢你😊

user: user-1
content: %s 是打印字符串  printf("%c",*p);打印一个字符

user: user-2
content: 返回的是剩下字符串的首地址，所以剩下的全打印出来了
user-0 提问: 各位大神救救孩子吧。呜呜呜，做了一个系统，改完代码显示没错误了，但是执行又出错了。

回复:
user: user-1
content: 无代码无真相

user: user-2
content: alterpassword()函数只声明，没有定义？ VC++6.0是我的最爱，没有之一！
user-0 提问: C语言初学着请求帮助

回复:
user: user-1
content: 引用 5 楼 m0_46570923 的回复:[quote=引用 3 楼 user-3的回复:] 同样vs2019你编译时有这个错误吗 有！但是不会改，也看不明白是什么意思，只能自己瞎改，[/quote] 栈空间定义的太多了，把一些临时变量大小设的小一点

user: user-0
content: 需要买什么呢？？

user: user-2
content: 引用 7 楼 m0_46570923 的回复:[quote=引用 5 楼 m0_46570923的回复:][quote=引用 3 楼 user-3的回复:] 同样vs2019你编译时有这个错误吗 有！但是不会改，也看不明白是什么意思，只能自己瞎改，[/quote] 自学的，没人讲，[/quote]     现在这个年代最好买全套教材，包括：教程，习题，视频。光自学看书，进度太慢了呀！

user: user-0
content: 引用 5 楼 m0_46570923的回复:[quote=引用 3 楼 user-3的回复:] 同样vs2019你编译时有这个错误吗 有！但是不会改，也看不明白是什么意思，只能自己瞎改，[/quote] 自学的，没人讲，

user: user-0
content: 我想知道这个怎么改

user: user-0
content: 引用 3 楼 user-3的回复: 同样vs2019你编译时有这个错误吗 有！但是不会改，也看不明白是什么意思，只能自己瞎改，

user: user-3
content: 修改了一下，可以正常运行，供参考  #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<string.h> #include<stdlib.h> #define M 100 typedef struct students { 	int number; 	int score; }list; typedef list datatype; typedef struct shunxubiao { 	datatype students[M]; 	int length; }info;  info kong();//置空一个顺序表 void Scanf(info *L);//向顺序表中输入想要输入的数据 void printflist(info *L);//此函数是为了进行函数的输出  int main() { 	info A = kong();//定义一个顺序表啊 	Scanf(&A);//向顺序表中输入想要输入的数据 	printflist(&A); 	return 0; }  info kong()//置空一个顺序表 { 	info L; 	L.length = 0; 	return L; }  void Scanf(info *L)//向顺序表中输入想要输入的数据 { 	 	if ( L->length == M ) 	{ 		printf("顺序表中已经满了，无法进行输入"); 		exit(1); 	} 	char ch = 0; 	while ( 1 ) 	{		 		printf("请输入学生成绩："); 		scanf("%d", &L->students[L->length].score); 		printf("请输入学生的学号："); 		scanf("%d", &L->students[L->length].number); 		L->length++; 		getchar(); 		printf("是否继续输入?（Y||N):");		 		scanf("%c", &ch); 		if ( ch == 'y' || ch == 'Y' ) 		{			 		} 		else 		{ 			break; 		} 	}	  }//这个函数是为了进行数据的输入而准备的  void printflist(info *L)//此函数是为了进行函数的输出 { 	int i; 	for ( i = 0; i < L->length; i++ ) 	{ 		printf("学生的学号: %d, 成绩: %d\n", L->students[i].number, L->students[i].score);			 	} }

user: user-3
content: 同样vs2019你编译时有这个错误吗

user: user-3
content: 子函数都是传值，主函数的的 顺序表A里有数据吗？

user: user-0
content: 使用的vs2019
user-0 提问: 代码报错了，求找出问题

回复:
user: user-1
content: 代码没发现什么问题～

user: user-0
content: 已解决，谢谢

user: user-2
content: 复制你的代码，把int min(int a,int b)改成 int Min(int a,int b)后运行正常，vs2019环境。应该是 min和库函数里重名了吧
user-0 提问: 小白求大佬帮忙看看错哪了

回复:
user: user-1
content: 直接贴代码吧～

user: user-2
content: printf 不是scanf, 直接用 printf("%d", s[p].num)

user: user-3
content: 贴代码比贴图更容易获得帮助，没人愿意看着图把代码敲一遍，复制粘贴就容易的多。 粗看了一下问题应该是 变量 i=1这里，改成 i=0试试看。数组下标是从0开始的。
user-0 提问: 求大佬解答一下这2个问题，最好有解题思路

回复:
user: user-1
content: 第一题是三个实参，不要受括号和加号干扰，选A  第二题选C，那个函数是值传递，计算结果不影响主函数中a的值

user: user-0
content: 谢谢各位😊😊😊

user: user-0
content: 最好写一下解题思路
user-0 提问: 组合数，函数递归。

回复:
user: user-1
content: 循环和递归都可以

user: user-0
content: 引用 1 楼 Simple-Soft的回复:哪儿不懂？就是让你实现求组合数，数学里面的公式 我是不是可以直接把性质二里面的c（m，n）换成c（n-m，n）。然后用循环来找到满足c（1，n）=n？

user: user-1
content: 哪儿不懂？就是让你实现求组合数，数学里面的公式

user: user-2
content: int C(int m, int n) { 	if (m == n) 		return 1; 	else if (m == 1) 		return n; 	 	else 		return C(m, n - 1) + C(m - 1, n-1);  }  int main() { 	 	cout<<C(4,8);     return 0; }

user: user-0
content: 应该没有关系

user: user-3
content: 他这个组合数中m、n的顺序怎么和我学的是相反的
user-0 提问: 一道循环结构的题目，应该是有点小错误，求大神帮看！

回复:
user: user-1
content: 不知道是不是csdn排版的问题，你的花括号也太乱了吧，标志位k没有重置为1  #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { 	int i,j,m,n,sum=0,t=0,k=1;  	scanf("%d%d",&m,&n);  	if(1<=m&&m<=n&&n<=500) 	{ 		for(i=m;i<=n;i++) 		{ 			k = 1; 			if(i<2) 			{ 				k=0; 			}             else 			{ 				for(j=2;j<i;j++) 				{ 					if((i%j)==0) 					{ 						k=0; 						break; 					} 				} 			}	 			if(1 == k) 			{ 				t++; 				sum = sum+i; 			} 		} 		 		printf("%d %d",t,sum); 	} 	else 	{ 		printf("输入数据错误"); 	} 	return 0; }

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <math.h> int main() {int i,j,m,n,sum=0,t=0,k=1; scanf("%d %d",&m,&n); if(1<=m&&m<=n&&n<=500) {for(i=m;i<=n;i++)    {if(i<2) k=0;     else     for(j=2;j<i;j++)     if((i%j)==0) k=0;      if(k==1) {t++;sum=sum+i;}      k = 1;     }printf("%d %d",t,sum); } else printf("输入数据错误");     return 0; }  需要重置一下
user-0 提问: 操作系统 多线程并发题目

回复:
user: user-1
content: 问题四的 flag 可能会是 71/66 还好理解，21/65 的情况还真摸不着头脑了 首选，fork出来的子进程，内存信息只是父进程的拷贝，和父进程是相互独立互不干涉的，所以父进程修改flag并不影响子进程的flag。 那么好了，fork的时候flag是多少？父进程执行到fork之前，执行了flag=flag+15，也就是flag==16，在这个基础上，子进程复制了父进程的内存信息，所以fork的时候子进程的flag是16。 在if(pid=fork())时点，子进程被创建，此时就有2个进程（父进程和子进程）一起执行if(pid=fokr())以后的代码。父进程fork的结果返回子进程的pid，不为0，所以会进入if(pid=fokr())分支；而子进程返回的pid为0，所以会进入else的分支。那么刚才知道父进程和子进程的flag是把互不干涉的，所以子进程进入else代码的flag=flag+50==66（fork的时候flag是16，所以这里的结果是66）是不变的，至于printf("3rd flag")的结果是什么，那就取决于printf("3rd flag")之前子进程时候发生了中断（父进程kill pid），①如果发生了中断（也就是父进程的kill发生在子进程的printf("3rd flag")之前），那么子进程就会调用func执行flag=flag+5，也就是会在flag==66的基础上多加5==71（不管这个加5发生在flag=flag+50计算之前还是之后，计算结果都不变），所以打印结果就是71；②如果没发生中断（也就是父进程的kill发生在子进程的printf("3rd flag")之后），那么因为子进程已经打印，之后调用func已经不影响打印结果，所以打印结果就是66。③至于打印结果为啥有21？这里推想是子进程在刚要执行flag=flag+50的是时候发生了中断（父进程把子进程kill了），所以会先调用func执行flag=flag+5==21，然后子进程默认的中断处理是结束程序，也就是后续的flag=flag+50和printf("3rd flag")都没来得及执行子进程就退出了，所以此时flag是21，但此时的21应该是没被打印出来的。至于65的结果，那就更捉摸不透了，因为flag是从16开始的（父进程内存拷贝的时候flag是16），怎么加50或加5，都想不出能算出65。
user-0 提问: 有关scanf的输入问题

回复:
user: user-1
content: 注意，i++,根据参数是从左向右压栈，所以出栈是从又向左，因此a->exp[i++]输入后，i的值会自增1，那么前面的coe就不是第i的元素了，而是i+1。因此i++不能放在scanf中，而是应该放到外面，并给while加上大括号～

user: user-2
content: 也许你可以贴一下源码
user-0 提问: 求教

回复:
user: user-0
content: 谢谢啊，刚开始自学，操作起来比较困难

user: user-1
content: for example  void Insert(List *L, Node e) { //这里为啥用二级指针？按理用List L就可以了，因为List本身就是指针类型了，是链表为空则新建链表吗？     if (*L==NULL) {         *L = (List)malloc(sizeof(Node));         strcpy(*L->ID, e.id);         *L->Score = e.Score;         *L->next = NULL;         return;     }     List p = *L;     while (p->next != NULL) {         p = p->next;     }     p->next = (List)malloc(sizeof(Node));     strcpy(p->next->ID, e.ID);     p->next->Score = e.Score;     p->next->next = NULL; }  void Swap(List *L, int i, int j) { //这里应该用List L就可以了，不需要二级指针     int cnt = 0;     List p=*List, pi1=p, pi2=NULL, pj1=p, pj2=NULL, tmp;     while (p!=NULL) {         if (cnt==i-1) pi1=p; //i的上一个节点         if (cnt==i) pi2=p;//i节点         if (cnt==j-1) pj1=p; //j的上一个节点         if (cnt==j) pj2=p; //j节点         cnt++;         p = p->next;     }     if (pi2!=NULL && pj2!=NULL && pi2 != pj2) { //如果找到两个节点，并且两个节点不同，则交换节点         pi1->next = pj2; //i的上一个节点的next指向j节点         pj1->next = pi2; //j的上一个节点的next指向i节点         tmp = pj2->next;         pj2->next = pj1->next; //j节点的next指向原来i节点的next         pi2->next = tmp; //i节点的next节点指向原来j节点的next     } }
user-0 提问: 关于数组的最小值输出问题

回复:
user: user-0
content: 引用 2 楼 qybao 的回复：因为你只是比较相邻的两个元素，不相邻的没有比，所以结果自然不对 改为 min=a[0];//min取第一个元素的值 for (i=1; i<n; i++)     if (min>a[i]) //然后每个元素都跟min比         min=a[i]; printf(“%d”, min);从头开始，每相邻的两个数比较，把小的赋给后一个数，一直到数组的最后一个不就是最小的数吗

user: user-1
content: 因为你只是比较相邻的两个元素，不相邻的没有比，所以结果自然不对 改为 min=a[0];//min取第一个元素的值 for (i=1; i<n; i++)     if (min>a[i]) //然后每个元素都跟min比         min=a[i]; printf(“%d”, min);

user: user-2
content: 引用 6 楼 weixin_48192256 的回复:[quote=引用 4 楼 qybao 的回复：][quote=引用 3 楼 weixin_48192256 的回复：][quote=引用 2 楼 qybao 的回复：]因为你只是比较相邻的两个元素，不相邻的没有比，所以结果自然不对 改为 min=a[0];//min取第一个元素的值 for (i=1; i<n; i++)     if (min>a[i]) //然后每个元素都跟min比         min=a[i]; printf(“%d”, min);从头开始，每相邻的两个数比较，把小的赋给后一个数，一直到数组的最后一个不就是最小的数吗[/quote]也可以，像冒泡一样，那你应该打印a[i-1]而不是打印a[i]，想想for循环结束i是多少？是不是i==n？那数组长度是n，数组最后一个元素下标是多少？[/quote]for循环里面的判断条件不是i<n吗，所以最后出循环的时候i=n-1，好像没有越界吧[/quote]  i = n-1的时候不会出循环，再执行一次i++,这时候i == n了，才出循环

user: user-0
content: 引用 4 楼 qybao 的回复：[quote=引用 3 楼 weixin_48192256 的回复：][quote=引用 2 楼 qybao 的回复：]因为你只是比较相邻的两个元素，不相邻的没有比，所以结果自然不对 改为 min=a[0];//min取第一个元素的值 for (i=1; i<n; i++)     if (min>a[i]) //然后每个元素都跟min比         min=a[i]; printf(“%d”, min);从头开始，每相邻的两个数比较，把小的赋给后一个数，一直到数组的最后一个不就是最小的数吗[/quote]也可以，像冒泡一样，那你应该打印a[i-1]而不是打印a[i]，想想for循环结束i是多少？是不是i==n？那数组长度是n，数组最后一个元素下标是多少？[/quote]for循环里面的判断条件不是i<n吗，所以最后出循环的时候i=n-1，好像没有越界吧

user: user-2
content: 楼上说得对，a[n]数组越界了

user: user-1
content: 引用 3 楼 weixin_48192256 的回复：[quote=引用 2 楼 qybao 的回复：]因为你只是比较相邻的两个元素，不相邻的没有比，所以结果自然不对 改为 min=a[0];//min取第一个元素的值 for (i=1; i<n; i++)     if (min>a[i]) //然后每个元素都跟min比         min=a[i]; printf(“%d”, min);从头开始，每相邻的两个数比较，把小的赋给后一个数，一直到数组的最后一个不就是最小的数吗[/quote]也可以，像冒泡一样，那你应该打印a[i-1]而不是打印a[i]，想想for循环结束i是多少？是不是i==n？那数组长度是n，数组最后一个元素下标是多少？

user: user-0
content: 引用 7 楼 WhiteCCai的回复:[quote=引用 6 楼 weixin_48192256 的回复:] [quote=引用 4 楼 qybao 的回复：][quote=引用 3 楼 weixin_48192256 的回复：][quote=引用 2 楼 qybao 的回复：]因为你只是比较相邻的两个元素，不相邻的没有比，所以结果自然不对 改为 min=a[0];//min取第一个元素的值 for (i=1; i<n; i++)     if (min>a[i]) //然后每个元素都跟min比         min=a[i]; printf(“%d”, min);从头开始，每相邻的两个数比较，把小的赋给后一个数，一直到数组的最后一个不就是最小的数吗[/quote]也可以，像冒泡一样，那你应该打印a[i-1]而不是打印a[i]，想想for循环结束i是多少？是不是i==n？那数组长度是n，数组最后一个元素下标是多少？[/quote]for循环里面的判断条件不是i<n吗，所以最后出循环的时候i=n-1，好像没有越界吧[/quote]  i = n-1的时候不会出循环，再执行一次i++,这时候i == n了，才出循环[/quote] 哦哦哦，我懂了

user: user-3
content: 你要排序吗？不拍序，不用交换，直接用一个变量保存最小值
user-0 提问: 分配内存后如果指针不在指向这块内存区域是，有没有必要释放

回复:
user: user-1
content: 引用 4 楼 gouyanfen 的回复:[quote=引用 3 楼 hello陈胜 的回复:] [quote=引用 2 楼 gouyanfen 的回复:] 就你的代码来说，释不释放没什么区别。 不过你不可能一直只写这么简单的代码吧，养成一个良好的习惯很重要。所以有必要的。  谢谢回复，这段代码只是随手敲的，主要是想通过这个搞清楚单向链表里删除中间一个节点时，直接将前一个节点指向被删除节点的下一个节点时，这个节点的内存是否需要释放的问题，如果需要释放的话，需要怎么操作呢（原来指向这块内存的指针变量已经不在指向它）[/quote] 改变指向之前释放他。[/quote] 假如说你写的是一个链表类模板之类的，如果你不释放他带来的直接后果就是运行之后，程序占用内存会一直增大，直到消耗完电脑的资源。分配内存就是在系统管理的内存上面申请使用一段区域。系统会做以标记，你不主动释放系统会一直标记为被占用状态，小段代码影响不会很大，程序结果系统会自动回收，长期运行的程序，或频繁运行的部分会使内存消耗完。拖死系统。

user: user-1
content: 引用 3 楼 hello陈胜 的回复:[quote=引用 2 楼 gouyanfen 的回复:] 就你的代码来说，释不释放没什么区别。 不过你不可能一直只写这么简单的代码吧，养成一个良好的习惯很重要。所以有必要的。  谢谢回复，这段代码只是随手敲的，主要是想通过这个搞清楚单向链表里删除中间一个节点时，直接将前一个节点指向被删除节点的下一个节点时，这个节点的内存是否需要释放的问题，如果需要释放的话，需要怎么操作呢（原来指向这块内存的指针变量已经不在指向它）[/quote] 改变指向之前释放他。

user: user-0
content: 引用 2 楼 gouyanfen 的回复:就你的代码来说，释不释放没什么区别。 不过你不可能一直只写这么简单的代码吧，养成一个良好的习惯很重要。所以有必要的。  谢谢回复，这段代码只是随手敲的，主要是想通过这个搞清楚单向链表里删除中间一个节点时，直接将前一个节点指向被删除节点的下一个节点时，这个节点的内存是否需要释放的问题，如果需要释放的话，需要怎么操作呢（原来指向这块内存的指针变量已经不在指向它）

user: user-2
content: 引用 8 楼 hello陈胜 的回复:所以要先定义另外一个指针p，它和前一个节点的->next一样指向待释放的空间，当前一个节点的->next已经不在指向待删除区域时，仍有p指向它，达到释放的目的，这样理解对吗？ 你说的是链表吧，链表就是把申请的空间的首地址赋值到上一个节点的next指针，这样开始申请空间的指针又可以去malloc接收新的地址空间。所以，只要还用，就不需要释放，用另一个指针保存就好了。

user: user-0
content: 所以要先定义另外一个指针p，它和前一个节点的->next一样指向待释放的空间，当前一个节点的->next已经不在指向待删除区域时，仍有p指向它，达到释放的目的，这样理解对吗？

user: user-2
content: 前提是这个指针不指向malloc申请的空间了，是否保存到了其他指针里面。如果没有，直接让指针指向别处，那么malloc申请的空间就会泄露，因为不释放就会一直占着，直到程序退出，系统回收。如果程序不退出，会一直不会被新的malloc申请到，这部分内存也找不到，所以会导致内存泄露。一般是写服务器程序时需要特别注意内存泄露问题～

user: user-3
content: free(p); p = NULL; 一般释放内存都是这两句

user: user-1
content: 就你的代码来说，释不释放没什么区别。 不过你不可能一直只写这么简单的代码吧，养成一个良好的习惯很重要。所以有必要的。

user: user-4
content: 这个里面你分配的意义何在？一般情况下，分配了都要释放
user-0 提问: 无法重复读取字符串,什么原因?如何修改？

回复:
user: user-1
content: #include <stdio.h>   int ar(char *p,char n) {     int i, j;     i = j = 0;      while(p[i]){         if(p[i]==n){             j=1;             break;         }         /*    冗余代码         else             ;             */         i++;     }     return j==1?1:0; }  int main(void) {     //char *y;     //int r=1;     char b;     int c;//,i;     //i=0;     char a[100];     printf("输入字符串：");     fgets(a,sizeof(a),stdin);     while(1){         printf("输入字符：");         b=getchar();         getchar();    //for '\n'         c=ar(a,b);         printf("%d\n",c);         printf("输入字符串：");         fgets(a,sizeof(a),stdin);     }     return 0; } 供参考～  需要注意fgets是遇到换行符就直接返回，因此上次输入之后残留在输入缓存里的换行符需要去掉，因此用getchar();吃掉

user: user-2
content: 应该是两个输入之间有多余的字符，所以后面的fgets()就直接过了，你在之间再加一个fgets()过滤掉多余的字符呗  while(1) 	{ 		printf("输入字符："); 		b=getchar(); 		c=ar(a,b); 		printf("%d\n",c);         fgets(a,sizeof(a),stdin); 		printf("输入字符串：");         fgets(a,sizeof(a),stdin);     }

user: user-0
content: 打印结果的是8. 但我用a[0]=(char *)malloc(sizeof(char)*100);这个语句为a[0]在内存中分配了100个字节的存储空间。为什么没有打印100呢？

user: user-2
content: 引用 5 楼 1东风1 的回复:为以下代码中的指针a[0]分配 100个字节的存储空间，但为什么显示只分配了8个字节？ 引用#include"stdio.h" int main(void){ 	char *a[50]; 	a[0]=(char *)malloc(sizeof(char)*100); 	printf("%d",sizeof(a[0])); 	return 0; }   奇怪的操作。。。 应该打印4吧，sizeof(a[0])计算的是char* 的大小，是固定的

user: user-0
content: 运行结果如下图，从运行结果上看，问题出现在循环体里面的那行fgets(a,sizeof(a),stdin);语句。这行并没有读取字符串，不知是什么原因?

user: user-0
content: 为以下代码中的指针a[0]分配 100个字节的存储空间，但为什么显示只分配了8个字节？ 引用#include"stdio.h" int main(void){ 	char *a[50]; 	a[0]=(char *)malloc(sizeof(char)*100); 	printf("%d",sizeof(a[0])); 	return 0; }

user: user-3
content: 不能读，是退出来了吗？你调试一下就知道哪里有问题
user-0 提问: 打印long double类型值

回复:
user: user-1
content: 对于printf()函数的用法，请参考《C++中printf()函数的用法10-4》 希望能够帮到您！

user: user-2
content: 引用 1 楼 user-3 的回复:printf("%lf", num) 要用%llf输出long double，因为double是用%lf，然后加了一个long，所以是%llf，其实%Lf也是可以的（已经验证）；  long double是C99标准支持的，也要看你的编译器是否支持

user: user-3
content: printf("%lf", num)
user-0 提问: 结构体问题

回复:
user: user-1
content: 代码没问题，在LINUX下用gcc/g++编译没问题～

user: user-2
content: 非法的字节序列，如果能看到内存里到底存的什么就好了，按理说如果只是超出字符表示范围应该只是显示乱码而已。

user: user-3
content: 之前遇到过。应该是编码问题，你试试别用中文能不能运行，如果可以就是编码问题了，试试gcc编译文件时，在命令参数加上:-finput-charset=GBK(或者GB2312)

user: user-4
content: VS2015 C++环境不报错
user-0 提问: keil4错误，TEXT1.C(23): error C216: subscript on non-array or too many dimensions

回复:
user: user-0
content: 引用 1 楼 user-1 的回复：我觉得lz应先找本入门级的教材先好好学学 就题目的问题，应该是display函数的sgn变量，明明是个普通的long，却被当成数组使用P0=sgn[0] 另外，变量的作用范围不清，bb是display的局部变量，keyscan1看不见bb，又怎么能给bb清0？ 还有，变量没有初始化就使用，if(bb/100%10==0) 这里bb都没赋过值，计算结果能正确吗？ 除非bb是全局变量谢谢大佬，我是大一学生，要做课设，真的不太会，我应该怎么改一下呢

user: user-1
content: 我觉得lz应先找本入门级的教材先好好学学 就题目的问题，应该是display函数的sgn变量，明明是个普通的long，却被当成数组使用P0=sgn[0] 另外，变量的作用范围不清，bb是display的局部变量，keyscan1看不见bb，又怎么能给bb清0？ 还有，变量没有初始化就使用，if(bb/100%10==0) 这里bb都没赋过值，计算结果能正确吗？ 除非bb是全局变量
user-0 提问: 关于C2040错误

回复:
user: user-1
content: 可以贴出跟多或者全部的代码，尤其是结构体声明的部分

user: user-0
content: 其实还有其他错误，但是我就想着到这个错误是为什么绿波浪线全是错误。。。当然如果这两个也能讲一下的话就更好了，会加分，谢谢！
user-0 提问: MinGW64\bin 目录里的几个程序。。。。求见多识广的老哥！

回复:
user: user-1
content: 1. ar 与 gcc-ar gcc-ar似乎是对ar的封装，以解决各种路径的问题。  $ar Usage: C:\msys64\mingw64\bin\ar.exe [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...        C:\msys64\mingw64\bin\ar.exe -M [<mri-script] $ gcc-ar.exe Usage: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.1.0/../../../../x86_64-w64-mingw32/bin/ar.exe [emulation options] [-]{dmpqrstx}[abcDfilMNoOPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...        C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.1.0/../../../../x86_64-w64-mingw32/bin/ar.exe -M [<mri-script]  可以看见最后调用的还是ar, 但是路径变了。估计是为了适应编译期间的各种相对路径关系而做的封装。  2.关于ld与ld,.bfd 是链接时候支持库的格式不同：  转自 http://blog.sina.com.cn/s/blog_a9303fd90101d0hd.html Binutils supports 2 linkers, ld.gold and ld.bfd.   One of them is configured as the default linker, ld, which is used by GCC.   Sometimes, we want to use the alternate linker with GCC at run-time.   This command -fuse-ld=bfd and -fuse-ld=gold can help to to change between ld.bfd or ld.gold. Gold linker 的介绍： gold is a linker for ELF files. It became an official GNU package and was added tobinutils on March, 2008 and first released in binutils version 2.19. Gold was developed by Ian Lance Taylor and a small team at Google.The motivation for writing gold was to make a linker that is faster than theGNU linker, especially for largeapplications coded in C++.   bfd linker的介绍： The linker accesses object and archive files using the BFD libraries. These libraries allow the linker to use the same routines to operate on object files whatever the object file format.   3.gdb和gdb32 应该就是32位的意思。  4.dllwrap 就是从动态库创建lib文件的，是生成库给别人用的时候要提供的那个lib。  5.用MD5工具一看，gcc这两个文件是一模一样的。 那个长的名字给定了程序本身的架构（64位叫x86_64, 32位叫i686)、编译时运行本工具的架构。这个在跨平台编译的时候才有效。比如，在windows下编译ARM的程序，则要用到 arm-none-linux-gnueabi-gcc.exe。

user: user-0
content: 哪位大佬能回答下

user: user-0
content: 求解
user-0 提问: c语言函数

回复:
user: user-0
content: 引用 1 楼 天翔龙闪 的回复:你把 scanf("%d,%d",&x,&y);改成 scanf("%d%d",&x,&y); 就是把中间的逗号去掉就可以了  或者你不改，输入时，输入6,9，也可以得出正确答案

user: user-1
content: 我们一般都是用空格间隔的，，容易忘记输入

user: user-1
content: input two numbers:6,9 maxmum=9 我运行是正确的啊，这样的函数一般也不会出问题啊，你再运行也是这样嘛？

user: user-2
content: 你把 scanf("%d,%d",&x,&y);改成 scanf("%d%d",&x,&y); 就是把中间的逗号去掉就可以了  或者你不改，输入时，输入6,9，也可以得出正确答案
user-0 提问: c语言 往一个unsigned char类型写入大于255的值 实际会怎么做

回复:
user: user-1
content: 引用 5 楼 弋阳yoga 的回复:引用 2 楼 自信男孩 的回复:高位阶段，保留低位一字节的内容～截取写入的话 是c语言规定如此的？ 还是和编译器实现有关？ 在内存里就是这么存的，比如一个4字节的int数据，高位存在高字节，低位存在低字节（小端系统），所以0x12c是2个字节的大小，所以0x2c放在低字节，即放在了你定义的变量里，0x01就放在高字节，但是你取变量时，是取不到0x01的，只能取到0x2c，因为它是unsigned char

user: user-0
content: 引用 2 楼 自信男孩 的回复:高位阶段，保留低位一字节的内容～截取写入的话 是c语言规定如此的？ 还是和编译器实现有关？

user: user-2
content: 是啊，理论上是会造成影响，所以除以256取余。保留低位

user: user-3
content: 以截取0x2c的方式写入，不会对其他数据造成影响，多出来的会舍弃掉

user: user-1
content: 高位阶段，保留低位一字节的内容～

user: user-4
content: 截取0x2c 转换成二进制取后面，前面溢出舍弃
user-0 提问: 求助源代码

回复:
user: user-1
content: 你这不算法都出来了吗？

user: user-0
content: 引用 1 楼 user-1的回复:具体根据什么计算什么 已知子网内IP数的多少，求出主机位的位数，用32减去主机位数就等于网络位数，也就是子网掩码。举个例子就是，一个C类网络，包括256个主机位置，256是2 的8次方，所以主机位是8，那么网络位就是32-8=24，也就是说子网掩码是24位，用二进制表示就是11111111.11111111.11111111.00000000，换算成十进制就是255.255.255.0

user: user-0
content: 引用 3 楼 user-1的回复:你这不算法都出来了吗？ 我不会编写代码 大哥可以帮帮忙吗

user: user-1
content: 具体根据什么计算什么
user-0 提问: 如何查看函数指针具体调用的函数名称

回复:
user: user-1
content: 引用 4 楼 自信男孩 的回复:在每个函数里都加一条打印，比如printf("%d: %s\n", __LINE__, __func__); 这样每次调用对应的函数，函数里执行这条打印就会显示函数名（还有行号） 这种方法比较麻烦，那就是每个函数里都要加一条这样的打印，但是会比较准确

user: user-1
content: 在每个函数里都加一条打印，比如printf("%d: %s\n", __LINE__, __func__); 这样每次调用对应的函数，函数里执行这条打印就会显示函数名（还有行号）

user: user-0
content: 函数指针调用时的指针地址应该可以打印，通过这个地址能知道是哪个函数吗？每个函数编译完是不是都有一个地址

user: user-2
content: debug应该是最快的，在函数调用的地方打个断点，然后单步跟踪进入函数 或者grep一下出现的地方，然后按处理逻辑顺序捋清哪个处理函数指针被赋了什么值

user: user-3
content: 通过debug调试进入具体调用的函数就知道调用的函数。
user-0 提问: 求助贴！

回复:
user: user-1
content: 引用 4 楼 毛毛596 的回复:[quote=引用 3 楼 5250的回复:]向这种XXXX系统，二话不说就用结构体数组，妥妥滴。 struct XX{   char name[20];   char tel[20]; } 把所有姓名循环列出来，输入名字后，查找结构体数组，把电话列出来不就行了？  你所谓的打字机的效果啥意思？一个接一个列出来而不是一次输出？用sleep函数暂停一会儿就好了。 是的 一个接一个列出[/quote] 那就输出字符间用sleep函数暂停一下，时间你自己把握

user: user-0
content: 引用 3 楼 5250的回复:向这种XXXX系统，二话不说就用结构体数组，妥妥滴。 struct XX{   char name[20];   char tel[20]; } 把所有姓名循环列出来，输入名字后，查找结构体数组，把电话列出来不就行了？  你所谓的打字机的效果啥意思？一个接一个列出来而不是一次输出？用sleep函数暂停一会儿就好了。 是的 一个接一个列出

user: user-1
content: 向这种XXXX系统，二话不说就用结构体数组，妥妥滴。 struct XX{   char name[20];   char tel[20]; } 把所有姓名循环列出来，输入名字后，查找结构体数组，把电话列出来不就行了？  你所谓的打字机的效果啥意思？一个接一个列出来而不是一次输出？用sleep函数暂停一会儿就好了。

user: user-2
content: 建立一个结构体，每个姓名对应一个手机号。当选中姓名时把手机号打出来就是了。没那么复杂

user: user-3
content: 这样试试看：当选中姓名时，对应电话号码赋值给一个字符数组，然后循环输出每个字符

user: user-0
content: 谢谢各位🙏 俺搞定了
user-0 提问: fsacnf（）读取不了文本文件内容，只输入最后赋值的信息

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h>  int main() {     char s[200]= "";     int i=0;     long l;     char name[20];     int money;     FILE *txt;     void srml(char s[200]);      srml(s);     if((txt=fopen(s,"w+"))==NULL)     {         printf("没有找到文件!\n");         exit(0);     }     else         printf("打开文件成功!\n");      printf("请输入你要写入的职工信息！\n");     for(i=0;i<3;i++)     {         scanf("%ld%s%d",&l,name,&money);         fprintf(txt,"职工号：%ld 姓名:%s 工资：%d\n",l,name,money);   //注意每个元素之间加空格         //fflush(txt);     }     rewind(txt);    //把文件指针重置到开头位置，否则读不到刚才写入的内容     for(i=0;i<3;i++)     {         fscanf(txt,"职工号：%ld 姓名:%s 工资：%d\n",&l,name,&money);    //注意每个元素之间加空格         printf("职工号：%ld姓名：%s工资：%d\n",l,name,money);     }     fclose(txt);      return 0; } void srml(char s[200]) {     int i;     char c;     printf("请输入文件地址!\n");     for(i=0;(c=getchar())!='\n';)     {          if(c!='\\')             s[i++]=c;         else         {             s[i++]='\\';             s[i++]='\\';         }     }     s[i] = 0; }

user: user-0
content: 加了rewind(txt);它现在变成只读出第一个信息了，然后我在想是不是因为换行符，然后我把换行符去掉，能读出其他信息都是有些是乱码，而且是死循环那种。我刚学文件的操作，老师没有细讲，文件指针的位置是怎么看出来的？

user: user-1
content: #include<stdio.h> #include<stdlib.h>  int main() {     char s[200]= "";     int i=0;     long l;     char name[20];     int money;     FILE *txt;     void srml(char s[200]);      srml(s);     if((txt=fopen(s,"w+"))==NULL)     {         printf("没有找到文件!\n");         exit(0);     }     else         printf("打开文件成功!\n");      printf("请输入你要写入的职工信息！\n");     for(i=0;i<3;i++)     {         scanf("%ld%s%d",&l,name,&money);         fprintf(txt,"职工号：%ld姓名:%s工资：%d\n",l,name,money);     }     rewind(txt);    //把文件指针重置到开头位置，否则读不到刚才写入的内容     for(i=0;i<3;i++)     {         fscanf(txt,"职工号：%ld姓名:%s工资：%d\n",&l,name,&money);         printf("职工号：%ld姓名：%s工资：%d\n",l,name,money);     }     fclose(txt);      return 0; } void srml(char s[200]) {     int i;     char c;     printf("请输入文件地址!\n");     for(i=0;(c=getchar())!='\n';)     {          if(c!='\\')             s[i++]=c;         else         {             s[i++]='\\';             s[i++]='\\';         }     }     s[i] = 0; }  供参考～  注意文件指针的位置

user: user-0
content: fscanf读取不了信息

user: user-0
content: fscanf(txt,"职工号：%ld姓名:%s工资：%d\n",&l,name,&money);这条语句没有用，不知道为什么。

user: user-0
content: srml（）是用来输入目录的函数\自动加成\\。
user-0 提问: C语言模块化的问题

回复:
user: user-0
content: 引用 29 楼 ba_wang_mao的回复:搞嵌入式开发必须用C语言，单片机上以及物联网小设备上全是用C语言开发的。      嵌入式下使用的操作系统全部是用C语言开发的，例如：小型的操作系统：FreeRTOS ,RT-THREAD,uCOSII,uCOSIII。                                                                              例如：中型的操作系统 VxWorks ，用于飞机控制、航空航天控制等等。 嗯嗯，一步步来嘛

user: user-1
content: 搞嵌入式开发必须用C语言，单片机上以及物联网小设备上全是用C语言开发的。      嵌入式下使用的操作系统全部是用C语言开发的，例如：小型的操作系统：FreeRTOS ,RT-THREAD,uCOSII,uCOSIII。                                                                              例如：中型的操作系统 VxWorks ，用于飞机控制、航空航天控制等等。

user: user-2
content: 看不懂，C语言忘完了。

user: user-0
content: 哈哈，时间真是漫长啊，那我也是想尝试一下的，时间长就长吧，就算最后没有那么成功，但也不可能白学，值得的

user: user-1
content: 由于没有一家公司用C语言开发【开放、通用】的驱动程序提供给程序员， 导致程序员在WINDOWS系统上用C++开发软件周期太长而且难度超高，在10多年前，没有一定实力的程序员根本无法在WINDOWS下编写一款成熟的软件，导致用C++语言在WINDOWS下开发必须要3年才能入门（因为C++语言就只给你提供了语言方面的知识，什么驱动呀、操作系统底层的东东都没有提供，需要全部依靠程序员自己的能力编写）。         自从SUN公司推出JAVA语言后，由于JAVA语言不光提供语言方面的知识，还提供了计算机系统绝大部分设备的驱动程序、甚至连数据结构方面的算法也提供，还善于WEB开发及后台开发，因此吸引了大批程序员转学JAVA语言。        总结：JAVA语言从自学到搞出一个简单的软件最多需要半年，而C++语言从自学到搞出一个简单的软件至少需要3年以上，JAVA语言从自学到搞出一个稍微复杂的软件最多需要二年，而C++语言从自学到搞出一个稍微复杂的软件有可能你10年也搞不出来。         老板是最讲究时效比的，培养一个C++程序员成本太高，而培养一个JAVA程序成本很底，随手一抓一大把，因此现在搞C++的程序员越来越少，目前基本上龟缩到开游戏发行业了。

user: user-1
content: 大中型操作系统，例如：WINDOWS操作系统基本上也全部用C语言开发的，只是和硬件打交道的部分是用汇编语言编写的。

user: user-3
content: 谢谢分享经验

user: user-0
content: 引用 21 楼 千梦一生的回复:c语言yyds...  c语言一定要学好。很有帮助。因为全是基础。对学习计算机很多东西很有益。  特别是指针。操作底层内存那些东西的灵魂所在。 高级语言为什么难写一些嵌入式，原因之一就是放弃了指针【自由的指针】。  高级语言的一些思想也是很妙的。那可以说的太多，不说。 嗯嗯，我个人的做事风格就是喜欢刨根问底，不知道底层是啥难受，哈哈哈哈哈

user: user-4
content: 学习的路过…………………………

user: user-5
content: 是的，是的，是的，是的，是的，是的，是的。

user: user-6
content: 而且golang也是最接近c语言的，

user: user-6
content: 可以考虑用golang，即底层，又可以上层，

user: user-0
content: 引用 19 楼 zhangmingself的回复:现在C语言不是热门了，java是热门 嗯，这我知道，但我还有时间，我想从底层网上爬

user: user-7
content: 现在C语言不是热门了，java是热门

user: user-0
content: 引用 6 楼 自信男孩的回复:你把typedef的STRUCT改一下名字，改成STU，我怀疑编译识别成了struct 另外，把头文件里的extern int total;从头文件里拿出来，放到每个源文件里（除了main所在的头文件）。 我认为之所以一直有错可能就是因为文件多，它们链接的时候造成的某种错误，反而我单独搞了一个拥有头文件的小程序就能运行

user: user-0
content: 引用 6 楼 自信男孩的回复:你把typedef的STRUCT改一下名字，改成STU，我怀疑编译识别成了struct 另外，把头文件里的extern int total;从头文件里拿出来，放到每个源文件里（除了main所在的头文件）。 我以防万一说一下，我的头文件是每一个相应的文件的目录下都分别有一个同样的头文件，不过应该和这个无关吧

user: user-8
content: 引用 13 楼 sgffgdsxh 的回复:[quote=引用 6 楼 自信男孩的回复:]你把typedef的STRUCT改一下名字，改成STU，我怀疑编译识别成了struct 另外，把头文件里的extern int total;从头文件里拿出来，放到每个源文件里（除了main所在的头文件）。 我认为之所以一直有错可能就是因为文件多，它们链接的时候造成的某种错误，反而我单独搞了一个拥有头文件的小程序就能运行[/quote] 恩，编译的时候应该一起编译，尤其是main函数里需要用到的函数，要一起编译。

user: user-8
content: 引用 16 楼 sgffgdsxh 的回复:十分感谢你们的帮助，我找到问题了。我一开始就错了，我以为头文件要发挥作用，就必须在每个源程序文件目录下有一个头文件，这是对我一开始的一个误导，而我这么做实际也是可行的，但是，我由于对头文件做过了修改，而其他文件里的头文件没有改过，所以导致了这么多的错误，不好意思浪费了你们的时间 还得耐心的去找原因吧，如果提前放弃也学不到这个知识点。继续加油吧～

user: user-0
content: 引用 1 楼 Simple-Soft 的回复:int write_list(STRUCT *head); int write_list(STRUCT student*head);  感谢参与

user: user-0
content: 十分感谢你们的帮助，我找到问题了。我一开始就错了，我以为头文件要发挥作用，就必须在每个源程序文件目录下有一个头文件，这是对我一开始的一个误导，而我这么做实际也是可行的，但是，我由于对头文件做过了修改，而其他文件里的头文件没有改过，所以导致了这么多的错误，不好意思浪费了你们的时间
user-0 提问: 修改了多日，终于用C语言的栈写出了四则混合运算(带括号，小数点，正负数功能)。

回复:
user: user-0
content: 引用 2 楼 白浅星 的回复：优秀如你，加油发错了图片，这个图片的是错的

user: user-1
content: 优秀如你，加油

user: user-2
content: 真是太厉害了👍
user-0 提问: 请问各位大神，C语言入夏日怎么求

回复:
user: user-1
content: 请问，这个是哪个省的高考题目？

user: user-1
content: 如果这是真实的高考题目，那么程序设计的水平太低了。感觉这是一个非常不好的程序设计风格，使用 continue 语句完全没有必要，这是一个纯为考试而出的题目。

user: user-1
content: int fun(int a[], int n)   //a存放某月的每天气温值，n存放的此月天数  {	int i, c=0; 	for ( i=0; i<n; i++ ) { 		if ( a[i]>=22 )  			// (1) 		{	c++; 			if (c>=5)  return i-5;	//(2) 			else continue;			//(3) 		} 		c=0;	//(4) 	} 	return -1; } 看看这个如何。

user: user-2
content: for(i=0;i<n;i++){ 　if(a[i]>=22){ 　　c++; 　　if(c>=5){ 　　　return i-5; 　　} 　} 　else｛ c=0;｝ } return -1; 括号位置错了吧，这样才能运行，那个括号else对应if(c>=5)这样是没法做的，或者 for(i=0;i<n;i++){ 　if(a[i]>=22){ 　　c++; 　　if(c>=5) 　　　return i-5; 　　else　continue;     } c=0; } return -1; 这种是跟题目相近的，但是由于我不知道你return -1上面的｝是你自己画的还是本来就有，本来就有的话答案就是第二种，如果没有那就是题目错了

user: user-3
content: 图片还是横着的，没法看

user: user-4
content: 看起来费劲，还是不看了
user-0 提问: 求助，各位大神请看下，我的程序哪里错了？

回复:
user: user-1
content: p0输入了个寂寞

user: user-2
content: 对于scanf()函数中各参数的含义，请参考《C++中printf()函数的用法10-1》希望能够帮到你！

user: user-3
content: scanf("%f,&p0"); 改成 scanf("%f",&p0);

user: user-4
content: scanf("%f,&p0");写错了，引号在都逗号前面
user-0 提问: 一道C语言题，求助各位大神！

回复:
user: user-1
content: #include<stdio.h> #include<string.h>  int main() {     char a[100][100];     char b[100];     int m,i,k;      scanf("%d",&m);     getchar();    //for '\n'     i=0;     for(i=0;i<m;i++)     {         gets(a[i]);     }     for(i=0;i<m;i++)     {         //for(k=i;k<m+1;k++)    //越界了         for(k=i;k<m;k++)         {             if(strcmp(a[i],a[k])>0)             {                 strcpy(b,a[i]);                 strcpy(a[i],a[k]);                 strcpy(a[k],b);             }         }     }     for(i=0;i<m;i++)         puts(a[i]);     return 0; } 供参考～

user: user-2
content: 一楼说的是的，getchar();就好了 for(k=1;k<m-i;k++)         {             if(strcmp(a[k-1],a[k])>0)             {                 strcpy(b,a[k-1]);                 strcpy(a[k-1],a[k]);                 strcpy(a[k],b);             }  下面排序有问题，这样改冒泡

user: user-3
content: scanf吃掉了你下次输入的字符，在scanf后加上char  ch;getchar(ch);   试下
user-0 提问: win32 里面怎么可以一边画图一边可以改变创建窗口的大小

回复:
user: user-1
content: 新版C++ Builder即RAD Studio还可以写安卓、苹果app。

user: user-0
content: 引用 2 楼 ooolinux 的回复:个人觉得SDK纯API方式编写Windows程序已经过时了，效率太低，了解一下原理就可以了，主要是消息机制。  图形用户界面（GUI）编程可以学习C++ Builder，架构先进（和C#一样拖控件），入门比较容易。  　　C++ Builder是真正的可视化的开发工具。C++ Builder可以用鼠标拖拉控件加上设置属性轻松的“设计”出一个程序的图形用户界面，利用可视的组件/控件像“搭积木”一样，以“所见即所得”的方式搭建应用程序的界面，这也是C++ Builder这个名字中Builder的概念。这样，只需要用C++语言编写业务逻辑代码，类似于DOS下文本界面编程，只要专注于实现业务逻辑功能就可以了，代码非常简洁。数据的输入和表现，都在图形用户界面，非常直观、易用。这就是RAD开发（Rapid Application Development，快速应用程序开发）。  书籍推荐： 《C++Builder 6程序设计教程（第二版）》 （陆卫忠，刘文亮　等编著 /2011-04-01 /科学出版社）（当当网） 《C++Builder 6编程实例精解》（赵明现），PDF，是数字版的，非扫描版的，里面还有一个俄罗斯方块游戏的完整实现。 《精彩C++Builder 6程序设计》（台湾 吴逸贤），里面有10几个简单小游戏的实现，可以自己看懂以后再重写，才是自己掌握的。 《C++ Builder 5高级编程实例精解》（刘滨 编著）都是较大的实用的程序。  C++ Builder 6.0几个示例程序项目源代码下载：       C++ Builder第一个程序（模拟聊天室）v1.11 C++ Builder模拟数字双时钟示例（未完成）v0.2.1 C++ Builder纸牌游戏Demo v0.03 C++ Builder不规则图像透明贴图（位图的透明显示）三种方法及简单动画v1.3 C++ Builder写的《ZEC 四则运算练习程序》 海底海星情景v0.9.2 C++ Builder简单电话簿Demo例子v1.11  我现在其实就是在做一个demo，先用windows api实现我的功能，后面画界面的话，我会引用第三方库duilib画

user: user-0
content: 引用 1 楼 user-2 的回复:画图不应该放到线程里面，直接在onpaint就好了，画的内容要保存起来，刷新的时候都是从保存的数据里面读出来画的，任何时候都可以 但是我在WM_PAINT里面画的时候，会一直卡在WM_PAINT里面，因为我WM_PAINT里面会有while循环，会在里面一直画，直到结束才会break出去，以至于我放大窗口，或者我扯动窗口的边角的时候窗口没有响应我的消息

user: user-1
content: 个人觉得SDK纯API方式编写Windows程序已经过时了，效率太低，了解一下原理就可以了，主要是消息机制。  图形用户界面（GUI）编程可以学习C++ Builder，架构先进（和C#一样拖控件），入门比较容易。  　　C++ Builder是真正的可视化的开发工具。C++ Builder可以用鼠标拖拉控件加上设置属性轻松的“设计”出一个程序的图形用户界面，利用可视的组件/控件像“搭积木”一样，以“所见即所得”的方式搭建应用程序的界面，这也是C++ Builder这个名字中Builder的概念。这样，只需要用C++语言编写业务逻辑代码，类似于DOS下文本界面编程，只要专注于实现业务逻辑功能就可以了，代码非常简洁。数据的输入和表现，都在图形用户界面，非常直观、易用。这就是RAD开发（Rapid Application Development，快速应用程序开发）。  书籍推荐： 《C++Builder 6程序设计教程（第二版）》 （陆卫忠，刘文亮　等编著 /2011-04-01 /科学出版社）（当当网） 《C++Builder 6编程实例精解》（赵明现），PDF，是数字版的，非扫描版的，里面还有一个俄罗斯方块游戏的完整实现。 《精彩C++Builder 6程序设计》（台湾 吴逸贤），里面有10几个简单小游戏的实现，可以自己看懂以后再重写，才是自己掌握的。 《C++ Builder 5高级编程实例精解》（刘滨 编著）都是较大的实用的程序。  C++ Builder 6.0几个示例程序项目源代码下载：       C++ Builder第一个程序（模拟聊天室）v1.11 C++ Builder模拟数字双时钟示例（未完成）v0.2.1 C++ Builder纸牌游戏Demo v0.03 C++ Builder不规则图像透明贴图（位图的透明显示）三种方法及简单动画v1.3 C++ Builder写的《ZEC 四则运算练习程序》 海底海星情景v0.9.2 C++ Builder简单电话簿Demo例子v1.11

user: user-2
content: 画图不应该放到线程里面，直接在onpaint就好了，画的内容要保存起来，刷新的时候都是从保存的数据里面读出来画的，任何时候都可以
user-0 提问: 求大佬指点一下程序题(2)(3)小题和编程题的第五题吗？

回复:
user: user-1
content: 2就是倒序输出，所以是 654321  3就是从二维数组找最小，输出最小值和位置 min=-5.77， m=2，n=1  第三行第二列，数组下标行列要减1  5 int main() {     int i, cnt=0;     double x[40], sum=0, avg=0;     for (i=0; i<40; i++) {         scanf(“%lf”, &x[i]); //输入分数         sum += x[i]; //求总和     }     avg = sum/40; //求平均值     for (i=0; i<40; i++) {         if(x[i]<avg) cnt++; //低于平均分则统计人数     }     printf(“低于平均分的人数：%d\n”, cnt); }
user-0 提问: 【问题描述】文本文件score.txt中保存有一组学生的成绩（为整数）

回复:
user: user-0
content: 谢谢各位大佬

user: user-1
content: 成绩个数未知；所以for循环里i<4不符合题意

user: user-2
content: #include <stdio.h> #include<stdlib.h>  int main() {     FILE *fp,*fg;     int a[4];     int i,s=0;     int m,n;     float c;     if((fp=fopen("c:\\score.txt","r"))==NULL)     {         printf("File open error!\n");         exit(0);     }     for(i=0;i<4;i++)     {         fscanf(fp,"%d",&a[i]);         s+=a[i];     }     c=s/4.0;     m=a[0];n=a[0];     //for(i=0;i<4;i++)     for(i=1;i<4;i++)     {         if(m<a[i])             m=a[i];         if(n>a[i])             n=a[i];     }     if((fg=fopen("c:\\result.txt","w"))==NULL)     {         printf("File open error!\n");         exit(0);     }     fprintf(fg,"%.2f %d %d\n",c,m,n);     printf("%.2f %d %d\n",c,m,n);     fclose(fp);     fclose(fg);     return 0; } 供参考～ 代码没发现什么问题

user: user-3
content: 应该会输出三个值
user-0 提问: 一道C语言函数的题目

回复:
user: user-1
content: void Shift( char s[] ) {int i,j,x;char c;  x=strlen(s);  for(i=0;i<3;i++)     {c=s[0];     for(j=1;j<x;j++)         s[j-1]=s[j];     s[x]=c; //这里要改成s[x-1]=c;因为s[x]存的是字符串结束符     }  }

user: user-2
content: void Shift( char s[] ) {     int i,n=strlen(s);     char a[3];     a[0]=s[0];     a[1]=s[1];     a[2]=s[2];     for(i=3;i<n;i++) s[i-3]=s[i];     s[n-3]=a[0];     s[n-2]=a[1];     s[n-1]=a[2]; } 直接暴力

user: user-3
content: 仔细想一想s[x]是哪个位置，想清楚了就知道为什么错了
user-0 提问: 定义若干个函数（是自定义函数哦），使用二维数组作为传入参数。计算二维数组中两条对角线元素的和与乘积。在主函数中输入4×4的二维数组，调用已定义的函数，把该矩阵传

回复:
user: user-1
content: 供参考  #include <stdio.h>  void Array1(int arr[][4], int *a, int *b) {     int i, j;     for (i=0; i<4; i++)     {         for (j=0; j<4; j++)         {             if (i==j)             {                 *a += arr[i][j];                 *b *= arr[i][j];             }         }     } }  void Array2(int arr[][4], int *a, int *b) {     int i, j;     for (i=0; i<4; i++)     {         for (j=0; j<4; j++)         {             if (j == (3-i))             {                 *a += arr[i][j];                 *b *= arr[i][j];             }         }     } }  int main() {     int arr[4][4] = {0};     int i, j, sum1 = 0, prod1 = 1, sum2 = 0, prod2 = 1;      for (i=0; i<4; i++)     {         for (j=0;j<4;j++)             scanf("%d", &arr[i][j]);     }      Array1(arr, &sum1, &prod1);     Array2(arr, &sum2, &prod2);      printf("sum1 = %d, prod1 = %d\n", sum1, prod1);     printf("sum2 = %d, prod2 = %d\n", sum2, prod2);      return 0; }
user-0 提问: 怎么用fscaf函数提取文档中不同类型的数据 ？

回复:
user: user-1
content: %d 整型 %s 字符串 %c 字符 %f 浮点数

user: user-2
content: fscanf是读取格式化的数据，根据数据的格式来读取。比如整形用%d/%u

user: user-0
content: 打的急了，少了个n，不好意思各位
user-0 提问: 求助大大，手动计算和程序计算结果不同，程序那里有问题？

回复:
user: user-1
content: 浮点数又误差，计算时要考虑误差的叠加

user: user-0
content: 引用 1 楼 user-3 的回复:晕 那你就把中间计算结果都打印出来，然后看看是哪一步计算和你手算不一样的，再去检查相关的逻辑处理是否有问题  就是比如这个值算出来应该是15.24 但是程序给出的就是15.255

user: user-2
content: 计算精度问题。 楼主笔算的时候 FR1 = 0.381 程序运行时， FR[0] = 0.3813811788774169 从而看出，程序的精度更高，计算结果比手算的更精确一些。 结果是 15.255247155096674

user: user-3
content: 晕 那你就把中间计算结果都打印出来，然后看看是哪一步计算和你手算不一样的，再去检查相关的逻辑处理是否有问题
user-0 提问: 新人小白瑟瑟发抖，希望大佬求解

回复:
user: user-1
content: 楼上是c++,翻译成c语言的  #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h>  int mArray(int myArr[][4]) { 	int i = 0, j = 0, min = 0, sum = 0; 	for (i = 0; i < 4; i++) 	{ 		min = myArr[0][i]; 		for (j = 0; j < 3; j++) 		{ 			if (min > myArr[j][i]) 			{ 				min = myArr[j][i]; 			} 		} 		sum += min; 	} 	return sum; }  int main(void) { 	int arr[3][4] = { 0 }; 	int i = 0, j = 0, sum = 0;  	printf("输入数组元素：\n"); 	for (i = 0; i < 3; i ++) 	{ 		for (j = 0; j < 4; j++) 		{ 			scanf("%d", &arr[i][j]); 		} 	}  	sum = mArray(arr); 	printf("%d\n", sum);  	getchar();     return 0; }

user: user-2
content: 解决代码:只是用了一个双层循环输入，一个双层循环比较和累加,具体如下  #include <iostream> using namespace std; int sum(int (*ar)[4]) { 	int all = 0; 	int var; 	int i, j; 	for (i = 0; i < 4; ++i) { 		var = ar[0][i]; 		for (j = 1; j < 3; ++j) 		{ 			if (var > ar[j][i]) 				var = ar[j][i]; 		} 		all += var; 	} 	return all; } int main() { 	int i, j; 	int ar[3][4]; 	for (i = 0; i < 3; ++i) 		for (j = 0; j < 4; ++j) 			cin >> ar[i][j]; 	cout << sum(ar); 	return 0; }

user: user-3
content: 楼上就是对的， int mArray(int myArr[][4]) {     int i = 0, j = 0, min = 0, sum = 0;     for (i = 0; i < 4; i++)     {         min = myArr[0][i];         for (j = 0; j < 3; j++)         {             if (min > myArr[j][i])             {                 min = myArr[j][i];             }         }         sum += min;     }     return sum; }这一段就是你题目要求的 变量名可以自己定
user-0 提问: 在64位windows系统上   c/c++ 函数是不是把形数对齐到64位?

回复:
user: user-0
content: 最终结果 win64位系统形参就是64位对齐 (系统api),跟什么编译器  声明完全没关系,微软就是这样设定的

user: user-1
content: 这里其实就是字节对齐的事，如果你按照1字节对齐，那么肯定就是齐刷刷的内存排列，如果不设置字节对齐，则默认按照你系统位数进行对齐排列，数据类型只有指针和long会根据系统位数变化，其余的都不变

user: user-0
content: func Syscall18(trap, nargs, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18 uintptr) (r1, r2 uintptr, err Errno) 这个是go语言调用win64  系统api 的原型,第一个参数是dll中的函数指针,第二个参数是 dll中函数需要的参数个数,   后面就是具体的18个参数,   所有的参数 都是 uintptr   64位的数据. 所有的返回值都是 3个uintptr. 所以才会有win64 应该强制把不足64位的形参和返回值都对齐到64位的猜想

user: user-2
content: 还得看程序是多少位的。对齐字节是可以设定的。 #pragma pack(4)就是4字节对齐。  至于某种数据类型占多少个字节，需要编译器确定。也可以显式的在类型名称里面展现处理。 8位系统，可以是64位对齐，64位系统也可以8位对齐。

user: user-0
content: 引用 9 楼 qybao 的回复:你想知道是不是字节对齐，打印一下参数的地址确认一下就好了 void func(int64 a, char b) {     char c;     printf(“%p, %p, %p\n”, &a, &b, &c); } 然后算一下每个地址之间相差多少字节 目前计算的结果都是差8个字节  不管是char int16 int32 所以感觉形参不够8个字节的 都是对齐到8个字节

user: user-3
content: 很多api都是宏定义，你调试的时候跟进去看看，64位编译的肯定要转换的

user: user-4
content: 你想知道是不是字节对齐，打印一下参数的地址确认一下就好了 void func(int64 a, char b) {     char c;     printf(“%p, %p, %p\n”, &a, &b, &c); } 然后算一下每个地址之间相差多少字节

user: user-5
content: 引用 楼主 qq_29817615 的回复:c和c++ 函数原型 形参是  int32  int64    int32,  但是我在其他语言底层看见的调用是  int64 int64 int64    ,好像所有整数型 都是int64  不管c++里面是int8 还是int 32 还是int64. win64位系统是不是把不到64位的形参 默认对齐到64位? 红字是你的原话吧？那么请问，"什么叫底层调用是int64，“

user: user-0
content: 引用 6 楼 真相重于对错 的回复:你理解错误了, int 在大部分64位下都是32位长度 只有long long 才能保证64位长度 至于你看到 b+8 ,那个只是为了数据对齐原因 直接在代码里 sizeof(b)  sizeof(a) 就能看到 它们的真实长度 看标题 我问阿就是对齐 不是编译器中的长度

user: user-5
content: 你理解错误了, int 在大部分64位下都是32位长度 只有long long 才能保证64位长度 至于你看到 b+8 ,那个只是为了数据对齐原因 直接在代码里 sizeof(b)  sizeof(a) 就能看到 它们的真实长度

user: user-0
content: void func(int64 a,char b);   b的指针+8  就是a的值,  并且我看go语言底层调用系统api全部参数都是64位,  我自己用64位参数调用socket  发送了几亿次数据包  没有一次出错

user: user-6
content: 引用 2 楼 qq_29817615的回复:测试了不管声明的int8 还是int32  都是64位,就不知道准确不 怎么测试的？

user: user-0
content: 测试了不管声明的int8 还是int32  都是64位,就不知道准确不

user: user-4
content: 不是这样的吧 其它语言int64就是64位，c/c++的int8，int32不是64位的，应该会调用出错的，或者其他语言调用的时候用的是指针调用的吧？
user-0 提问: while (1)循环中使用scanf("0x%s", str); scanf一直返回0的问题

回复:
user: user-1
content: scanf返回的是匹配成功的格式控制符的个数 返回0说明str没赋值成功 scanf的双引号里怎么写，你就怎么输入 双引号里是 0x%s 那你就要写 0x字符串 不要缺少前面的0x scanf就是这样逐个匹配，遇到不匹配的就退出，前面的0x也是需要匹配的一部分  你这个的问题就在于0x没有匹配，是由于你输入缓冲区剩下的 \n 字符 \n 字符和 0 不匹配，于是退出 解决办法是，在是scanf后面加一个getchar( )，或者在%s后面加一个%*c 其原理是，%s不接收这个\n，于是用getchar或者%c接收这个\n，而*可以让%c仅接收而不赋值给变量 至于你仅用%s能成功的原因是，%s读取缓冲区的内容时，会先清空前面多余的空白字符（\n和空格等），没有了\n，但是也没有字符可读取了，于是scanf就停下来等待你输入

user: user-2
content: temp = scanf("0x%s", str);后面要清空缓冲区里的回车。
user-0 提问: 请教各位，一行汇编代码是啥意思？

回复:
user: user-1
content: 应该大致是代表了模块名，对象名，类名，函数名，函数参数等

user: user-0
content: Tianxia  equ  ?Tianxia@@YAPEAVObject@@PEAUCORINFO_CLASS_STRUCT_@@@Z

user: user-2
content: 前者就是后者的别名

user: user-3
content: equ 应该是宏汇编的 只是定义一个符号，来代表内存中某个数据  真正的汇编下没有这个指令

user: user-4
content: dll 导出类符号
user-0 提问: C语言指针名就是指针指向的变量的地址这句话对么？

回复:
user: user-1
content: int a; 	int *pa = &a; 	printf("请输入一个数\n"); 	scanf("%d", pa); 	printf("指针名的地址：%p\n", pa); 	printf("指针名的值  ：%lx\n", *pa); 	printf("指针的地址：%p\n", pa); 	printf("指针的值  ：%d\n", *pa); 	printf("变量的地址：%p\n", &a); 	printf("变量的值  ：%d", a); 	return 0;

user: user-0
content: 引用 1 楼 真相重于对错 的回复:&是取地址。*是取地址里的值。 pa 是 指针，所以&pa 就是二级指针，而不是 pa 。取值符和取址符我都明白，但是我把&pa改为pa输出的结果还是一样的。我就对这个有点迷惑到了。

user: user-1
content: &是取地址。*是取地址里的值。 pa 是 指针，所以&pa 就是二级指针，而不是 pa 。

user: user-2
content: #include<stdio.h> int main() {     int a;     int *pa=&a;     printf("请输入一个数\n");     scanf("%d",pa);      printf("指针名的地址：%p\n",&pa);     printf("指针名的值  ：%lx\n",pa);     printf("指针的地址：%p\n",&pa);     printf("指针的值  ：%d\n",pa);     printf("指针指向变量的值  ：%d\n",*pa);     printf("变量的地址：%p\n",&a);     printf("变量的值  ：%d",a);     return 0; }
user-0 提问: 【求助】C语言用函数实现求一维数组的最大值，要求在主程序调用

回复:
user: user-0
content: 引用 5 楼 自信男孩的回复:int calculate(int x[], int len) {     int max = a[0];     for(int i=1;i<len;i++)     {         if(max < a[i])         {             max = a[i];         }     }     return max; } 供参考～ #include<stdio.h> int calculate(int x[],int len) {     int max = x[0];     for(int n=1;n<len;n++)     {         if(max < x[n])         {             max = x[n];         }     }     return max; } int main() {     float a[5],max; int i;     printf("请输入5个数:\n");     scanf("%d",&i);     max=calculate(a,i);     printf("%f",max);     return 0; }

user: user-0
content: 能帮忙看看下面这个问题吗，我按你说的写了，就是输出结果不准确

user: user-1
content: int calculate(int x[], int len) {     int max = a[0];     for(int i=1;i<len;i++)     {         if(max < a[i])         {             max = a[i];         }     }     return max; } 供参考～

user: user-1
content: 引用 2 楼 WhiteCCai 的回复:只求最大值一个for循环就够了  int calculate(int x[5]) {     int max = 0;     for(int i=0;i<5;i++)     {         if(max < a[i])         {             max = a[i];         }     }     return max; }  这个代码有bug，是否考虑到了当该一维数组里的元素都是负数时，最大值岂不是0了？还符合程序要求吗？

user: user-1
content: 引用 1 楼 user-3 的回复:int calc_max_val(int *_array , int _array_len) { 	int max = 0; 	if (_array == NULL || _array_len == 0) 		return 0; 	for (int i = 0 ; i < _array_len; i++) 	{ 		if (max <= _array[i]) 			max = _array[i]; 	}  	return max; }  int main(void) { //	int array[] = {1,2,0,5,6,77,88,99,-1}; 	int array[] = { -1,-2,0,-5,-6,-77,-88,-99,5894848 }; 	int max = calc_max_val(array,sizeof(array)/sizeof(array[0])); 	printf("array's max value %d\r\n", max); 	system("pause"); 	return 0; }  这个代码有bug，是否考虑到了当该一维数组里的元素都是负数时，最大值岂不是0了？还符合程序要求吗？

user: user-2
content: 只求最大值一个for循环就够了  int calculate(int x[5]) {     int max = 0;     for(int i=0;i<5;i++)     {         if(max < a[i])         {             max = a[i];         }     }     return max; }

user: user-3
content: 引用 3 楼 自信男孩 的回复:[quote=引用 1 楼 user-3 的回复:] int calc_max_val(int *_array , int _array_len) { 	int max = 0; 	if (_array == NULL || _array_len == 0) 		return 0; 	for (int i = 0 ; i < _array_len; i++) 	{ 		if (max <= _array[i]) 			max = _array[i]; 	}  	return max; }  int main(void) { //	int array[] = {1,2,0,5,6,77,88,99,-1}; 	int array[] = { -1,-2,0,-5,-6,-77,-88,-99,5894848 }; 	int max = calc_max_val(array,sizeof(array)/sizeof(array[0])); 	printf("array's max value %d\r\n", max); 	system("pause"); 	return 0; }  这个代码有bug，是否考虑到了当该一维数组里的元素都是负数时，最大值岂不是0了？还符合程序要求吗？[/quote]  是的，有bug，进来max的值取数组其中一个元素的值就好了

user: user-3
content: int calc_max_val(int *_array , int _array_len) { 	int max = 0; 	if (_array == NULL || _array_len == 0) 		return 0; 	for (int i = 0 ; i < _array_len; i++) 	{ 		if (max <= _array[i]) 			max = _array[i]; 	}  	return max; }  int main(void) { //	int array[] = {1,2,0,5,6,77,88,99,-1}; 	int array[] = { -1,-2,0,-5,-6,-77,-88,-99,5894848 }; 	int max = calc_max_val(array,sizeof(array)/sizeof(array[0])); 	printf("array's max value %d\r\n", max); 	system("pause"); 	return 0; }
user-0 提问: 哪位大神能帮小弟看一下这个代码，就是求最小值。

回复:
user: user-0
content: 引用 2 楼 xws245925587的回复:#include <stdio.h> int main(){     int i,n,a[10000],min;     scanf("%d",&n);     min = 0;     for(i=0;i<n;i++)     {   scanf("%d",&a[i]);      if(min>a[i])         min=a[i];   }     printf("%d\n",min);         //=========》重点在这     return 0; } 谢谢你的答案。

user: user-0
content: 引用 3 楼 chxchxkkk的回复:printf("%d\n",a[i]);  ==>>printf("%d\n",min); 谢谢你的答案。

user: user-0
content: 引用 1 楼 user-3的回复:int main() {     int i,n,a[10000],min;     scanf("%d",&n);     for(i=0;i<n;i++) scanf("%d",&a[i]);     min=a[0];     for(i=0;i<n;i++)     {         if(min>a[i]) min=a[i];     }     printf("%d\n",min);     return 0; }  你这个错误犯的。。。。 太谢谢了，这个醋我找了好长时间。

user: user-1
content: printf("%d\n",a[i]);  ==>>printf("%d\n",min);

user: user-2
content: #include <stdio.h> int main(){     int i,n,a[10000],min;     scanf("%d",&n);     min = 0;     for(i=0;i<n;i++)     {   scanf("%d",&a[i]);      if(min>a[i])         min=a[i];   }     printf("%d\n",min);         //=========》重点在这     return 0; }

user: user-3
content: int main() {     int i,n,a[10000],min;     scanf("%d",&n);     for(i=0;i<n;i++) scanf("%d",&a[i]);     min=a[0];     for(i=0;i<n;i++)     {         if(min>a[i]) min=a[i];     }     printf("%d\n",min);     return 0; }  你这个错误犯的。。。。
user-0 提问: 顺序栈的清空问题

回复:
user: user-1
content: 清空栈，不同于销毁栈，清空意味着以后可能还要往里放数据

user: user-2
content: 需要释放，如果程序清空栈后，直接退出了。那么系统会考虑释放你申请的动态空间～

user: user-3
content: 所谓顺序表是指分配一整块内存，像数组那样平均分成若干个小的元素，它们将被用于存储数据 在使用期间，顺序表不存在释放一说，它所分配的内存是固定存在的 你只是根据一个下标标志位来确定当前前几个元素空间被使用 后面下标没标到的地方都只能闲置 顺序表的特点就是元素的规格是一致的，所以从内存排列来说是有序的， 所以你可以直接使用下标定位到某一个元素的内存 这样就便于你查找和修改某一个元素的内容 但是顺序表的缺点就在于，你哪些未使用的内存必然造成浪费 而且每次想要插入和删除也会非常麻烦，需要做元素的位移

user: user-4
content: 书上只是示例作用，而且不同的场景，需要不同的考虑

user: user-0
content: 引用 1 楼 user-4 的回复:肯定是要free的，这里只是把栈清空了，没有回收内存，会导致内存泄漏  数据结构的书上就是这样写的

user: user-4
content: 肯定是要free的，这里只是把栈清空了，没有回收内存，会导致内存泄漏
user-0 提问: 【小白求解】单双精度浮点数的范围表示

回复:
user: user-0
content: 引用 2 楼 六道佩恩的回复:e-38表示 10的-38次方 这是个小数 负数需要前面的3.4为负 谢谢大佬，我明白了。

user: user-1
content: e-38表示 10的-38次方 这是个小数 负数需要前面的3.4为负

user: user-2
content: 百度浮点数再计算机里如何表示
user-0 提问: c语言编程，文件相关的，程序编译后如修改程序，会显示无法保存文件，怎么办？

回复:
user: user-1
content: 应该是编译还没结束，这个文件正在读取，不能被修改（猜的）

user: user-2

user: user-3
content: 重启一下就可以
user-0 提问: 求助！求助！

回复:
user: user-0
content: 谢谢，问题解决了。

user: user-1
content: #include <stdio.h> #include<math.h> int  main() {     float  x;     char g;     scanf_s("%f", &x);     int y = x / 10;     switch (y)     {         case 0:         case 1:         case 2:         case 3:         case 4:         case 5:             g = 'E';             break;          case 6:             g = 'D';             break;          case 7:             g = 'C';             break;          case 8:             g = 'B';             break;          case 9:         case 10:             g = 'A';             break;          default:             printf("Not support!\n");             break;         /*         case'0':         case'1':         case'2':         case'3':         case'4':         case'5':g = 'E'; break;         case'6':g = 'D'; break;         case'7':g = 'C'; break;         case'8':g = 'B';  break;         case'9':         case'10':g = 'A';         */     }     printf("%c %d", g,y);     return 0; } 供参考～  楼主应该是是分不清楚'1'和1的区别。 x /10，当x是100以内的数据，x/10得到的是0~10之间的数据。而'1'是字符，对应的10进制是48

user: user-2
content: case  '10' 存在语法错误。单引号里面是一个字符，‘10’是2个字符。