Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 刚学C语言，新手求助

回复:
user: user-1
content: 每次都去除10，取余数 比如 12345除10取余数->5 1234除10取余数->4 123除10取余数->3 12除10取余数->2 1除10取余数->1

user: user-1
content: 每次都去除10，去余数

user: user-2
content: 引用 2 楼 the_sea1 的回复: #include "iostream" using namespace std;  void PopNum(int num) { 	int i = 0; 	int a[20] = {0};  	while (1) 	{	 		a[i] = num % 10; 		num = num / 10; 		++i; 		if (num == 0) 		{ 			break; 		} 	}  	while (i--) 	{ 		printf("%2d", a[i]); 	} }  int main() { 	int a; 	cin >> a; 	PopNum(a); 	system("pause");	 	return 0; }	    用C语言的话就把cin换成scanf()函数。

user: user-0
content: 引用 楼主 qq_45664277的回复:这道题怎么做啊，求大佬们帮忙。 我做出来了，较简单的那种

user: user-2
content: #include "iostream" using namespace std;  void PopNum(int num) { 	int i = 0; 	int a[20] = {0};  	while (1) 	{	 		a[i] = num % 10; 		num = num / 10; 		++i; 		if (num == 0) 		{ 			break; 		} 	}  	while (i--) 	{ 		printf("%2d", a[i]); 	} }  int main() { 	int a; 	cin >> a; 	PopNum(a); 	system("pause");	 	return 0; }

user: user-3
content: 不是很难吧，num % 10; num /= 10; check num == 0?

user: user-4
content: #include <stdio.h> int main() {	 	int num[20]={0}; 	int input=0,i=0; 	scanf("%d",&input);  	do{ 		num[i++]=input%10; 	}while((input/=10)!=0); 	for(;i>0;)printf("%2d",num[--i]);  	printf("\n");  	return 0; }     亲测！亲测！亲测！亲测！亲测！！！ 看图，有不对的说声
user-0 提问: 数据结构，非递减顺序表中删除相等元素

回复:
user: user-0
content: 引用 1 楼 自信男孩的回复:删除元素的方法是删除的位置的后面元素向前移动一个位置。 说的没错，这是用的数组里的双指针法

user: user-1
content: 删除元素的方法是删除的位置的后面元素向前移动一个位置。
user-0 提问: 已知顺序表L中元素为int，请写一个时间复杂度为O(n)，空间复杂度为O(1)的算法，将L中奇数元素排在前偶数元素排在后

回复:
user: user-1
content: 可以教一下我怎么把这个代码写出来之后怎么实现吗，它显示我没有定义什么的🙏🙏拜托
user-0 提问: 新手自学中一个数学算法用C语言表示的问题1-1/2+1/3-1/4....+1/99-1/100的值

回复:
user: user-1
content: 问题1：我想问下这个2.0 跟1.0是什么 他有什么具体的含义吗，是什么算法吗？ 将sum的值设置为1.0，对应1-1/2+1/3-1/4....+1/99-1/100中的1，即加红的部分。将deno的值设置为2.0，对那个1-1/2+1/3-1/4....+1/99-1/100中的-1/2，即加红的部分，后面随着deno的值逐次加1，对应1/3，1/4.... 问题2：还有就是1-2分之1+3分之1 的 分号在程序里是怎么体现的啊 分号在程序中，通过 term=sign/deno; 体现，因为sign的值始终是1或者-1,所以随着deno的值逐次加1，对应sign/deno1/3，-1/4.... 另外，你的代码写的很不错，就是有一个小小的手误， while(deon<=100) 应该是 while(deno<=100)

user: user-2
content: 。。。把那个倒数第五行那个{删了（纯手打失误见谅）

user: user-2
content: 另外一办法这样的： #include<stdio.h>//希望对你有帮助233 void main(){   int a,b,s,t; double num;//num是总和，a是分子b分母s控制符号。   a=1,b=1,s=1,t=1,nu0=o;  w)hile(b<=100){   num+=,+b=b+1,s=-s,t=a/b{ }  printf("%ld\n",num);  }

user: user-3
content: #include<stdio.h> int main() { 	int sign=1; 	double deno =  2.0, sum = 1.0,term;    //我想问下这个2.0 跟1.0是什么 他有什么具体的含义吗，是什么算法吗？ 	while(deno<=100.0) 	{ 		sign=-sign; 		term=sign/deno; 		sum=sum+term; 		deno=deno+1; 		printf("%lf", sum); 	} 	 	return 0; } /*我也是一个刚学的, 我觉得哪两个数字没有什么影响，因为你已经定义成了DOUBLE类型了，所以写成整数或者小数形式都行 注意输出的时候放到循环里面是显示每一个阶段之和，放到循环外面是直接输出最后的总和，不过最后的总和都不变 注意输出变量控制符为%lf 这个WHILE循环是从 1/2 开始的   你可以试数 还有大兄弟，注意代码规范， 你里面好几个变量都写错了 可能有说的不对的地方希望大牛指点 */

user: user-4
content: term 代表一个元素 “1”“-1/2”.......  sign 表示正负号  每次while循环先判断符号，通过更新Deon值得到term值，递加到sum上，最后更新deon值 2.0 和 1.0就是普通数字
user-0 提问: 关于socket数据转发，有兴趣的讨论下

回复:
user: user-1
content: 我也用过lcx.但代码貌似很旧，运行不正常，就把他代码移植了一下，实现了个自己的lcx. listen配合slave工作的很好。 怕死循环空转就sleep(0)一下

user: user-0
content: 引用 7 楼 stherix 的回复:如果转发的数据量比较大的话,常规的方法CPU占用都会比较高 IOCP能有效降低CPU占用率,提高并发量 受教，我研究一下IOCP

user: user-0
content: 引用 6 楼 stherix 的回复:[quote=引用 5 楼 yiyefangzhou24 的回复:] [quote=引用 4 楼 stherix 的回复:] 看了下,CPU占用高是因为用的循环,而不是异步访问 现在的软件开发中,这种同步socket基本已经被淘汰了吧 一般这种服务器建议采用IOCP技术 受教，但这还没到服务器级别，仅仅在个人机本地做了一个端口转发而已，一个网页的打开虽然有多个资源需要加载，根据浏览器的不同可能机制不一样，假定一个资源对应一个链接，理论上（实际上）没有很多线程，循环的时候实际上很多线程是挂起的[/quote]  没有看到阻塞啊 select FD_ISSET 都是非阻塞函数 所以就算没有客户端发来数据 你的循环也是一直在空转[/quote] 哦哦，你说的这边，对的，原来有个sleep(5)调试的时候不小心删掉了，加上了之后是好了很多，要是有类似的管道对接输入输出流就好了

user: user-2
content: 如果转发的数据量比较大的话,常规的方法CPU占用都会比较高 IOCP能有效降低CPU占用率,提高并发量

user: user-2
content: 引用 5 楼 yiyefangzhou24 的回复:[quote=引用 4 楼 stherix 的回复:] 看了下,CPU占用高是因为用的循环,而不是异步访问 现在的软件开发中,这种同步socket基本已经被淘汰了吧 一般这种服务器建议采用IOCP技术 受教，但这还没到服务器级别，仅仅在个人机本地做了一个端口转发而已，一个网页的打开虽然有多个资源需要加载，根据浏览器的不同可能机制不一样，假定一个资源对应一个链接，理论上（实际上）没有很多线程，循环的时候实际上很多线程是挂起的[/quote]  没有看到阻塞啊 select FD_ISSET 都是非阻塞函数 所以就算没有客户端发来数据 你的循环也是一直在空转

user: user-0
content: 引用 4 楼 stherix 的回复:看了下,CPU占用高是因为用的循环,而不是异步访问 现在的软件开发中,这种同步socket基本已经被淘汰了吧 一般这种服务器建议采用IOCP技术 受教，但这还没到服务器级别，仅仅在个人机本地做了一个端口转发而已，一个网页的打开虽然有多个资源需要加载，根据浏览器的不同可能机制不一样，假定一个资源对应一个链接，理论上（实际上）没有很多线程，循环的时候实际上很多线程是挂起的

user: user-2
content: 看了下,CPU占用高是因为用的循环,而不是异步访问 现在的软件开发中,这种同步socket基本已经被淘汰了吧 一般这种服务器建议采用IOCP技术

user: user-0
content: 引用 2 楼 user-3 的回复:[quote=引用 1 楼 yiyefangzhou24 的回复:] CPU占用高，是因为我用的控制台，有printf的问题？ 应该是有这方面的原因[/quote] 有类似的库吗？手动置顶一下，热度不够啊

user: user-0
content: 引用 11 楼 smwhotjay 的回复: 我也用过lcx.但代码貌似很旧，运行不正常，就把他代码移植了一下，实现了个自己的lcx. listen配合slave工作的很好。 怕死循环空转就sleep(0)一下主要是输入输出4个流都是用一个循环处理的，确实也费点劲

user: user-3
content: 引用 1 楼 yiyefangzhou24 的回复:CPU占用高，是因为我用的控制台，有printf的问题？ 应该是有这方面的原因

user: user-0
content: CPU占用高，是因为我用的控制台，有printf的问题？
user-0 提问: 用C语言编译完成这个程序，但我现在在学Java，对C的了解真的不多，希望大触们能帮帮我

回复:
user: user-1
content: 编程的思路和java是相同的，只是语法上有区别，java是面向对象的，是对象.方法（参数），而C中直接是函数（参数）。 思路就是按行读取数据，然后对数据近‘，’折分成字符串数组，trim掉每个元素的前导和后缀的空格，判断字符串元素的长度是为0，如果为0则赋值为null或者不插入并记录错误数。看到你的数据库中所有字段均是varchar型，所以可以不用考虑字符串转换数字的问题。 C语言中没有直接的split，但是有类似的函数通过循环可以得到字符串数组，没有trim函数，需要自己编写。
user-0 提问: C语言学习中的一个问题

回复:
user: user-1
content: 嗯，数组名是指向数组首元素地址的指针常量，可作为函数参数传递从而改变数组元素的值

user: user-0
content: 引用 2 楼 林多 的回复：因为，数组作为形参传递。传递的是数组首地址（相当于指针）。  所以三个操作，操作的是同一个对象。意思说是当数组名当做形参在调用函数内被改变的时候主函数内的数组也会被改变，因为数组名相当于一个指针？是这样吗？

user: user-2
content: 因为，数组作为形参传递。传递的是数组首地址（相当于指针）。  所以三个操作，操作的是同一个对象。

user: user-0
content: 两张图顺序反了。
user-0 提问: 显存和内存是什么关系？

回复:
user: user-1
content: 引用 21 楼 qq_43572852 的回复：显存与显示器有关，内存与主机有关跟显示器有啥关系？

user: user-2
content: 显存与显示器有关，内存与主机有关

user: user-3
content: 关系：都具有存储信息的功能。显存有关于电脑的显卡，通常决定于大型游戏的流畅度；内存关系的的是电脑的程序运行数量。

user: user-4
content: 老赵请看这贴：https://bbs.csdn.net/topics/394576253

user: user-5
content: 又建一楼

user: user-6
content: https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1569573460426_R&pv=&ic=0&nc=1&z=&hd=&latest=©right=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&sid=&word=PC%E6%9C%BA+%E5%86%85%E5%AD%98+%E6%98%BE%E5%AD%98

user: user-6
content: 还是那句放之华夏大地而皆准的答案：百度搜相关关键字。 https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1569573402183_R&pv=&ic=0&nc=1&z=&hd=&latest=©right=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&sid=&word=PC%E6%9C%BA%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84

user: user-7
content: 读写显存在Windows下一定是必须通过系统API的，所有的资源必须由系统管理。至于映射是由系统完成还是由硬件完成？以前显卡功能单一的时候，为了效率我猜是由硬件完成的，因为只要显示一下即可；现在的显卡功能不单一，有很多显示缓冲，在多个缓冲之间切换，这个应该是由显卡自身(通过显卡驱动)完成的。

user: user-0
content: 引用 13 楼 Intel0011 的回复:现在的独立显卡的显存容量都很大，但大部分是给显卡自己计算用的，只有显示器显示内容部分的显存被映射到了内核空间用于系统刷新显示内容，当然现在的显卡为了效率，内部通常都有几个类似双缓冲的东西。 简单的说显存中只有一部分是用于CPU写显示内容的，大部分用于显卡自身的特效计算，当然，现在也有很多的利用GPU来完成计算任务的，和楼主的问题无关了  当计算机没有独立显卡时，PC内存就要划分出一部分内存当作显存使用 这个映射是由系统完成还是由硬件完成？位置通过系统获取还是传统的固定位置（某个算法）？读写显存（屏幕显示的这块）是需要通过系统的API吗？

user: user-6
content: 显存在显卡上；内存在主板上。

user: user-8
content: 显存是设备上的，而内存是给所有设备和程序使用的。显存可以映射到内存了，以提高数据的读写速度～

user: user-7
content: 现在的独立显卡的显存容量都很大，但大部分是给显卡自己计算用的，只有显示器显示内容部分的显存被映射到了内核空间用于系统刷新显示内容，当然现在的显卡为了效率，内部通常都有几个类似双缓冲的东西。 简单的说显存中只有一部分是用于CPU写显示内容的，大部分用于显卡自身的特效计算，当然，现在也有很多的利用GPU来完成计算任务的，和楼主的问题无关了  当计算机没有独立显卡时，PC内存就要划分出一部分内存当作显存使用

user: user-9
content: 有些显卡是支持借用内存的，但是内存速度慢于显存速度，借用的太多，会感到明显卡顿； 但是内存不够去借用显存，目前还没见过支持的；常见的是内存借用硬盘的，也就是虚拟内存。

user: user-10
content: 引用 11 楼 六道佩恩 的回复:[quote=引用 10 楼 user-10 的回复:] 应用程序===>请求内存===>系统内存管理===>分配虚拟内存空间===>映射到物理内存===>反回虚拟内存地址 这之间系统内存会管理所有应用的内存到物理内存的映射表 目前操作显存都是采用在内存上映射的方式吗？那映射的位置是固定的吗？[/quote] 目前就windows来讲，显存操作并不会发生映射,显存不可以直接操作的,具体怎么用要看显卡驱动的实现了

user: user-0
content: 引用 10 楼 user-10 的回复:应用程序===>请求内存===>系统内存管理===>分配虚拟内存空间===>映射到物理内存===>反回虚拟内存地址 这之间系统内存会管理所有应用的内存到物理内存的映射表 目前操作显存都是采用在内存上映射的方式吗？那映射的位置是固定的吗？

user: user-10
content: 应用程序===>请求内存===>系统内存管理===>分配虚拟内存空间===>映射到物理内存===>反回虚拟内存地址 这之间系统内存会管理所有应用的内存到物理内存的映射表

user: user-10
content: 引用 7 楼 六道佩恩 的回复:[quote=引用 6 楼 早打大打打核战争 的回复:] 显存映射到内存地址空间就可以当内存用，但是显存的延迟大，随机访问性能不行 最普通的情况就是显存映射到内存吗？那假设显存比内存还大怎么办？ 假如内存和显存都是2G，CPU可访问的范围还是0-2G吗？[/quote] 即然是映射那就是都是虚拟寻址地址了，不会重叠的，虚拟的寻址也是线性的。比如你电脑的内存是512M但是你写个应用程序，可以使用的内存空间，如果是32位的话是4G，这个内核做了映射，并不是直接操作内存的

user: user-0
content: 引用 3 楼 赵4老师 的回复:显存在显卡上；内存在主板上。 您这个是区别呀，不是关系

user: user-0
content: 引用 6 楼 早打大打打核战争 的回复:显存映射到内存地址空间就可以当内存用，但是显存的延迟大，随机访问性能不行 最普通的情况就是显存映射到内存吗？那假设显存比内存还大怎么办？ 假如内存和显存都是2G，CPU可访问的范围还是0-2G吗？

user: user-4
content: 显存映射到内存地址空间就可以当内存用，但是显存的延迟大，随机访问性能不行
user-0 提问: 字符数组

回复:
user: user-1
content: 第一张图的char  t[N]后面多了个符号

user: user-0
content: 引用 7 楼 自信男孩的回复:#define M 10; #define N 5; #define MaxSize 100; 去掉宏定义后的分号;。宏定义是等价替换，如果替换到[]中，你会发现;也在里面。 之后错误变成了 error spawning c1.exe 这是什么意思哇？

user: user-2
content: #define M 10; #define N 5; #define MaxSize 100; 去掉宏定义后的分号;。宏定义是等价替换，如果替换到[]中，你会发现;也在里面。

user: user-3
content: #define M和#define N的时候把M和N后面的“;”删除了，同时再复习复习define的相关内容

user: user-0
content: 引用 1 楼 自信男孩的回复:建议贴出完整代码吧～ 这有点乱，我不知道怎么改

user: user-0
content: 引用 1 楼 自信男孩的回复:建议贴出完整代码吧～ 这有点乱，我不知道怎么改

user: user-0
content: 引用 1 楼 自信男孩的回复:建议贴出完整代码吧～ #include<stdio.h>#include<iostream>using namespace std;#define M 10;#define N 5;#define MaxSize 100;int next[MaxSize];#include<string.h>int BF(char S[ ], char T[ ]){     int index=0;   //主串从下标0开始第一趟匹配     int i=0,j=0;   //设置起始下标    while (S[i] != '\0'&& T[j] != '\0')    {         if (S[i]==T[j]) {i++; j++;}           else {index++; i=index; j=0; }  //i和j分别回溯     } 返回本趟匹配的起始位置（不是下标）      if (T[j] =='\0') return (index+1);     else return 0;}/*void GetNext(char  t[], int next[]) //由模式串t求next的值{     int  i, j, len;     next[0]=-1;     for(j=1; t[j] != '\0'; j++)  //依次求next[j]     {	for(len=j-1; len>1; len--)  //相等子串最大长度为len-1	{	      for(i=0; i<len; i++)   //依次比较		if(t[i] != t[j-len+1])  break;	      if(i==len){		next[j]=len;		break;	      }	}	if(len<1) next[j]=0;  //其他情况，无相等子串       }}*/int KMPIndex(char s[], char t[]){	int next[MaxSize];	int i=0, j=0;	GetNext(t, next);	while(s[i] !='\0'&& t[j] !='\0')	{		if(s[i]==t[j]){			i++; j++;	//i、j各增1		}		else {			j=next[j];	//i不变，j后退			if(j==-1) {i++; j++;}		}	}	if(t[j] == '\0') return i-strlen(t)+1;	//返回本趟匹配的开始位置	else return 0;		//返回不匹配标志}int main(){	char s[M];	char t[N];	int i,j;	for(i=0;i<M;i++)		cin>>s[i];	for(j=0;j<N;j++)		cin>>t[j];   return 0;}

user: user-4
content: N和M换成定值试试

user: user-2
content: 建议贴出完整代码吧～
user-0 提问: 输入a b c怎么输出它的ascll码？？

回复:
user: user-0
content: 引用 2 楼 weixin_40290083的回复:char ch = 'a'; printf("%d",ch); 谢了小弟不胜感激，，，，，

user: user-1
content: printf("a = %d, b = %d, c = %d\n", 'a', 'b', 'c');

user: user-2
content: char ch = 'a'; printf("%d",ch);

user: user-3
content: 赋值给int型变量就可以了 例如:int a = 'a'; a的值就是'a'的ascii码
user-0 提问: 问一下

回复:
user: user-1
content: 第一个printf没有换行或者空格等其他分隔符，导致j循环的数粘在了一起，看上去是一个十位数，其实是两个个位数

user: user-2
content: 在行号前面加断点，按F5调试，然后按F10单步执行。

user: user-0
content: 引用 5 楼 自信男孩的回复:[quote=引用 4 楼 baidu_38774389 的回复:] [quote=引用 3 楼 自信男孩的回复:]建议在第一个printf后面加几个空格，就很明显的知道为什么会出现圈住的数字了。 比如putchar('\t'); 在printf哪个位置加？[/quote] 第一个printf后面加，在第二个大括号里。[/quote] 第二的大括号里面哪里？

user: user-0
content: 第二的大括号里面哪里？

user: user-3
content: 引用 4 楼 baidu_38774389 的回复:[quote=引用 3 楼 自信男孩的回复:]建议在第一个printf后面加几个空格，就很明显的知道为什么会出现圈住的数字了。 比如putchar('\t'); 在printf哪个位置加？[/quote] 第一个printf后面加，在第二个大括号里。

user: user-0
content: 引用 3 楼 自信男孩的回复:建议在第一个printf后面加几个空格，就很明显的知道为什么会出现圈住的数字了。 比如putchar('\t'); 在printf哪个位置加？

user: user-3
content: 建议在第一个printf后面加几个空格，就很明显的知道为什么会出现圈住的数字了。 比如putchar('\t');
user-0 提问: 编译fastdfs报错，实在搜不到，请高人指导

回复:
user: user-0
content: 就是搜不到啊，能搜到就好了。会不会是哪个文件有语法错误导致的

user: user-1
content: 把出错提示信息全部或部分复制粘贴到百度搜索框里面搜一下。
user-0 提问: 字符串长度

回复:
user: user-1
content: 那是因为没有区分\0,再说你怎么确定是'\0'而不是'\017'呢？

user: user-2
content: scanf没法输入空字符啊，斜杠和0是两个字符，无法作为空字符存入字符串。

user: user-3
content: 应该是保存了'\'和‘0’而不是‘\0’

user: user-4
content: 1：一楼正解 2：'\0'，只一个字符，不是两个字符，刚接触时，思维是有点矛盾的 3：可以结合ASCII表，和字符变量char，还有字符串，查阅一下三者是如何存储的，如何读取的。明白这三者的关系后，指针和数组就水到渠成了
user-0 提问: 大佬求助

回复:
user: user-0
content: 引用 4 楼 覆陇黄 的回复：如果俺没有猜错的话 你把函数体里的东西放在主函数里就可以就行交换了（不要“硬”放....）  原因是： 你在函数体内想对地址进行交换，是“反应”不到主函数里的，因为你swap函数相当于“拷贝”了a、b的地址而非俩指针的地址，可以交换a、b但不可以交换两指针的值（反应不到主函数里）  希望有用，推荐谭浩强教授的对应书，上面有详细的对应内容谢谢🙏

user: user-1
content: 你可以试一试，注意形参的类型

user: user-2
content: 引用 4 楼 覆陇黄的回复:如果俺没有猜错的话 你把函数体里的东西放在主函数里就可以就行交换了（不要“硬”放....）  原因是： 你在函数体内想对地址进行交换，是“反应”不到主函数里的，因为你swap函数相当于“拷贝”了a、b的地址而非俩指针的地址，可以交换a、b但不可以交换两指针的值（反应不到主函数里）  希望有用，推荐谭浩强教授的对应书，上面有详细的对应内容 那要这么说的话。是不是可以直接在 调用swap时这么写。swap(&p,&q);

user: user-1
content: 如果俺没有猜错的话 你把函数体里的东西放在主函数里就可以就行交换了（不要“硬”放....）  原因是： 你在函数体内想对地址进行交换，是“反应”不到主函数里的，因为你swap函数相当于“拷贝”了a、b的地址而非俩指针的地址，可以交换a、b但不可以交换两指针的值（反应不到主函数里）  希望有用，推荐谭浩强教授的对应书，上面有详细的对应内容

user: user-0
content: 引用 1 楼 user-6 的回复：函数体里有问题，前面都要加星号加了*是数值交换，我是想用函数交换地址

user: user-3
content: 函数体中:应该是数在交换，不是地址交换

user: user-4
content: int tmp = *pa; *pa = *pb; *pb = tmp;  函数体改成如上的表达式～

user: user-5
content: https://blog.csdn.net/weixin_42718004/article/details/84888851

user: user-6
content: 函数体里有问题，前面都要加星号
user-0 提问: c语言小问题

回复:
user: user-1
content: 这个如果只是用不用的问题，根据你的需求来定吧。

user: user-0
content: O. o了解了，谢谢各位大佬

user: user-2
content: 如果输出结果在同一行且不容易区分建议添加\n

user: user-3
content: printf("1"); printf("2"); 运行结果：12 printf("1\n"); printf("2\n"); 运行结果：1                      2

user: user-0
content: \n这个换行符是个什么意思啊

user: user-4
content: \n是换行符，什么时候用你自己决定

user: user-5
content: 这问题问题得... 你知道'\n’是什么吗？
user-0 提问: 求大佬帮我解一下这道普通算法题目

回复:
user: user-0
content: 引用 3 楼 Daniel201418 的回复：#include<stdio.h> int main(void){ 	int n; 	scanf("%d",&n); 	int a[n]; 	int max=-1,count=1; 	for(int i=0;i<n;i++){ 		scanf("%d",&a[i]); 	} 	for(int i=0;i<n;i++){ 		if(i>0) 		if(a[i]>a[i-1]){ 			count++; 		}else{ 			if(count>max) 			max=count; 			count=1; 		} 	} 	if(count>max) 	max=count; 	printf("%d",max); }谢谢大佬

user: user-1
content: #include<stdio.h> int main(void){ 	int n; 	scanf("%d",&n); 	int a[n]; 	int max=-1,count=1; 	for(int i=0;i<n;i++){ 		scanf("%d",&a[i]); 	} 	for(int i=0;i<n;i++){ 		if(i>0) 		if(a[i]>a[i-1]){ 			count++; 		}else{ 			if(count>max) 			max=count; 			count=1; 		} 	} 	if(count>max) 	max=count; 	printf("%d",max); }

user: user-0
content: 引用 1 楼 user-2 的回复：确实挺简单的。一个循环就够了。刚上这门课，小白

user: user-2
content: 确实挺简单的。一个循环就够了。
user-0 提问: 我真笨啊，各位帮忙看看

回复:
user: user-1
content: 引用 5 楼 轻箬笠 的回复:很好奇是什么书，这么低级的错误都有，难道都是抄来抄去的 我估计书没错，这应该是一个习题之类的，就是要考这种地方

user: user-2
content: 这书也太那啥了吧，误导新手的节奏。

user: user-3
content: 很好奇是什么书，这么低级的错误都有，难道都是抄来抄去的

user: user-0
content: 哦哦，谢谢额，不过不是我的错，书中有错

user: user-0
content: 哦哦，谢谢额，不过不是我的错，书中有错

user: user-4
content: if (a=1) 改成  if (a==1) 不是笨，而是不够细心～ 以后可以养成这样的习惯   if (1==a)

user: user-5
content: 条件错了，那个a = 1是赋值语句，应该是if(a == 1)
user-0 提问: 指针

回复:
user: user-1
content: printf("output = %d\n",output ); 这条语句用%x打印看看～ output是4个字节，1， 2， 3， 4分别放在这四个字节里。然后组成一个新的unsigned int数值。

user: user-2
content: 一般的计算机小端存储方式下， int 型数据  #include<stdio.h> typedef unsigned char int8; typedef unsigned int int32; int8 input[5] = {1,2,3,4,5}; int32 hst(int8 *ndsk) {     int32 m = 0;                                // m = 0x00 00 00 00  ndsk= {1,2,3,4,5};     int8 *h = (int8 *)&m;       h[0] = ndsk[0];                            // m = 0x00 00 00 01       h[1] = ndsk[1];                            // m = 0x00 00 02 01       h[2] = ndsk[2];                            // m = 0x00 03 02 01       h[3] = ndsk[3];                            // m = 0x04 03 02 01                   printf("h = %p\n",h);     if(0 == m)     {         printf("m == 0\n");         m = 1;     }     printf("##  m value: %d \n",m);     return m; } int main() {     int32 output;     output = hst(input);     printf("output = %d\n",output );     printf("sizeof(int8) = %ld\n",sizeof(int8));     printf("sizeof(int32) = %ld\n",sizeof(int32));           return 0; }
user-0 提问: 【求助】初学链表，在free阶段出玄学错误

回复:
user: user-1
content: 又建一楼

user: user-0
content: 引用 4 楼 自信男孩的回复:void song_list_free(){     current = head;     while(current!=NULL){         //放到下面         head = current->next;         free(current->name);         free(current);         current = head;    //放到这里～     }     printf("结束···"); } 噢噢噢我懂了！谢谢老哥！是我傻了

user: user-0
content: 引用 4 楼 自信男孩的回复:void song_list_free(){     current = head;     while(current!=NULL){         //放到下面         head = current->next;         free(current->name);         free(current);         current = head;    //放到这里～     }     printf("结束···"); } 嗯不过这样就可以了我后来也是这么修改的，可是我不太懂这两种写法有啥子区别嘞

user: user-0
content: 引用 3 楼 自信男孩的回复:void song_list_free(){     current = head;     while(current!=NULL){         current = head;         head = current->next;         free(current->name);    //先释放name空间，在释放节点         free(current);     }     printf("结束···"); }  供参考～ 这个样子我试了诶，好像依然不行

user: user-2
content: void song_list_free(){     current = head;     while(current!=NULL){         //放到下面         head = current->next;         free(current->name);         free(current);         current = head;    //放到这里～     }     printf("结束···"); }

user: user-2
content: void song_list_free(){     current = head;     while(current!=NULL){         current = head;         head = current->next;         free(current->name);    //先释放name空间，在释放节点         free(current);     }     printf("结束···"); }  供参考～

user: user-3
content: 重复释放问题 void song_list_free(){     current = head;     while(current!=NULL){         current = head;         head = current->next;         //free(current->next);          free(current);     }     printf("结束···"); }

user: user-0
content: 人工顶贴1.0
user-0 提问: 水仙花

回复:
user: user-1
content: #include <stdio.h> #include <math.h> #include <stdlib.h>  void swap(int *a, int *b) {     int t = *a;     *a = *b;     *b = t; }  void get_bit_value(int *arr, int key) {     int i = 0;      while (key) {         arr[i++] = key % 10;         key /= 10;     } }  int main() {     int arr[3], i, m, n, sum, flag;      while (scanf("%d %d", &m, &n) != EOF)     {         flag = 0;         if (m > n)             swap(&m, &n);         if (n >= 1000)             n = 999;         if (m <= 100)             m = 100;          while (m < n) {             get_bit_value(arr, m);             sum = 0;             for (i = 0; i < 3; i++)                 sum += (int)pow(arr[i], 3);             if (sum == m){                 printf("%d\t", m);                 flag = 1;             }             m++;         }         if (flag == 0)             printf("no!\n");         putchar(10);     }      return 0; } 去掉注释的代码～比较干净的代码，供参考～

user: user-1
content: #include <stdio.h> #include <math.h> #include <stdlib.h>    void swap(int *a, int *b) {     int t = *a;     *a = *b;     *b = t; }  void get_bit_value(int *arr, int key) {     int i = 0;      while (key) {         arr[i++] = key % 10;         key /= 10;     } }  int main() {     //int i,m,n,a,b,c,t;     int arr[3], i, m, n, sum, flag;     while (scanf("%d %d", &m, &n) != EOF)     { #if 0         int p = 0;         int cnt = 0;         if (m>n)         {             t=m;             m=n;             n=t;         } #else         flag = 0;         if (m > n)             swap(&m, &n);         if (n >= 1000)             n = 999;         if (m <= 100)             m = 100; #endif  #if 1         while (m < n) {             get_bit_value(arr, m);             sum = 0;             for (i = 0; i < 3; i++)                 sum += (int)pow(arr[i], 3);             if (sum == m){                 printf("%d\t", m);                 flag = 1;             }             m++;         }         if (flag == 0)             printf("no!\n");         putchar(10); #else         i=m;         while(i<=n)         {             a=i%10;             b=i/10%10;             c=i/100;             if (i==a*a*a+b*b*b+c*c*c)             {                 if(cnt ==0)                 {                     printf("%d",i);                 }else                 {                     printf(" %d",i);                 }                 cnt = 1;                 p=1;             }             i++;         }         if (p==0) printf("no\n");         else printf("\n"); #endif     }      return 0; } 供参考～
user-0 提问: 一个想法

回复:
user: user-1
content: 推荐阅读《从一到无穷大》

user: user-1
content: #include <stdio.h> long a=10000; long b; long c=2800; long d; long e; long f[2801]; long g; int main() {     for(;b-c;) f[b++]=a/5; //  while (1) { //      if (0==b-c) break; //      f[b]=a/5; //      b++; //  }      //f[0 - 2800] = 10000/5     for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)           for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b); //  while (1) { //      d=0; //      g=c*2; //      if (0==g) break; //      b=c; //      while (1) { //          d+=f[b]*a; //          f[b]=d%--g; //          d/=g--; //          --b; //          if (0==b) break; //          d*=b; //      } //      c-=14; //      printf("%.4d",e+d/a); //      e=d%a; //  }  	return 0; }

user: user-2
content: 这个计算量巨大的，与语言无关

user: user-3
content: 这么说。。。，π还知道了我的银行密码。。。

user: user-4
content: 理论上，pi还包含了整个宇宙的信息！
user-0 提问: C语言基础题

回复:
user: user-0
content: 该怎样做有效性坚持呢

user: user-1
content: 没有做输入有效性检测，A，N都有取值范围，而你输入后没有做检测，样本给出超出范围的，就会得出无效答案

user: user-1
content: 引用 1 楼 user-2 的回复:有一种操作叫屏幕截图 还有一种叫复制，粘贴代码

user: user-2
content: 有一种操作叫屏幕截图
user-0 提问: 大佬帮忙看看程序怎么运行不了，大一新生，不会

回复:
user: user-1
content: 现在都在手机上码了吗

user: user-2
content: 运行不了是提示什么错误，建议贴出错误信息～

user: user-0
content: 可以了，花括号弄错了，输入法是中文的

user: user-3
content: 程序可以运行的（gcc）。 你用的什么编译器？  另外，这一行。建议用括号，括起来。 实际项目中，这么写是很不规范的，静态检查时，就被要求改掉的。  ans=a>1&&b++>1.5;

user: user-4
content: a > 1  -> TRUE b ++ > 1.5 -> FALSE  所以ans的值是0，最后打印出来的就是0

user: user-5
content: 自己敲敲，运行一下不就行了 多练习，用gdb 跟跟，想进步就得自己多练，多好的学习机会，主要是考运算符优先级把，对着教材一点点对，看那个优先级高。
user-0 提问: 关于C语言中，数组做函数参数的问题

回复:
user: user-1
content: 请那些喜欢将数组作为函数参数传来传去或作为函数返回值的码农思考一下为什么不把整个互联网内容当作函数参数传来传去或作为函数返回值呢？

user: user-2
content: 以数组为参数的函数，请格式为: int FindMax(int* array); int FindMax(int array[]); int FindMax(int array[10]); 所以你说的 void func(int *a) func()函数的参数是一维数组 而 void func(int a[10][10]) func()函数的参数是二维数组，这就是区别。 函数参数是数组的相关请参考《C++中函数的数组形参》 二维数组的相关知识，请参考《C++中二维数组与指针》  希望能够帮到你！

user: user-3
content: 这个差别大了去了，第二个应该是void func(int *a[])吧？这样才符合题意

user: user-4
content: 前者相当于int (*a)[10] 后者就是 int *a，数值作为形参，最高纬会退化为指针

user: user-0
content: 引用 4 楼 qq_45671532的回复:就是只有一维数组传值的时候才可以 int fun(int *a); int fun(int a[]); int fun(int a[10]); 而二维数组传值的时候 int fun(int *a[]); int fun(int a[][]); int fun(int a[10][10]);才合法，对吧 就是只有一维数组传值的时候才可以 int fun(int *a); int fun(int a[]); int fun(int a[10]); 而二维数组传值的时候 int fun(int （*a）[]); int fun(int a[][]); int fun(int a[10][10]);这个才是

user: user-0
content: 就是只有一维数组传值的时候才可以 int fun(int *a); int fun(int a[]); int fun(int a[10]); 而二维数组传值的时候 int fun(int *a[]); int fun(int a[][]); int fun(int a[10][10]);才合法，对吧
user-0 提问: 各位大神，通过c语言函数读取电脑txt文件，输出时，汉字因为两个占字节乱码怎么办？？求助各位大神。

回复:
user: user-0
content: 引用 12 楼 赵4老师的回复:https://www.cnblogs.com/jetyi/articles/2741818.html 这个有点复杂，😂😂

user: user-1
content: https://www.cnblogs.com/jetyi/articles/2741818.html

user: user-1
content: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/fopen-wfopen?view=vs-2019

user: user-2
content: 引用 2 楼 weixin_44710192的回复:[quote=引用 1 楼 wowpH的回复:]buf太小了 我改成500了，结果还是一样。[/quote] 好吧~_~。我以为是太小的原因。

user: user-0
content: 引用 1 楼 wowpH的回复:buf太小了 我改成500了，结果还是一样。

user: user-2
content: buf太小了

user: user-0
content: 好的👌👌，我摸索摸索。

user: user-3
content: 编码转换啊，文件是unicode，就在程序里转gbk输出，要是gbk就转unicode输出

user: user-0
content: 哦哦，请问有什么好的办法吗？

user: user-0
content: 引用 5 楼 user-4的回复:编译器不是vs ? 不是，是啊哈C编译器

user: user-0
content: 引用 6 楼 wowpH的回复:应该是编码问题，我用VS测试一点问题没有。cmd就不行。 是吗？我用的是啊哈C编译器

user: user-2
content: 应该是编码问题，我用VS测试一点问题没有。cmd就不行。

user: user-4
content: 编译器不是vs ?

user: user-3
content: 和%s没关系吧，应该是你读取的文件的编码和你打印环境的编码不一致
user-0 提问: 求大神救救孩子

回复:
user: user-0
content: 引用 1 楼 阿大古 古古古 的回复：你这个函数名不是write_va吗，是不是调用的地方写错成write_vs了？哈哈哈哈哈哈 我服了

user: user-1
content: 你这个函数名不是write_va吗，是不是调用的地方写错成write_vs了？

user: user-2
content: 强。。。(;´༎ຶД༎ຶ`）

user: user-1
content: 引用 2 楼 qq_45659066 的回复:引用 1 楼 阿大古 古古古 的回复：你这个函数名不是write_va吗，是不是调用的地方写错成write_vs了？哈哈哈哈哈哈 我服了  这种错误出现了就不紧张，几乎都是哪里粗心了
user-0 提问: 4位补码为什么可以表示-8？

回复:
user: user-0
content: 引用 2 楼 weixin_44855508 的回复:[quote=引用 1 楼 stherix的回复:]本来不就是这样的吗 1000和0000难道都代表0不成 从补码原理上来看也是  一个数的负数补码就是原码取反加1 那么128是1000,全取反 0111,再加1就是1000 4位其实表示不了-8，  1000表示8  要表示-8还需要一个符号位 1000是8的补码  也是-8的补码？[/quote]  补码将减法转为了加法：请问8位的情况  -5-2是怎么计算的？ -5原码1000 0101   补码是1111 1011 -2原码1000 0010   补码是1111 1110 -5+（-2）是直接把补码相加么？符号位要参与运算么？得到的结果要不要是原码还是补码？

user: user-1
content: 计算机中以二进制补码方式存储时，如果存储的非负数，则按原码存放，如果为负数，则按其补码方式存储，所以不存在+0 和-0，只有0

user: user-2
content: 引用 7 楼 weixin_44855508 的回复:[quote=引用 6 楼 lin5161678的回复:][quote=引用 2 楼 weixin_44855508 的回复:] [quote=引用 1 楼 stherix的回复:]本来不就是这样的吗 1000和0000难道都代表0不成 从补码原理上来看也是  一个数的负数补码就是原码取反加1 那么128是1000,全取反 0111,再加1就是1000 4位其实表示不了-8，  1000表示8  要表示-8还需要一个符号位 1000是8的补码  也是-8的补码？[/quote]4位有符号 无法表示 8[/quote] 0和-0的补码为啥是一样的 -0是1000吗？那补码就还是1000 0的补码是0000 不是不一样么。。。。[/quote]1000表示-8  根本不存在 -0  你有点语无伦次  问题一个一个列出来 一个一个弄清楚 别混在一起

user: user-0
content: 引用 6 楼 lin5161678的回复:[quote=引用 2 楼 weixin_44855508 的回复:] [quote=引用 1 楼 stherix的回复:]本来不就是这样的吗 1000和0000难道都代表0不成 从补码原理上来看也是  一个数的负数补码就是原码取反加1 那么128是1000,全取反 0111,再加1就是1000 4位其实表示不了-8，  1000表示8  要表示-8还需要一个符号位 1000是8的补码  也是-8的补码？[/quote]4位有符号 无法表示 8[/quote] 0和-0的补码为啥是一样的 -0是1000吗？那补码就还是1000 0的补码是0000 不是不一样么。。。。

user: user-3
content: 本来不就是这样的吗 1000和0000难道都代表0不成 从补码原理上来看也是  一个数的负数补码就是原码取反加1 那么128是1000,全取反 0111,再加1就是1000

user: user-2
content: 引用 2 楼 weixin_44855508 的回复:[quote=引用 1 楼 stherix的回复:]本来不就是这样的吗 1000和0000难道都代表0不成 从补码原理上来看也是  一个数的负数补码就是原码取反加1 那么128是1000,全取反 0111,再加1就是1000 4位其实表示不了-8，  1000表示8  要表示-8还需要一个符号位 1000是8的补码  也是-8的补码？[/quote]4位有符号 无法表示 8

user: user-3
content: 引用 4 楼 user-4 的回复:[quote=引用 3 楼 stherix 的回复:] [quote=引用 2 楼 weixin_44855508 的回复:] [quote=引用 1 楼 stherix的回复:]本来不就是这样的吗 1000和0000难道都代表0不成 从补码原理上来看也是  一个数的负数补码就是原码取反加1 那么128是1000,全取反 0111,再加1就是1000 4位其实表示不了-8，  1000表示8  要表示-8还需要一个符号位 1000是8的补码  也是-8的补码？[/quote]  1000并不是8的补码啊 8已经溢出了...  毕竟只能表示   -2^n  -> 2^n - 1  范围的数 不过硬要说的话那也是的 对于4bit而言 加8就等于加-8[/quote] 没溢出，谢谢[/quote]  你说没溢出那就没溢出吧

user: user-4
content: 引用 3 楼 stherix 的回复:[quote=引用 2 楼 weixin_44855508 的回复:] [quote=引用 1 楼 stherix的回复:]本来不就是这样的吗 1000和0000难道都代表0不成 从补码原理上来看也是  一个数的负数补码就是原码取反加1 那么128是1000,全取反 0111,再加1就是1000 4位其实表示不了-8，  1000表示8  要表示-8还需要一个符号位 1000是8的补码  也是-8的补码？[/quote]  1000并不是8的补码啊 8已经溢出了...  毕竟只能表示   -2^n  -> 2^n - 1  范围的数 不过硬要说的话那也是的 对于4bit而言 加8就等于加-8[/quote] 没溢出，谢谢

user: user-3
content: 引用 2 楼 weixin_44855508 的回复:[quote=引用 1 楼 stherix的回复:]本来不就是这样的吗 1000和0000难道都代表0不成 从补码原理上来看也是  一个数的负数补码就是原码取反加1 那么128是1000,全取反 0111,再加1就是1000 4位其实表示不了-8，  1000表示8  要表示-8还需要一个符号位 1000是8的补码  也是-8的补码？[/quote]  1000并不是8的补码啊 8已经溢出了...  毕竟只能表示   -2^n  -> 2^n - 1  范围的数 不过硬要说的话那也是的 对于4bit而言 加8就等于加-8

user: user-0
content: 引用 1 楼 stherix的回复:本来不就是这样的吗 1000和0000难道都代表0不成 从补码原理上来看也是  一个数的负数补码就是原码取反加1 那么128是1000,全取反 0111,再加1就是1000 4位其实表示不了-8，  1000表示8  要表示-8还需要一个符号位 1000是8的补码  也是-8的补码？
user-0 提问: 关于dev c++5.1.1（问）

回复:
user: user-0
content: 引用 7 楼 赵4老师 的回复：现在的码农竟然99%都不会在cmd窗口中输入cd命令设置当前目录为程序所在目录，输入程序名运行程序了！我不是码农，我是小白的嗷

user: user-1
content: 程序都是运行完就结束的，之所以在DEV（包括其他IDE）里运行没有结束，是因为IDE另外有程序管控你的程序，使得结束后窗口依然没有关闭，但对于exe来说，结束就关闭。所以，如果要留住窗口的话，让程序不结束就行了，比如可以在最后一个加上getchar，让程序等待用户输入，或者system("pause >nul"); 让程序等待用户按键，这样程序就没法退出了，你也就能看到之前的数据了。

user: user-2
content: 现在的码农竟然99%都不会在cmd窗口中输入cd命令设置当前目录为程序所在目录，输入程序名运行程序了！

user: user-3
content: 一句话 程序执行完毕了，就会退出。 可以在你的代码return 前面加上一句getchar();  就达到你要的效果了

user: user-0
content: 引用 1 楼 user-4 的回复：可以在最后加一句system("pause");什么意思

user: user-0
content: 引用 2 楼 赵4老师 的回复：Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt我有2019但我不会用

user: user-2
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-4
content: 可以在最后加一句system("pause");
user-0 提问: 小白求助，一个很简单的问题

回复:
user: user-1
content: 引用 1 楼 user-2的回复:const int是常量，不能修改的 const char *copy是copy指向的字符串是不能修改的，但是指针本身可以修改，比如： const char *mesg="dasds"; mesg[0] = '\0';  // 这种操作不允许，它修改的是字符串的内容   如果是const char const *mesg="dasds"; const char const *copy; mesg[0] = '\0';  // 这种操作不允许，它修改的是字符串的内容 copy = mesg;  // 这个也不允许 还可以两个const。。这个有点厉害。

user: user-2
content: const int是常量，不能修改的 const char *copy是copy指向的字符串是不能修改的，但是指针本身可以修改，比如： const char *mesg="dasds"; mesg[0] = '\0';  // 这种操作不允许，它修改的是字符串的内容   如果是const char const *mesg="dasds"; const char const *copy; mesg[0] = '\0';  // 这种操作不允许，它修改的是字符串的内容 copy = mesg;  // 这个也不允许
user-0 提问: 列主元高斯消元法，不知代码哪出错了，哪位大神帮忙看看，感激不尽

回复:
user: user-1
content: 引用 3 楼 JISANSAN 的回复:[quote=引用 2 楼 SuperDay的回复:]编译没错吧，运行结果有吗? 编译没错，运行结果中有乱码[/quote]  运行结果贴出来啊

user: user-0
content: 引用 2 楼 SuperDay的回复:编译没错吧，运行结果有吗? 编译没错，运行结果中有乱码

user: user-1
content: 编译没错吧，运行结果有吗?

user: user-2
content: 最次也要截图啊，拍照鬼看得清。  最好贴代码，至少别人也可以运行调试一下。
user-0 提问: 小白学习c

回复:
user: user-1
content: 约球是由经研八信息科技（北京）有限公司于2013年7月13日正式出品的一款高尔夫交友应用，在应用中用户可以发起一个球局，也可以申请加入别人的球局，在能实现约球的同时还能结交很多球友，切磋球技、结交朋友、丰富精彩人生。  b是a的约球是什么梗？

user: user-2
content: 一脸懵，你想怎么写都可以，我觉得你写的是对的

user: user-3
content: 你好，用C语言就是那么写的。

user: user-4
content: 我建议你先学会怎么提问再来吧，都不知道你这个问题什么意思

user: user-5
content: 大家好，我是c语言两年半练习生，就那么写呗
user-0 提问: float x=9876.54321；printf("x=%f",x);

回复:
user: user-1
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-1
content: 打开include\float.h瞜一眼。

user: user-0
content: 引用 3 楼 user-2的回复:应该是精度不够吧，除此之外，想不出其它原因 好的 谢谢 我明白了

user: user-2
content: 应该是精度不够吧，除此之外，想不出其它原因

user: user-2
content: double x = 9876.54321; printf("x=%lf", x);

user: user-2
content: 编译的时候有个警告 warning C4305: “初始化”: 从“double”到“float”截断
user-0 提问: 关于文件读取与输出

回复:
user: user-1
content: 关于fopen_s 在vs 2017中的使用问题，实在是不知道怎么使用了 就是open scanf close的顺序，楼主有什么疑惑吗？ 输出的格式，需要足够耐心一步一步调整
user-0 提问: 哪位大佬帮忙看一下

回复:
user: user-0
content: 引用 8 楼 user-1的回复:像c>a>b这样的比较完全是没有意义的，比较表达式的结果跟整数比较，没有实际意义，一般这种写法，是一种把程序写错了 而c/b判断等不等于0，等于是c的绝对值≥b，因为只要c的绝对值小于b，-1<c/b<1，那么取整之后就是0 嗯嗯，谢谢，这只是出题人多做作怪，太难了

user: user-1
content: 引用 8 楼 user-1 的回复:像c>a>b这样的比较完全是没有意义的，比较表达式的结果跟整数比较，没有实际意义，一般这种写法，是一种把程序写错了 而c/b判断等不等于0，等于是c的绝对值≥b，因为只要c的绝对值小于b，-1<c/b<1，那么取整之后就是0  但是如果程序写成abs(c)>=abc(b)，可读性就会好很多

user: user-1
content: 像c>a>b这样的比较完全是没有意义的，比较表达式的结果跟整数比较，没有实际意义，一般这种写法，是一种把程序写错了 而c/b判断等不等于0，等于是c的绝对值≥b，因为只要c的绝对值小于b，-1<c/b<1，那么取整之后就是0

user: user-0
content: 引用 6 楼 user-1的回复:c是5，只要不是0，就是真 c/b等于1（取整），也是真 哦哦，懂了，一直没看懂，书上也没说，谢谢

user: user-1
content: c是5，只要不是0，就是真 c/b等于1（取整），也是真

user: user-0
content: 后面那个没懂，c和c/b是怎么为真的

user: user-1
content: 引用 3 楼 qq_45673225 的回复:[quote=引用 2 楼 user-1的回复:]“&&”“||”优先级应该是最低的 c>a>b：c>a为真，就是1，于是1>b为假，所以c>a>b为假； c=5，所以为真； c/b=1，也是真 所以“假&&真||真”结果为真，就是1 我编程二三十年的人，也不敢确定这个是对的，如果看到谁这么写程序，我想把他拍死 这题目真的是变态，硬要难我这个初学者[/quote]  嗯，你要是有个性的话，可以拒绝做题。如果我当老师的话，出这个题，拒绝做题的人，这道满分

user: user-0
content: 引用 2 楼 user-1的回复:“&&”“||”优先级应该是最低的 c>a>b：c>a为真，就是1，于是1>b为假，所以c>a>b为假； c=5，所以为真； c/b=1，也是真 所以“假&&真||真”结果为真，就是1 我编程二三十年的人，也不敢确定这个是对的，如果看到谁这么写程序，我想把他拍死 这题目真的是变态，硬要难我这个初学者

user: user-1
content: “&&”“||”优先级应该是最低的 c>a>b：c>a为真，就是1，于是1>b为假，所以c>a>b为假； c=5，所以为真； c/b=1，也是真 所以“假&&真||真”结果为真，就是1 我编程二三十年的人，也不敢确定这个是对的，如果看到谁这么写程序，我想把他拍死

user: user-1
content: 晕啊……答案应该是1吧 尽出这种题目，无语
user-0 提问: f_gets函数的问题

回复:
user: user-0
content: .....发出来的时候已经意识到了

user: user-1
content: ret_val=fgets(st,SIZE,stdin);这是从标准输入读取一行字符串，ret_val=st只是赋值，这二者根本不是一个东西好不好？
user-0 提问: 学C，小白请求支援

回复:
user: user-0
content: 谢谢大佬的指点

user: user-1
content: 虽然多余了一对的括号，但是增强了可读性，避免歧义。当别人看到这个代码的时候，不会受到干扰 而且，不建议写(year%100)这样的，就是(year % 100 != 0)，虽然效果一样，但后者看起来一目了然，同理!(year%4)也是不如(year % 4 == 0)。 代码要一看就知道是干嘛的

user: user-1
content: 优先级最高的应该是括号，我习惯都是用括号，不要太自信于自己对优先级的了解，为了避免自己犯一些不该犯的错误，不要给自己挖坑，尽量用括号。这个逻辑表达式，等效的话我会这样写： ((year % 100 != 0) && (year % 4 == 0)) || (year % 400 == 0)

user: user-2
content: 这里考查的是运算符优先级的知识

user: user-1
content: 应该是这样吧：(year%100)  &&  !(year%4)  ||  !(year%400) “!”比“&&”和“||”优先级要高的
user-0 提问: VC++2010调试出现问题

回复:
user: user-1
content: 引用 5 楼 weixin_45479000 的回复:好了解决了，我TMD谢谢360安全卫士 程序员的常识之一：不要将程序源代码或项目或exe放在桌面这种复杂（多半带空格和汉字且在防火墙或杀毒软件严密控制的C盘上）的目录下。   关闭UAC、防火墙、杀毒软件、…… 以管理员身份运行 ……

user: user-0
content: 好了解决了，我TMD谢谢360安全卫士

user: user-0
content: 引用 2 楼 user-2的回复:[quote=引用 1 楼 weixin_45479000 的回复:] 不好意思说错了，是2010你还是说错了，应该是Visual Studio 2010。  在4行和5行中间加个return 0;试试？我也不确定是不是这个问题。[/quote] 我刚才已经试过了不行

user: user-2
content: https://bbs.csdn.net/topics/370064083

user: user-2
content: 引用 1 楼 weixin_45479000 的回复:不好意思说错了，是2010你还是说错了，应该是Visual Studio 2010。  在4行和5行中间加个return 0;试试？我也不确定是不是这个问题。

user: user-0
content: 引用 楼主 weixin_45479000的回复:我用的VC++2019，我在调试时出现error MSB6006:cl.exe已退出代码为2的问题，各位大佬能不能帮我一哈 不好意思说错了，是2010
user-0 提问: 【数据结构】c语言中Attach()意义

回复:
user: user-1
content: 浙大陈越数据结构课 哈哈哈哈哈哈我也刚刷到这里

user: user-0
content: 引用 4 楼 weixin_41580386 的回复:请问你知不知道Attach函数为什么不能这样定义？ void Attach(int c, int e, Polynomial  pRear){     Polynomial P;          P = (Polynomial)malloc(sizeof(struct PolyNode));     P->coef=c;     P->expon=e;     P->link = NULL;     pRear->link = P;     pRear=P; } 然后在主函数里引用Attach函数时这样写 Attach(P1->coef, P1->expon, rear); 这样为什么就是错的呢，很疑惑 你好，我的理解是： （1）首先明确`pRear`是一个指针，指向一个结点，那`pRear`本身就是一个地址变量； （2）其次，明确C中都是传值调用。 在你的Attach(P1->coef, P1->expon, rear)中：  pRear->link = P; // 这句话本身是没有问题的，可以对 link 进行赋值 pRear=P; // 但是这句话就不能起到赋值的效果，因为： // 0. 调用 Attach(P1->coef, P1->expon, rear) 时，将rear的值（因为`rear`是一个指针，所以其值是一个地址变量）赋值一份，给局部变量pRear赋上 // 1. 此时 pRear 中保存地址变量，但其本身并不是指向 *rear 的指针； // 2. 换句话说，如果 pRear 的值改变，那么不对 rear 造成影响。 // 3. 因此，想要改变 rear 的值，应该将 rear 的地址传入，而非将其本身。   总结起来就是：  A 是 B 的指针，B 是 C 的指针，在函数调用中，想改变C的值，需要将&C（即B）传入，想改变B的值，需要将&B（即A）传入。  函数调用中，改变变量的值，对其指针进行操作；改变指针的值，对指针的指针进行操作。

user: user-2
content: 请问你知不知道Attach函数为什么不能这样定义？ void Attach(int c, int e, Polynomial  pRear){     Polynomial P;          P = (Polynomial)malloc(sizeof(struct PolyNode));     P->coef=c;     P->expon=e;     P->link = NULL;     pRear->link = P;     pRear=P; } 然后在主函数里引用Attach函数时这样写 Attach(P1->coef, P1->expon, rear); 这样为什么就是错的呢，很疑惑

user: user-3
content: 自带函数都是小写字母打头的

user: user-0
content: 引用 1 楼 user-4 的回复:网上搜不到，那可能是自定义函数。。。。你没copy全？  您说对了，我以为Attach像Compare一样是自带函数，刚遇到就把课程暂停一个劲研究...  老师确实在下一页ppt马上讲了Attach()的定义。   void Attach(int c, int e, Polynomial *pRear){     Polynomial P;          P = (Polynomial)malloc(sizeof(struct PolyNode));     P->coef=c;     P->expon=e;     P->link = NULL;     (*pRear)->link = P;     *pRear=P; }

user: user-4
content: 网上搜不到，那可能是自定义函数。。。。你没copy全？
user-0 提问: 【求助】使用malloc为数组分配内存，字符串输入时报错

回复:
user: user-0
content: 引用 9 楼 SuperDay 的回复:[quote=引用 8 楼 RockyXRQ 的回复：][quote=引用 2 楼 棉猴 的回复:] 给Test1分配空间！  	struct Words_Malloc * Test1 = new Words_Malloc(); 	getName(Test1); 	getName_Free(Test1); 	delete Test1; VS2015调试结果 嗯呢！我用malloc直接分配内存可以用了，但是用new动态分配好像过不了编译诶 [/quote]new是C++操作符，malloc是C函数[/quote] 好的我懂了！

user: user-1
content: 引用 8 楼 RockyXRQ 的回复：[quote=引用 2 楼 棉猴 的回复:] 给Test1分配空间！  	struct Words_Malloc * Test1 = new Words_Malloc(); 	getName(Test1); 	getName_Free(Test1); 	delete Test1; VS2015调试结果 嗯呢！我用malloc直接分配内存可以用了，但是用new动态分配好像过不了编译诶 [/quote]new是C++操作符，malloc是C函数

user: user-0
content: 引用 2 楼 棉猴 的回复:给Test1分配空间！  	struct Words_Malloc * Test1 = new Words_Malloc(); 	getName(Test1); 	getName_Free(Test1); 	delete Test1; VS2015调试结果 嗯呢！我用malloc直接分配内存可以用了，但是用new动态分配好像过不了编译诶

user: user-0
content: 引用 3 楼 这是一个正经昵称 的回复:指针都得指向一块内存，给你结构体指针分配 嗯嗯！手动用malloc分配内存了！解决啦！多谢多谢！

user: user-0
content: 引用 11 楼 棉猴的回复:[quote=引用 9 楼 SuperDay 的回复:] [quote=引用 8 楼 RockyXRQ 的回复：][quote=引用 2 楼 棉猴 的回复:] 给Test1分配空间！  	struct Words_Malloc * Test1 = new Words_Malloc(); 	getName(Test1); 	getName_Free(Test1); 	delete Test1; VS2015调试结果 嗯呢！我用malloc直接分配内存可以用了，但是用new动态分配好像过不了编译诶 [/quote]new是C++操作符，malloc是C函数[/quote] 那就用malloc()和free()函数[/quote] 好der！多谢老哥！

user: user-0
content: 引用 5 楼 SuperDay 的回复:[quote=引用 4 楼 RockyXRQ 的回复:] [quote=引用 1 楼 SuperDay 的回复:] 这个str1有没分配空间呢？调用getName的代码在哪里？ 调用 调用getName函数的文件在Main.cpp里 QWQ[/quote]  就像 楼上说的，你没给str1分配空间[/quote] 嗯嗯，我现在手动用malloc给结构体变量分配空间了，成功解决！多谢老哥！

user: user-1
content: 引用 4 楼 RockyXRQ 的回复:[quote=引用 1 楼 SuperDay 的回复:] 这个str1有没分配空间呢？调用getName的代码在哪里？ 调用 调用getName函数的文件在Main.cpp里 QWQ[/quote]  就像 楼上说的，你没给str1分配空间

user: user-0
content: 引用 1 楼 SuperDay 的回复:这个str1有没分配空间呢？调用getName的代码在哪里？ 调用 调用getName函数的文件在Main.cpp里 QWQ

user: user-2
content: 指针都得指向一块内存，给你结构体指针分配

user: user-3
content: 给Test1分配空间！  	struct Words_Malloc * Test1 = new Words_Malloc(); 	getName(Test1); 	getName_Free(Test1); 	delete Test1; VS2015调试结果

user: user-1
content: 这个str1有没分配空间呢？调用getName的代码在哪里？

user: user-3
content: 引用 9 楼 SuperDay 的回复:[quote=引用 8 楼 RockyXRQ 的回复：][quote=引用 2 楼 棉猴 的回复:] 给Test1分配空间！  	struct Words_Malloc * Test1 = new Words_Malloc(); 	getName(Test1); 	getName_Free(Test1); 	delete Test1; VS2015调试结果 嗯呢！我用malloc直接分配内存可以用了，但是用new动态分配好像过不了编译诶 [/quote]new是C++操作符，malloc是C函数[/quote] 那就用malloc()和free()函数
user-0 提问: 这个题的答案前为什么有四个空格

回复:
user: user-1
content: 不光是空格啊，非字母的都是

user: user-0
content: 引用 1 楼 user-2的回复:。。。。。。。。我只看到了三个空格。 😂我眼瞎看错了……

user: user-2
content: 。。。。。。。。我只看到了三个空格。
user-0 提问: 新人求教

回复:
user: user-0
content: 感谢大佬指点

user: user-1
content: 简单说就是循环没有在我们想要的结果那儿结束。

user: user-1
content: 此时w已经变成了我们想要的结果，但是p1依然在加1，因此指向了第4个下标即3的位置，同理p2减1指向了第3个位置即4。  然后又继续循环了，于是又变回原来的样子了。

user: user-0
content: 我是说如果加*的话，就是指针p1和p2所指的字符比大小，'1'<'6'不也是真的吗？为什么加了*运行结果就变了？

user: user-2
content: 不加星号是比较地址的大小，不是比值的大小，地址和值要分清啊

user: user-3
content: P1，P2是指针，初值分别指向了数组的第一个元素（下标为0），和最后一个元素。是指针那么就代表地址，就是第一个元素和最后一个元素的地址。P1<P2就是比较数组谁先谁后，循环体交换两个位置的数值，然后改变指针位置P1向后，P2向前，最终将数组反序

user: user-4
content: 这里的p1,p2前为啥不加星号？ 这是比较字符串里面两个位置的先后（用指针），而不是比较字符串里面的字符（用星号，结果是char）
user-0 提问: 文件操作

回复:
user: user-1
content: 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-2
content: 你外面用fscanf，内循环用fgetc然后fscanf，衔接的时候怕是会有差错

user: user-0
content: #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { 	char a[4]; 	char b[4]; 	int i; 	int num; 	int total; 	FILE*fp; 	fp=fopen("C:\\Users\\DELL\\Documents\\Tencent Files\\3100515163\\FileRecv\\数据库实验一.txt","r+"); 	if(fp==NULL) 	{ 		printf("This is error"); 		exit(0); 	} 	scanf("%s",a); 	while(feof(fp)==0) 	{ 		fscanf(fp,"%s",b); 		printf("%s ",b); 		while(strcmp(a,b)==0) 		{ 			if(fgetc(fp)!='\n') 			{ 				fscanf(fp,"%s",b); 				i++; 			    total=total+atoi(b); 			} 			num=total/i; 			sprintf(fp,"%d",num); 			break; 		} 	} } 这样好看点
user-0 提问: 求大神解答

回复:
user: user-0
content: 引用 4 楼 user-1的回复:C#版块应该比这边还有热闹，也容易得到解决，这个页面里面找到移动帖子的功能，直接可以移过去 好的，我去看看，谢谢你呢

user: user-1
content: C#版块应该比这边还有热闹，也容易得到解决，这个页面里面找到移动帖子的功能，直接可以移过去

user: user-1
content: 在开发语言/框架这一层，上面几个，有个.NET技术，里面有个C#

user: user-0
content: 引用 1 楼 user-1的回复:C#问题请移至C#版块中 就是没有找到C#版块

user: user-1
content: C#问题请移至C#版块中
user-0 提问: matlab 和 C语言 在矩阵运算时结果不一样

回复:
user: user-1
content: 哦哦  漏了 还可以使用第三方库  比如 gun mpc

user: user-1
content: double 有限数据也就最多16位把 前面16个数字是准确的是 后面的数据不准确  如果你要精度更高的浮点操作 要么看编译器有没有额外扩展浮点类型 要么自己手动模拟浮点类型计算
user-0 提问: #C语言计时器，

回复:
user: user-1
content: 歪楼歪成这样了？核心是计时器好吧？你这样做计时器是不准的：首先sleep个人觉得，不是特别精准；其次，在slepp之前，还有很多代码指令需要执行，你是无法精确控制其执行时间的。

user: user-2
content: 引用 3 楼 [魂魄的回复:] [quote=引用 1 楼 wowpH的回复:]最近总是看到有人不用int main()的。。。我实在是想知道你们学的是哪位大神的书，教你们这么写的 我不知道那么int main()会多些什么东西么，求指点[/quote]  main函数返回给调用者（一般是shell，windows就是命令行或者bat命令），0表示正常退出

user: user-2
content: 我记得最早谭浩强的书上都是这么写的，现在这么多年过去了，不知道怎样

user: user-0
content: 引用 1 楼 wowpH的回复:最近总是看到有人不用int main()的。。。我实在是想知道你们学的是哪位大神的书，教你们这么写的 我不知道那么int main()会多些什么东西么，求指点

user: user-3
content: 最近总是看到有人不用int main()的。。。我实在是想知道你们学的是哪位大神的书，教你们这么写的

user: user-4
content: 引用 1 楼 wowpH的回复:最近总是看到有人不用int main()的。。。我实在是想知道你们学的是哪位大神的书，教你们这么写的 我也想知道，不写函数类型的
user-0 提问: 想玩迷宫。。。编译错误，我快疯了在，怎么搞！

回复:
user: user-1
content: 你的主函数呢

user: user-0
content: 引用 2 楼 user-3的回复:main函数都没看到 一开始是写的int main()，后面说要调用 int getch()，然后我懵了

user: user-2
content: 仅供参考：/**  * @Title  老鼠走迷宫的拓展探究  * @Author 孙琨  * @Date   2013-11-16  * @At     XUST  * @All Copyright by 孙琨  *  */  #include <iostream> using namespace std;  int maze[9][9] = { // 初始化迷宫，英文maze为“迷宫”     {2,2,2,2,2,2,2,2,2},     {2,0,0,0,0,0,0,0,2},     {2,0,2,2,0,2,2,0,2},     {2,0,2,0,0,2,0,0,2},     {2,0,2,0,2,0,2,0,2},     {2,0,0,0,0,0,2,0,2},     {2,2,0,2,2,0,2,2,2},     {2,0,0,0,0,0,0,0,2},     {2,2,2,2,2,2,2,2,2} };  int startI = 1,startJ = 1; // 入口行列坐标 int endI = 7,endJ = 7;     // 出口行列坐标  void visit(int i,int j)  // 自动搜寻路径 {     int m,n;      maze[i][j] = 1;      if((i == endI) && (j == endJ))     {         cout << endl << "显示路径:" << endl;         for(m=0; m<9; m++)         {             for(n=0; n<9; n++)             {                 if(maze[m][n] == 2)                     cout << "■";                 else if(maze[m][n] == 1)                     cout << "♀";                 else                     cout << "  ";             }             cout << endl;         }     }      if(maze[i][j+1] == 0)         visit(i,j+1);     if(maze[i+1][j] == 0)         visit(i+1,j);     if(maze[i][j-1] == 0)         visit(i,j-1);     if(maze[i-1][j] == 0)         visit(i-1,j);      maze[i][j] = 0;  }  int main(void) {     int i,j;      cout << "显示迷宫: " << endl;     for(i=0; i<9; i++)     {         for(j=0; j<9; j++)         {             if(maze[i][j] == 2)                 cout << "■" ;             else                 cout << "  " ;         }         cout << endl;     }      visit(startI,startJ);      return 0; }

user: user-3
content: main函数都没看到

user: user-0
content: 身为小白的我太难了，电子版啊哈c上抄过来的，然后运行不了🙃🙃🙃
user-0 提问: 二叉树的非递归后序遍历，为什么会一直崩溃，求助各位大神了

回复:
user: user-0
content: 可是后序遍历的序列是bac，请问大神知道问题所在吗

user: user-1
content: 程序审核：不合格，打回重写。

user: user-2
content: 引用 6 楼 qq_41857189 的回复:我自己调试了一下发现  	while(p||!StackEmpty(S)){ 		if(p){ 			Push(S,*p); 			p=p->lchild; 		}else{ 			GetTop(S,e); 			if(e.rchild&&e.rchild!=r){ 				p=e.rchild; 				Push(S,*p); 				p=p->lchild; 			}else{ 				Pop(S,e); 				printf("%c",e.data); 				r=&e; 				p=NULL; 			}    		} 	} 返现p=NULL之后这一行会自动返回while循环，不是应该返回if(p)这一层吗，我的输入数据为 ab接着两个空格c接着两个空格,一个很简单的二叉树。最后运行会无限输出c.没出现你这种情况。

user: user-2
content: 我的输入数据ab  c   运行截图：

user: user-0
content: 引用 4 楼 wowpH 的回复:[quote=引用 1 楼 user-4 的回复:] 你确定你这个能跑么？我跑都跑不了啊可以跑，命名为.cpp就行。  楼主可不可以把你的输入数据发一下。[/quote]  我自己调试了一下发现  	while(p||!StackEmpty(S)){ 		if(p){ 			Push(S,*p); 			p=p->lchild; 		}else{ 			GetTop(S,e); 			if(e.rchild&&e.rchild!=r){ 				p=e.rchild; 				Push(S,*p); 				p=p->lchild; 			}else{ 				Pop(S,e); 				printf("%c",e.data); 				r=&e; 				p=NULL; 			}    		} 	} 返现p=NULL之后这一行会自动返回while循环，不是应该返回if(p)这一层吗，我的输入数据为 ab接着两个空格c接着两个空格,一个很简单的二叉树。最后运行会无限输出c.

user: user-2
content: 引用 1 楼 user-4 的回复:你确定你这个能跑么？我跑都跑不了啊可以跑，命名为.cpp就行。  楼主可不可以把你的输入数据发一下。

user: user-0
content: 引用 1 楼 user-4的回复:你确定你这个能跑么？我跑都跑不了啊 我用devc++，可以跑呀，你用的是什么编译器

user: user-3
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-4
content: 你确定你这个能跑么？我跑都跑不了啊
user-0 提问: 萌新求助。

回复:
user: user-1
content: 黄色方框的意思就是让你给出对应的数据类型 一般大概的形式就是  scanf("%d",&input); 其中根据你的需求可以改变百分号之后的字母，代表着不同的输入类型 最后的变量名也需要自己提前定义
user-0 提问: 72是从哪里冒出来的

回复:
user: user-0
content: 我犯了低级错误

user: user-1
content: 数组的下标初值是从0开始的。比如数组长度为3，实际只有a[0],a[1],a[2]。你在输入时没有对a[0]赋值

user: user-2
content: 以下是VS2015调试结果  主要原因是 	for (i = 1; i <= n; ++i) 	{ 		scanf("%d", &a[i]);//i是从1开始的 	} 因为i是从1开始的，所以a[0]没有被赋值。所以应该修改为 	for (i = 0; i < n; ++i) 	{ 		scanf("%d", &a[i]); 	} 此时的输出为

user: user-3
content: a[0]没初始化

user: user-4
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-5
content: 第30行i=1改为i=0
user-0 提问: 能看看错误在哪里吗

回复:
user: user-1
content: 引用 楼主 尔玉先生 的回复:#include<stdio.h> #include<stdlib.h> #define MAX 100 typedef int datatype; typedef struct{    int size;    datatype a[MAX]; }sequence_list; int main() { 	void display(sequence_list slt); 	sequence_list menu; 	menu.a[]={0,1,2,3,4,5,6,7,8,9}; 	menu.size=10; 	display(menu); } void display(sequence_list slt) { int i; for(i=0;i<slt.size;i++)   printf("%5d",slt.a[i]);  } 声明不要放在主函数中；放到main()前面
user-0 提问: 约瑟夫问题

回复:
user: user-1
content: //////////////////////////////////////////////////////////////////////////////// // 文件名： array_jose.c // 作者：   cfjtaishan // 版本：   1.0 // 日期：   2013-10-31 // 描述：   约瑟夫环, 数组实现； // 历史记录： /////////////////////////////////////////////////////////////////////////////// #include <stdio.h> #include <stdlib.h>  #define OUT_FLAG 7  /*初始化数组*/ int *init_arr(int *a, int len) { 	int i = 0;  	for(; i < len; i++) 		printf("%d ", a[i] = i+1); 	printf("\n");  	return a; }  /*约瑟夫环1*/ void print_out_order(int *a, int len) { 	/*      * num:队列中非0数字的个数      * mark:出列的标记数      * ret:最终剩下的数      * row:换行打印标记      */ 	int num = 0, row = 1, mark = 0, ret; 	int j;  	while(num != 1){ 		num = 0; 		for(j = 0; j < len; j++){ 			if(a[j] != 0){ 				num++; 				mark++; 				ret = a[j]; 			} 			if(mark == OUT_FLAG){ 				printf("%2d%c", a[j], !(row % 10) ? '\n' : ' '); 				a[j] = 0; 				mark = 0; 				row++; 			} 		} 	} 	printf("\n\n--------\"%d\" is the last one!\n", ret); }  /*约瑟夫环2*/ void print_out_order2(int *a, int len) { 	int i, count = 0, rem = len;  	for(i = 0; rem > 1; i++){ 		if(i > (len-1)) 			i = 0; 		if(a[i]){ 			count++; 			if(OUT_FLAG == count){ 				count = 0; 				printf("%d ", a[i]); 				a[i] = 0; 				rem--; 			} 		} 	} 	putchar('\n'); }  int main(void) { 	int len; 	printf("How many people in the queue?\n"); 	scanf("%d", &len);  	int *arr = (int *)malloc(sizeof(int) *len);     if (!arr) {         fprintf(stderr, "malloc error!\n");         return -1;     } 	init_arr(arr, len);  	printf("\nThe order of people quit queue is:\n"); 	print_out_order(arr, len); 	printf("---------proc 2-------------\n");  	int arr2[len]; 	init_arr(arr2, len);  	print_out_order2(arr2, len);      free(arr); 	return 0; } 供参考～

user: user-2
content: 仅供参考：//假设有n个人团团围做，从第1个人开始数数，数到第m个人时候，第m个人出列， //然后继续从1开始数数，数到第m个人退出 #include <stdio.h> #include <conio.h> int i,k,t; int n,m; static char f[1001];//0该座位未出圈,1该座位已出圈 void main() {     while (1) {         printf("Input n m(1000>=n>=m>=1):");         fflush(stdout);         rewind(stdin);         if (2==scanf("%d%d",&n,&m)) {             if (1000>=n && n>=m && m>=1) break;         }     }     t=0;//已出圈总人数     i=1;//座位编号     k=1;//当前要数的数     while (1) {         if (0==f[i]) {             if (m==k) {                 t++;                 f[i]=1;                 printf("%3d ",i);                 if (0==t%10) printf("\n");                 if (t>=n) break;             }             k++;if (k>m) k=1;         }         i++;if (i>n) i=1;     }     cprintf("Press any key ...");     getch(); }

user: user-3
content: https://baike.baidu.com/item/%E7%BA%A6%E7%91%9F%E5%A4%AB%E9%97%AE%E9%A2%98
user-0 提问: 三目运算符求三个数的中值

回复:
user: user-0
content: 如果a＞b为真，执行第一个()，a和c比，如果a＞c为真，那么a是最大，只要再求出b和c谁更大，就得出第二大了,如果a＞c为假那么c是最大，a就是第二大了。  如果a＞b为假，执行第二个()，b＞c为真，那么b最大，输出a和c谁更大，就得出第二大，如果b＞c为假，那么c是最大，b就是第二大。

user: user-1
content: 这些写没什么问题，只是比较长比较不易理解，我的意思一眼看不出这个三目运算符是做什么。

user: user-2
content: 一次三目运算一行。你这样写，除了你自己，谁愿意看啊

user: user-3
content: 有问题吗？这样写代码，看起来都费劲
user-0 提问: 为什么最后会停止运行？

回复:
user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-0
content: 引用 1 楼 user-3的回复:a[3]空间不够，你这都9个元素了 原来如此，谢谢你了啊

user: user-2
content: 数组越界了，定义的是3个元素，输入9个元素。 数组越界是未定义行为，可能出现正常，也可能异常～

user: user-3
content: a[3]空间不够，你这都9个元素了
user-0 提问: 求大佬解释一下，这个题目什么意思。输入一个n(n<100)

回复:
user: user-0
content: 引用 6 楼 自信男孩的回复:[quote=引用 5 楼 weixin_45661217 的回复:] [quote=引用 3 楼 飞奔的小强sky的回复:]对啊，圈越来越小，最后只剩下一个，这个问题算是数学问题，你用代码模拟实际情况算的太慢了，我记得可以推导出一个结果，一个公式直接得出。 可是我看题目的意思是只砍掉n啊[/quote] 砍掉第一个n后，再从1开始算，数到n再砍掉一个，依次类推[/quote] 哦，大佬就是大佬，明白了

user: user-1
content: 引用 5 楼 weixin_45661217 的回复:[quote=引用 3 楼 飞奔的小强sky的回复:]对啊，圈越来越小，最后只剩下一个，这个问题算是数学问题，你用代码模拟实际情况算的太慢了，我记得可以推导出一个结果，一个公式直接得出。 可是我看题目的意思是只砍掉n啊[/quote] 砍掉第一个n后，再从1开始算，数到n再砍掉一个，依次类推

user: user-0
content: 引用 3 楼 飞奔的小强sky的回复:对啊，圈越来越小，最后只剩下一个，这个问题算是数学问题，你用代码模拟实际情况算的太慢了，我记得可以推导出一个结果，一个公式直接得出。 可是我看题目的意思是只砍掉n啊

user: user-1
content: 建议查一下约瑟夫环，原理就是这样的～

user: user-2
content: 对啊，圈越来越小，最后只剩下一个，这个问题算是数学问题，你用代码模拟实际情况算的太慢了，我记得可以推导出一个结果，一个公式直接得出。

user: user-0
content: 引用 1 楼 飞奔的小强sky的回复:比喻成一个圈，从一个点开始，走n步，砍掉一截，再围成圈 大佬你是说从1到n都砍掉吗

user: user-2
content: 比喻成一个圈，从一个点开始，走n步，砍掉一截，再围成圈
user-0 提问: 大佬们，这道题怎么做，刚学C语言

回复:
user: user-0
content: ……………………………………………………………………做出来啦！！

user: user-1
content: 这个太简单了，你出50元找小学生帮你写就可以了~~~

user: user-2
content: https://maimai.cn/article/detail?fid=1336120396&efid=lN6ItwZEDmdZG9jblL0hTghttps://maimai.cn/article/detail?fid=1336120396&efid=lN6ItwZEDmdZG9jblL0hTg

user: user-3
content: 可以定义数组，然后用数组来进行运算

user: user-4
content: 引用 1 楼 自信男孩 的回复:这个不难呢，建议自己先写写，遇到问题再发出来。  定义一个数组，然后遍历数组，并分别定义一个个数和平均值。 没必要数组，每输入一个判断奇偶然后分别计数和累加就好了

user: user-5
content: 支持楼上上上上

user: user-6
content: 这个不难呢，建议自己先写写，遇到问题再发出来。  定义一个数组，然后遍历数组，并分别定义一个个数和平均值。
user-0 提问: 关于scanf_s,小白求教

回复:
user: user-1
content: scanf_s("%c%c", &c1, 1, &c2, 1); 这样试试～

user: user-2
content: scanf_s()函数不能输出啊，所以代码修改为 	printf("a="); 	scanf_s("%d", &a); 	printf("b="); 	scanf_s("%d", &b); 运行效果为

user: user-3
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。