Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 那个大佬能给我解释解释值传递和引用传递指针传递啊

回复:
user: user-1
content: switch ... break是基本的语法，建议网上或课本上查一下～  再通过程序验证一下最好～

user: user-2
content: 反正形参是临时创建的，并用传入的实参赋值。 这个理解吧？ 然后如果传入的是值，那么你怎么修改形参，外面的变量都受影响。 但是如果你传入的是一个指针，我们就可以根据了这个指针修改所指向的位置的变量值了。 理解吗？ 理解就采纳。

user: user-3
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后，就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。  http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
user-0 提问: 车站问题（栈），这代码一旦出现栈空的情况就不行，题目给出

回复:
user: user-1
content: 这是自学成才呀

user: user-0
content: 我已经明白啦，是while里面还要加上一个条件就是!s.empty()，而且还要放在条件中的最前面，不然s.top()就会发生错误！！！！ 教训：while（）是从左到右扫描的，如果扫描到一个不满足循环条件就会退出循环！！

user: user-0
content: 对了还有一张图片
user-0 提问: 汉诺塔

回复:
user: user-1
content: 汉诺塔是经典的递归，还是很好懂的

user: user-0
content: 引用 1 楼 赵4老师的回复:代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出 谢谢，我知道了

user: user-0
content: 引用 2 楼 仰望星空，脚踏实地111的回复:这个链接有代码，讲的比较详细：https://www.cnblogs.com/destiny1123/articles/4242398.html 谢谢我已经知道了，谢谢

user: user-2
content: 这个链接有代码，讲的比较详细：https://www.cnblogs.com/destiny1123/articles/4242398.html

user: user-3
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
user-0 提问: C语言

回复:
user: user-1
content: 引用 3 楼 wowpH 的回复:嵌入式还要会汇编吧 可以了解，会看，看得懂，没必要做到要会写～

user: user-2
content: c的指针的深度理解是重点，另外需要对内存空间分配，中断，优先级，程序执行顺序，这些要理清楚。

user: user-3
content: 嵌入式还要会汇编吧

user: user-4
content: 好好计算手里的硬件 资源

user: user-5
content: 友情支持，UP
user-0 提问: C语言不换行，不空格可以吗？

回复:
user: user-1
content: 引用 3 楼 lin5161678 的回复:不行的  预编译指令需要换行 +1 其他部分可以

user: user-2
content: C语言编译器不是按找空格和换行来解析的，它是按照语法来解析；所以即使一个程序写成一行也没问题。  不过也不要较真，不要考虑把代码写成没有空格一行，这样编译器肯定不识别～

user: user-3
content: 不行的  预编译指令需要换行

user: user-4
content: 在我的资源里找”怪异代码大赛“

user: user-5
content: C 用;表示行，把代码写成一行也可以。没有缩进要求，空格数量大于等于1吧。void main(){int a     =  10;int b =1;}
user-0 提问: c语言求余数，输入了两个数，最后输出结果仍然是第一个数

回复:
user: user-1
content: 16838  %  65536 = 16838，因为16838比65536小

user: user-2
content: 那你认为是多少？ a < b时，a % b就是等于a，如果你理解不是a，说明你得重新去看看%的定义 引用 3 楼 Gnglas 的回复:[quote=引用 2 楼 user-5 的回复:] 16838  %  65536 = 16838 你的程序没有问题，结果也没有问题呀。我怎么感觉哪不对 [/quote]

user: user-3
content: 也不能说是数学没学好，因为数学中%不是求余数的。

user: user-1
content: 连这么严肃的地方也想笑死我吗

user: user-4
content: 这是数学没学好，不是C语言没学好...

user: user-0

user: user-0
content: #include<stdio.h> extern unsigned int rand0(void); extern void srand1(unsigned int x); int main(void) { 	int count; 	for (count = 0; count < 5; count++) 		printf("%d\n", rand0()); 		return 0;  } static unsigned long int next = 1; unsigned int rand0(void) { 	next = next * 1103515245 + 12345; 	return (unsigned int)(next / 65536) % 32768; } void srand1(unsigned int seed) { 	next = seed; } 我只是想测试这段代码的运算过程

user: user-0
content: 引用 2 楼 user-5 的回复:16838  %  65536 = 16838 你的程序没有问题，结果也没有问题呀。我怎么感觉哪不对

user: user-5
content: 16838  %  65536 = 16838 你的程序没有问题，结果也没有问题呀。

user: user-4
content: 你这又没错。。。。。
user-0 提问: 求大佬帮小白看一下问题所在

回复:
user: user-0
content: void sort_list(pnode Phead,int len) {     pnode p = Phead->pnext;     pnode q;     q = p->pnext;     int t;     int i, j;     for (i = 0,p;i<len - 1;i++,p=p->pnext)     {         for (j=i+1,q;j<len;j++,q=q->pnext)         {             if(p->data > q->data)             {                 t = p->data;                 p->data = q->data;                 q->data = t;             }         }     } } 调试到这个程序的时候有问题，但是不知道问题所在，百度好像是说跟野指针的问腿。
user-0 提问: printf(“%-10s%-10.3s\n”，“computer”，“computer”)

回复:
user: user-0
content: 引用 2 楼 user-2的回复:https://baike.baidu.com/item/printf%28%29/402521?fr=aladdin 多谢多谢！很清楚，很详细

user: user-0
content: 引用 3 楼 45045399的回复:%-10s  左对齐，输出10位长度,以字符串方式打印，%-10.3s =>左对齐，输出10位长度，其中，有三位小数, \n换行符 太感谢你了大神太厉害了

user: user-1
content: %-10s  左对齐，输出10位长度,以字符串方式打印，%-10.3s =>左对齐，输出10位长度，其中，有三位小数, \n换行符

user: user-2
content: https://baike.baidu.com/item/printf%28%29/402521?fr=aladdin

user: user-2
content: https://baike.baidu.com/item/printf%28%29/402521?fr=aladdin
user-0 提问: 请问各位大神，c语言两个字符串怎么产生关联

回复:
user: user-0
content: 引用 7 楼 weixin_40290083的回复:如果是单纯的英文单词，那么6楼的方法就可以进行关联，但是大量的单词直接在程序中定义这么多的变量显然是不科学的，当单词有增加、删除、修改时需要重新编译程序，解决的办法是使用文本文件保存或者使用数据库，当需要时读取文本或者数据库，然后把读取到的数据（英文、中文）赋给Node变量的两个成员变量就可以了。 对对，我也觉得定义大量的变量来存放单词是有问题的，编程不应该这么费事费时，谢谢。

user: user-1
content: 如果是单纯的英文单词，那么6楼的方法就可以进行关联，但是大量的单词直接在程序中定义这么多的变量显然是不科学的，当单词有增加、删除、修改时需要重新编译程序，解决的办法是使用文本文件保存或者使用数据库，当需要时读取文本或者数据库，然后把读取到的数据（英文、中文）赋给Node变量的两个成员变量就可以了。

user: user-0
content: 谢谢回复，这样就能把两个字符串关联在一起了吗？

user: user-2
content: typedef struct Node {     char english[50];     char chinse[100]; }Word;

user: user-0
content: 引用 1 楼 weixin_40290083的回复:看不明白你的需求呀。 是我没说清楚，我是想编写一个测试英语单词的小程序，比如一个单词 和它的中文意思 ，怎么在c语言绑定起来，然后随机抽取一个单词，让你输入中文意思。或者抽取一个中文意思让你输入它的英文，然后在进行判断，看看是否正确。

user: user-0
content: 是我没说清楚，我是想编写一个测试英语单词的小程序，比如一个单词 和它的中文意思 ，怎么在c语言绑定起来，然后随机抽取一个单词，让你输入中文意思。或者抽取一个中文意思让你输入它的英文，然后在进行判断，看看是否正确。

user: user-3
content: 既然实在看不明白需求，我就瞎蒙了啊～ char a[n][n],或者char **a，这样算吗？

user: user-1
content: 看不明白你的需求呀。
user-0 提问: 求助大佬C语言

回复:
user: user-1
content: 首先要理解 s += *(t + i); C++中数组名可以作为数组的首地址使用。数组名是一个右值，不能对其进行自增或者自减处理，但是可以对其作为右值进行运算处理。对数组名进行运算处理可以看成是对数组地址进行了偏移。所以，*(t+i)实际上就是t[i] 对于for循环中， i += 2，可以看出i是以2作为步进的，即0，2，4，6，8 所以就是a[0]+a[2]+a[4]+a[6]+a[8]，最后等于25 请参考《C++数组地址偏》 希望能够帮到你

user: user-2
content: i++步长是1，i+=2步长是2 for循环内部 i = 0; s0=s+t[0+0]=0+t[0] = 0+1 = 1; i = 2; s1 = s0 +t[0+2] = 1+t[2] = 1+3 =4 i = 4; s2 = s1 +t[0+4] = 4+t[4] = 4+5 =9 	...

user: user-3
content: 一个是步长要注意，二是输出最后一个值。 1  4  9 16 25  这是S经过循环的值。 那最后的答案就是25.

user: user-4
content: *（t+i）和t[i]都是对数组t和下标为i的元素的访问。所以 s +=*(t+i)和s+=t[i]的使用是相同的。

user: user-5
content: 注意i += 2;并不是每个都遍历。  因此是：0 + 1 + 3 + 5 + 7 + 9
user-0 提问: 关于反斜杠加上回车的效果的疑问

回复:
user: user-1
content: 那个\是用来给代码中的字符串换行的，为了方便阅读，如果你会看预编译后的文件，你就能看到字符串变成了一行

user: user-1
content: 程序不仅要实现功能，还要让其他人能读懂，写完代码不能保证没有错，要保证程序的可读性。

user: user-2
content: 因为有时候要输出的东西很多的话，在写输出的东西时不换，一行写完的话，看的时候就要一直拉水平的那个东西就很烦

user: user-3
content: 只是程序断行，实际和放在一行没有区别

user: user-0
content: 哦哦，只是代码在下一行继续输入，但是编译还是在一行对吧

user: user-0
content: 帮帮孩子，大一新生，我太难了
user-0 提问: C

回复:
user: user-1
content: 现在没有直接打印二进制数据的接口，建议可以通过%x打印出16进制，然后再按照16进制转为2进制。对于%lf格式（双精度） 的数据，可以考虑%x %x，通过高32位和低32位分别打出。  对于浮点数，并不会像整型数那么简单的理解，建议从网上查一下浮点数在内存里的表示方式～

user: user-2
content: 浮点数格式 http://bbs.csdn.net/topics/390676437
user-0 提问: c#

回复:
user: user-1
content: 输出一个数字再输出一个空格。

user: user-0
content: 引用 1 楼 user-2的回复:楼主说的是不是二维数组的变换，直接取数组的脚标【1~ n，0】，然后输入到【0，1~n】 不是，就是让数据由竖着显示，变成横着显示。

user: user-2
content: 楼主说的是不是二维数组的变换，直接取数组的脚标【1~ n，0】，然后输入到【0，1~n】
user-0 提问: 这个程序如何解

回复:
user: user-0
content: 引用 6 楼 自信男孩的回复:[quote=引用 4 楼 听我的苹果包 的回复:] [quote=引用 1 楼 自信男孩的回复:]从2层循环上来看，就是把数组中的元素值相加，那不就是1+2+3+4+5吗？ 怎么会少个2呢？ 我不是计算机专业的，在为转专业做准备，没有老师教，所以有一些蠢的问题还请包含[/quote] 没有责备的意思啊，你别有心里压力～我只是反问一下；  如果想进入这个行业，类似你认为或者大家认为“愚蠢”的问题都可能出现，大家都是从菜鸟一步一步过来的， 好好努力就好了，千万不要畏缩不前和有心理负担～[/quote] 嗯嗯好的谢谢啦，我会努力的

user: user-1
content: 引用 4 楼 听我的苹果包 的回复:[quote=引用 1 楼 自信男孩的回复:]从2层循环上来看，就是把数组中的元素值相加，那不就是1+2+3+4+5吗？ 怎么会少个2呢？ 我不是计算机专业的，在为转专业做准备，没有老师教，所以有一些蠢的问题还请包含[/quote] 没有责备的意思啊，你别有心里压力～我只是反问一下；  如果想进入这个行业，类似你认为或者大家认为“愚蠢”的问题都可能出现，大家都是从菜鸟一步一步过来的， 好好努力就好了，千万不要畏缩不前和有心理负担～

user: user-1
content: 引用 3 楼 听我的苹果包 的回复:[quote=引用 1 楼 自信男孩的回复:]从2层循环上来看，就是把数组中的元素值相加，那不就是1+2+3+4+5吗？ 怎么会少个2呢？ 那有没有对于for循环，外循环结束，内循环要重置的这种说法呢?[/quote] 外循环结束，内循环就不会执行了～

user: user-0
content: 引用 1 楼 自信男孩的回复:从2层循环上来看，就是把数组中的元素值相加，那不就是1+2+3+4+5吗？ 怎么会少个2呢？ 我不是计算机专业的，在为转专业做准备，没有老师教，所以有一些蠢的问题还请包含

user: user-0
content: 引用 1 楼 自信男孩的回复:从2层循环上来看，就是把数组中的元素值相加，那不就是1+2+3+4+5吗？ 怎么会少个2呢？ 那有没有对于for循环，外循环结束，内循环要重置的这种说法呢?

user: user-2
content: 这个就是s = s+a[0][0]+a[0][1] +a[1][0]+a[1][1]+a[2][0]+a[2][1],就是先加第一行（即j = 0，1；i= 0），再加第二行（j清零，i= 1）

user: user-1
content: 从2层循环上来看，就是把数组中的元素值相加，那不就是1+2+3+4+5吗？ 怎么会少个2呢？
user-0 提问: vs编辑c语言

回复:
user: user-1
content: 可能典型安装默认没装C++

user: user-2
content: 引用 3 楼 sm7 的回复:有安装SDK，而且在vs的文件下找得到stdlib文件的位置  看一下路径配置 有没问题

user: user-3

user: user-0
content: 有安装SDK，而且在vs的文件下找得到stdlib文件的位置

user: user-4
content: 软件配置有问题吧，建议检查一下配置，或者在网上把错误信息填进去搜一下～

user: user-2
content: 打开安装器，修改安装SDK
user-0 提问: 求一份winform图书管理项目源代码和数据库

回复:
user: user-0
content: 引用 3 楼 user-1的回复:CSDN论坛 > .NET技术 > C# 找到了，谢谢提醒昂，aaa

user: user-1
content: CSDN论坛 > .NET技术 > C#

user: user-0
content: 引用 1 楼 user-1的回复:走错地方了，去C# 哎。c#没看到emmm

user: user-1
content: 走错地方了，去C#
user-0 提问: 今天开始大一了

回复:
user: user-1
content: 先照书抄到电脑上再说

user: user-2
content: 感觉先看视频好一点

user: user-3
content: 那些过来人都是从你这种状态过来的。

user: user-4
content: 来csdn都5年了，难道以前一直是灌水的？

user: user-5
content: 多看书，多敲代码试一试
user-0 提问: 计算这几个程序运行的时间，谁能写一个正确的完整的代码，我写的都是一堆错，从网上查的代码照搬也一堆错

回复:
user: user-1
content: 建议查一下gettimeofday函数，这个可以很好的计算程序的运行时间～

user: user-2
content: 我记得有的编译器运行能直接看时间。比如：codeblocks和devc++
user-0 提问: C语言计算数字个数

回复:
user: user-1
content: for(i=0;i!='\0';i++) 这个i为什么要和'\0'比较；'\0'是字符串结束标记，数值是0。所以i != '\0'等价i != 0； 所以如果这样设计for循环的退出条件，那么这个循环是一次也不会执行的。 可以改成： for(i=0; s[i] !='\0';i++)

user: user-2
content: i是下标，不能将i与与’\0’进行比较 应该是i<strlen（s）

user: user-0
content: 引用 2 楼 自信男孩的回复:for(i=0;i!='\0';i++) 这个i为什么要和'\0'比较；'\0'是字符串结束标记，数值是0。所以i != '\0'等价i != 0； 所以如果这样设计for循环的退出条件，那么这个循环是一次也不会执行的。 可以改成： for(i=0; s[i] !='\0';i++) 试了试，也不行会得一串随机的数字
user-0 提问: 求助

回复:
user: user-1

user: user-2
content: 引用 1 楼 wowpH的回复:每次都是新分配的地址。不一样很正常。 你看看同样的代码运行两次，地址是一样吗？这个好像跟编译器也有点关系。

user: user-2
content: 每次都是新分配的地址。不一样很正常。

user: user-3
content: 每次运行加载到栈上的位置可能是不一样的，所以数组的基地址（或首地址）也不一样。这是正常现象～  关注点应该放在基于首地址后的偏移地址是否正确～

user: user-0
content: 他不是每次编译运行都不一样，同一段每次编译运行都是一样的
user-0 提问: 卑微小白在线求助！！求大神指点

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

user: user-2
content: 设置只需改那一个呀，其次，调试是对程序调试，不是对代码调试，所以你要先把代码编译成程序
user-0 提问: double 除以 int

回复:
user: user-0
content: 引用 2 楼 赵4老师 的回复:理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素我今天突然想一个问题：为什么要转化？这个算式的需求很明显，就是想把一个double类型的数分成两半。我觉得计算机应该有一种简便的方式来处理这类问题，没必要非得先把除数变为double型再去进行除法吧？

user: user-0
content: 引用 3 楼 liups 的回复:[quote=引用 楼主 韩雷 的回复:] double dVal = 10.0; int i= 2;  double dRet = dVal / i; //请问在这里，i会被隐含的转换为double吗？ 我觉得没必要吧？ 会！ cpu就没有double/int的指令。早期cpu没有double，纯靠库实现，后来有fpu，是一单独的芯片，现在的cpu里面直接包含了fpu。所以这种转换是必然的，这也不是C、C++独有的[/quote]我今天突然想一个问题：为什么要转化？这个算式的需求很明显，就是想把一个double类型的数分成两半。我觉得计算机应该有一种简便的方式来处理这类问题，没必要非得先把除数变为double型再去进行除法吧？

user: user-1
content: 引用 楼主 韩雷 的回复:double dVal = 10.0; int i= 2;  double dRet = dVal / i; //请问在这里，i会被隐含的转换为double吗？ 我觉得没必要吧？ 会！ cpu就没有double/int的指令。早期cpu没有double，纯靠库实现，后来有fpu，是一单独的芯片，现在的cpu里面直接包含了fpu。所以这种转换是必然的，这也不是C、C++独有的

user: user-2
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

user: user-3
content: 这个好像跟底层汇编有关系。

user: user-4
content: 这是实现相关的，不同的架构，不同的编译器，可能有不同的处理方式。一般x86下编译器不会转换的，除非这个除数被多次在浮点运算中使用，而是直接使用fidiv指令，这个支持浮点除以整数。x64下，编译器一般不使用x87指令，而是用SSE/AVX指令做浮点运算，后者没有浮点除以整数的指令，必须先把除数转换为浮点。
user-0 提问: 我是一个初学者，在数据结构（c语言版）中，怎样对在有头结点的单链表原表进行倒置。（不新建表）

回复:
user: user-1
content: 初学者就要多敲代码，总想要想别人给是学不好的

user: user-2
content: 遍历一遍啊，代码就不给了，你自己写，我们看看
user-0 提问: C语言Debug Errorl如何解决？

回复:
user: user-1
content: 你这是运行的错误提示，还是编译的提示？ 如果是运行的，从你的代码里可以看到语法问题：  scanf("%d%d%d", &a, &b, &c);

user: user-2
content: scanf("%d%d%d", &a, &b, &c);
user-0 提问: 请用C语言编程！困扰很久的一道题，请大家帮忙，谢谢！

回复:
user: user-0
content: ans = new char(len+begin+1);   这个new char是从哪里突然冒出来的？

user: user-1
content: 引用 3 楼 weixin_45654039 的回复:ans = new char(len+begin+1);   这个new char是从哪里突然冒出来的？  他写的是C++代码，而且格式有点不对。在C语言里面可以用malloc：ans = (char*)malloc(len+begin+1);

user: user-2
content: 就地写了一个，您看行不   char *getShortest(char s[], int len) { 	char *ans; 	int begin = len; 	for(int i= len-1;i>0;--i){ 		if(s[0]==s[i]){ 			int j; 			for(j = i+1;j<len;++j){ 				if(s[j-i]!=s[j])break; 			} 			if(j==len)begin = i; 		} 	} 	ans = new char(len+begin+1); 	for(int i=0;i<begin;++i){ 		ans[i] = s[i]; 	} 	for(int i=0;i<len;++i){ 		ans[begin+i] = s[i]; 	} 	ans[len+begin]='\0';  	return ans; }

user: user-1
content: 作业题不解释
user-0 提问: 请问一下，为什么复数虚部没有进入运算？

回复:
user: user-1
content: 你这个是虚部根本就没输入成功的

user: user-1
content: scanf("%f+%fi",&vr,&vi); 你这个需要输入两个数，中间有加号，比如“3+4”

user: user-0

user: user-1
content: 什么意思？你把结果发出来啊
user-0 提问: C语言设计习题
C 语言入门
数组
C语言小白，考研要考，想知道在什么情况下要把定义数组写在int main 前面，如图所示?

回复:
user: user-1
content: 全局变量  非静态局部变量     静态局部变量

user: user-0
content: 引用 1 楼 自信男孩的回复:放在函数内，是局部变量，放在函数外是全局变量。位置不一样，变量的意义不一样，作用域和生命周期不一样～ 想知道如果考试时候，是把定义的数组放在全局变量的位置正确还是放main函数里，如图1中定义数组array[N][N]那句如果放在main函数里程序还是正确的功能和运行么

user: user-2
content: 放在函数内，是局部变量，放在函数外是全局变量。位置不一样，变量的意义不一样，作用域和生命周期不一样～
user-0 提问: fwrite与fprintf有什么区别，可以互换吗？

回复:
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-0 提问: 求救

回复:
user: user-1
content: 其实可以逆向求解。将排好的扑克牌（1_2_3_..joker）模拟一遍过程，最终得出来的扑克牌顺序反推。比如最终牌序 第6张牌是1，那么原牌序中第1张牌就放6

user: user-2
content: 是底部拿一张放在上边，再抽一张放在上边这么循环吗？？？
user-0 提问: C语言中如何提取字符串中重复字母其中的一个字母

回复:
user: user-1
content: 引用 7 楼 hslbloc的回复:给你一段C语言版的参考函数吧   /**   * 函数功能：提取字符串去重复字母后的内容（C语言版）   *   * 时间复杂度：O(n)   * 空间复杂度：O(1)   */ void dereplication(const char *src, char *dst) { 	char unique[30];  	while (*src) 	{ 		// 利用字符的ASCII码值作为unique下标（等于主键），可避免重复遍历unique。 		// ASCII码值-'a'偏移量的作用，可大幅减小数组unique的长度。 		if (unique[*src-'a']==0) 		{ 			unique[*src-'a']=1; 			*(dst++) = *src;  // 如果在调用该函数之前有宏定义(#define __DEBUG)，则打印输出			 #ifdef __DEBUG 			printf("%c", *src); #endif 		}  		// 遍历字符串，直到'\0'结束 		src++; 	}  	// 给提取后字符串添加结束符 	*dst='\0'; }   抱歉，代码有小缺陷（部分编译器不会对未初始化的数组置零）。因此函数代码第9行应该手动初始化，即： char unique[30]={0};

user: user-1
content: 给你一段C语言版的参考函数吧   /**   * 函数功能：提取字符串去重复字母后的内容（C语言版）   *   * 时间复杂度：O(n)   * 空间复杂度：O(1)   */ void dereplication(const char *src, char *dst) { 	char unique[30];  	while (*src) 	{ 		// 利用字符的ASCII码值作为unique下标（等于主键），可避免重复遍历unique。 		// ASCII码值-'a'偏移量的作用，可大幅减小数组unique的长度。 		if (unique[*src-'a']==0) 		{ 			unique[*src-'a']=1; 			*(dst++) = *src;  // 如果在调用该函数之前有宏定义(#define __DEBUG)，则打印输出			 #ifdef __DEBUG 			printf("%c", *src); #endif 		}  		// 遍历字符串，直到'\0'结束 		src++; 	}  	// 给提取后字符串添加结束符 	*dst='\0'; }

user: user-1
content: 引用 1 楼 自信男孩的回复:比较出现的次数吧，int ch[26] = { 0 };然后计算每个字母出现的次数，次数大于1的就是重复的字母；  另外，楼主的例子有问题吧，重复的字母应该是:adsa 楼主的意思是去重后输出

user: user-2
content: 遍历吧! 遍历“asddsfaa”（假定结果放在数组result中，初始化为空，为了简单起见可以再定义一个变量len记录当前长度，初始化0），源串中每取一个字符，去result中查找（没找到的话根据len加入其末尾并调整len，找到的则什么也不做）。  最后输出result  PS：查找也是遍历，当然为了快速查找可以考虑对result排序

user: user-3
content: 引用 3 楼 weixin_44378872 的回复:[quote=引用 1 楼 自信男孩的回复:]比较出现的次数吧，int ch[26] = { 0 };然后计算每个字母出现的次数，次数大于1的就是重复的字母；  另外，楼主的例子有问题吧，重复的字母应该是:adsa 不是的，就是提取出其中出现的所有字母，但重复出现的只提取一个出来 同时将这些字母存放如另一个数组中 并不是只要统计次数的 例如asdfassa 我提取asdf 但如果遍历的话，第一循环循环的到了第2个a时第二循环循环到第三个a，第二个a也会放入这个数组。 如果要提取数中字母重复次数在两次以上就会在提取的字母中又出现重复[/quote]统称次数的数组里面 不是0 就直接continue 就行了

user: user-0
content: 引用 1 楼 自信男孩的回复:比较出现的次数吧，int ch[26] = { 0 };然后计算每个字母出现的次数，次数大于1的就是重复的字母；  另外，楼主的例子有问题吧，重复的字母应该是:adsa 不是的，就是提取出其中出现的所有字母，但重复出现的只提取一个出来 同时将这些字母存放如另一个数组中 并不是只要统计次数的 例如asdfassa 我提取asdf 但如果遍历的话，第一循环循环的到了第2个a时第二循环循环到第三个a，第二个a也会放入这个数组。 如果要提取数中字母重复次数在两次以上就会在提取的字母中又出现重复

user: user-2
content: 引用 1 楼 自信男孩 的回复:比较出现的次数吧，int ch[26] = { 0 };然后计算每个字母出现的次数，次数大于1的就是重复的字母；  另外，楼主的例子有问题吧，重复的字母应该是:adsa 楼主意思应该是重复的只取一个，如果只取重复的没有f，那就是asd

user: user-4
content: 比较出现的次数吧，int ch[26] = { 0 };然后计算每个字母出现的次数，次数大于1的就是重复的字母；  另外，楼主的例子有问题吧，重复的字母应该是:adsa
user-0 提问: 大二C语言课程设计

回复:
user: user-1
content: 滴滴打车被你们一个课程设计 就能做出来，你们老师心真大！

user: user-2
content: 指一条路：嘀嘀打车系统复杂的一批，但是作为课设来说的话，我觉得用到一个数据结构作为核心就稳了，那就是怎么样实现乘客排队，那么就要写好一个队列的数据结构，队列的数据结构和接口网上随便找，你也可以看我的博客。然后就是写边边角角的工作了。 把这个队列写好我觉得大概能及格吧。。。。哈哈

user: user-3
content: 百度一些差不多的边了解边做把
user-0 提问: C语言中，怎样解决float转int导致的生成失败。(刚学习C语言)

回复:
user: user-1
content: int y = (int)h;应该是这样，而不是int y = (float)h;

user: user-2
content: 改好了？好像c语言在某些编译器下，变量声明要放在最前面的

user: user-0
content: 引用 1 楼 xueyu人生的回复:你应该是int y = (int)h; 不是，我已经试过了，生成失败。

user: user-3
content: 你应该是int y = (int)h;

user: user-4
content: 确定改好了?不见得哦。(float)(h)有什么用？h本身就是float型

user: user-0
content: 引用 3 楼 user-5的回复:上面忘记加分号；了吧 是的，忘加分号了，已经改好了

user: user-5
content: 上面忘记加分号；了吧
user-0 提问: 程序中变量的地址存在哪里？

回复:
user: user-1
content: 描述的基本上是没问题的～exe文件描述的是栈空间的大小，偏移， 而起始地址是在加载到内存时来确定的，程序最终都需要放到内存 里去运行。

user: user-2
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
user-0 提问: 求教，我写的交换两个结点的值为什么不行，返回时结点顺序还是没变

回复:
user: user-0
content: 确定 while 的条件都满足吗？你是如何确认有没有交换成功的？[/quote]  因为调试过了，没返回好像一切都正常，但是返回后结点的值没有变

user: user-0
content: 因为调试过了，没返回好像一切都正常，但是返回后结点的值没有变

user: user-1
content: 引用 3 楼 weixin_42609156 的回复:抱歉，由于这个算法行不通，所以后期更改了，忽略掉while循环后面的语句就行了  typedef struct DNode{ ElemType data;//数据域  struct DNode *prior; struct DNode *next;//指针域  ElemType freq;  }DNode,*DoubleList;   void Locate(DoubleList &L,int x){ DNode *p = L->next; while(p!=null&&p->data!=x){ p=p->next; } if(p->data!=x){ printf("不存在其值为x的点");exit(0);  } p->freq++;  while(p->freq>=p->prior->freq&&p->prior!=L){ p->data=p->prior->data; p->prior->data=x;  }	 return; }  引用 2 楼 NorZ 的回复:q 是那儿来的？  确定 while 的条件都满足吗？你是如何确认有没有交换成功的？

user: user-1
content: q 是那儿来的？

user: user-2
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

user: user-0
content: 抱歉，由于这个算法行不通，所以后期更改了，忽略掉while循环后面的语句就行了  typedef struct DNode{ ElemType data;//数据域  struct DNode *prior; struct DNode *next;//指针域  ElemType freq;  }DNode,*DoubleList;   void Locate(DoubleList &L,int x){ DNode *p = L->next; while(p!=null&&p->data!=x){ p=p->next; } if(p->data!=x){ printf("不存在其值为x的点");exit(0);  } p->freq++;  while(p->freq>=p->prior->freq&&p->prior!=L){ p->data=p->prior->data; p->prior->data=x;  }	 return; }  引用 2 楼 NorZ 的回复:q 是那儿来的？
user-0 提问: C

回复:
user: user-1
content: 浮点数精度超出编辑器

user: user-0
content: 但我又写了一个程序，把3*f的值按float类型存储，用printf输出%. 40f 为1.00000…，所以1.0000…==1不对吗

user: user-2
content: 是浮点数的精度问题，所以浮点数的比较运算不能用整型数那样直接比较，而是通过比较差值的绝对值小于 某个数来判断是否相等，比如小于1e-6

user: user-3
content: 等于最好这样：      const   float   E   =   1e-6;      float   f1   ,   f2;       if(fabs(f1   -   f2)   <   E)      {……}    不可将浮点变量用“==”或“！=”与任何数字比较。     千万要留意，无论是float还是double类型的变量，都有精度限制。所以一定要避免将浮点变量用“==”或“！=”与数字比较，应该设法转化成“>=”或“<=”形式。 假设浮点变量的名字为x，应当将    if (x == 0.0)     // 隐含错误的比较 转化为  if ((x>=-EPSINON) && (x<=EPSINON)) 其中EPSINON是允许的误差（即精度）。

user: user-3
content: 编译工具有关，有的编译器输出就是 1 不必深究

user: user-4
content: 浮点型有数据精度，即有一些浮点数，用有限的二进制位是无法精确表达的
user-0 提问: C语言初学者

回复:
user: user-1
content: 引用 4 楼 weixin_41010602的回复:区别是 关键字都有特定的功能，不能给它赋值，更改它的作用功能等  而标识符 只要不和关键字还有特定的函数，在程序中已经被特殊定义过的，代码雷同，就可以随意命名，但是好像有长度限制  我也是新手，这些都是我专门查到的资料 对了，标识符最标准的是，做到见名知义，就是看到他的名字，就知道他所标记的里面所代表的是什么

user: user-1
content: 区别是 关键字都有特定的功能，不能给它赋值，更改它的作用功能等  而标识符 只要不和关键字还有特定的函数，在程序中已经被特殊定义过的，代码雷同，就可以随意命名，但是好像有长度限制  我也是新手，这些都是我专门查到的资料

user: user-2
content: 所谓标识符，就是你起的一个名字。c/c++中，是你用来标识变量名、符号常量名、函数名、数组名、文件名、类名、对象名等的。（就好像你父母有了你以后给你起的名字）~~ c/c++有效标识符的构成规则如下 （1）第一个字符必须是字母（不分大小写）或下划线（_）; （2）后跟字母（不分大小写）、下划线（_）或数字组成; （3）标识符中的大小写字母有区别。如，变量sum,sum,sum代表三个不同的变量； （4）不能与c编译系统已经预定义的、具有特殊用途的保留标识符（即关键字）同名。比如，不能将标识符命名为float,auto,break,case,this,try,for,while,int,char,short, unsigned,等等。   关键字，通俗点说，就是设计这个语言的人定义的标识符。（也就是他用了，你不能再用了）。具体哪些是关键字，用多了就知道了，反正常用的就那么些。

user: user-0
content: 引用 2 楼 myxk_的回复:关键字的用处在于编辑数据，使得程序准确存储、识别、和编辑数据。32个确实多单常用的就是10几个，若遇上了现查就好了，学习驾车又不必学习引擎制造的不必深究 懂啦 谢啦就是套路对吧 不用死扣

user: user-3
content: 关键字的用处在于编辑数据，使得程序准确存储、识别、和编辑数据。32个确实多单常用的就是10几个，若遇上了现查就好了，学习驾车又不必学习引擎制造的不必深究

user: user-4
content: 所谓关键字，直白的理解就是C本身使用的词，有特殊的含义，你不能再用作它用。
user-0 提问: 求大佬帮忙，看看这是为什么？

回复:
user: user-1
content: # include<stdio.h> 这是预处理命令 int main() 这是主函数。备注程序就是个函数 printf（）函数，这是屏幕输出函数，圆括号内的是显示在屏幕上的内容。 \n这是换行符 return 0;这是返回函数必须带的
user-0 提问: 小白一个，求大神指导，这个程序哪里有问题啊

回复:
user: user-1
content: 经常有人将printf、scanf的字符串搞混

user: user-2
content: 引用 1 楼 uouo88 的回复:scanf中多了一个\n   int main() { 	printf("请输入北京时间:\n"); 	int BJT, UJT; 	scanf("%d", &BJT); 	if (0 <= BJT <= 2359) 	{ 		UJT = BJT - 800; 		if (UJT < 0) 			printf("世界协调时为：前一天的%d\n", BJT / (-1)); 		else 			printf("世界协调时为：%d\n"); 	} 	else 		printf("error!"); }  printf("世界协调时为：%d\n"); 这句少一个参数～

user: user-3
content: scanf中多了一个\n   int main() { 	printf("请输入北京时间:\n"); 	int BJT, UJT; 	scanf("%d", &BJT); 	if (0 <= BJT <= 2359) 	{ 		UJT = BJT - 800; 		if (UJT < 0) 			printf("世界协调时为：前一天的%d\n", BJT / (-1)); 		else 			printf("世界协调时为：%d\n"); 	} 	else 		printf("error!"); }

user: user-4
content: scanf("%d\n", &BJT); 中多了"\n" 改为 scanf("%d", &BJT); 为什么第一行代码多了\n之后，需要输入两次，程序才能向下继续执行呢？ scanf()函数的作用是从标准的输入流中读取数据，并将读取到的数据保存到指定的变量中。其格式为 int scanf( const char *format [, argument]... ); 其中，参数format指定了读取数据的方式；argument是一个参数列表，其类型是变量的地址，scanf()函数读取到的数据就保存到这些变量中。 所以，“%d\n”是scanf()函数中的format，而用户输入的格式也要和format的格式匹配。而scanf()函数只有遇到回车键时才会从输入缓冲区中读取数据，当用户在控制台窗口中输入"1回车"时，此时的回车按键只是匹配了format的格式，而不能让scanf()函数开始从缓冲区中读取数据。这时你可能会说，是不是再次按下回车键就可以让scanf()函数开始从缓冲区中读取数据了？实际上还是不行，因为遇到回车符时，该让scanf()函数会读取输入数据流中连续的回车符，但是不会存储这些字符，直到读取到输入数据流中非回车符为止。 所以，此时输入多少个回车符都不起作用，需要再次输入一个数字加上回车符才可以。 而修改之后的代码中，scanf()的format中不包含回车按键，当用户在控制台窗口中输入"1回车"时，这个回车按键就会使得scanf()开始读取输入数据流的数据。 请参考《scanf()函数的用法》 希望能够帮到你！
user-0 提问: 指针初始化赋值问题

回复:
user: user-1
content: 指针赋值字符串，其实是把字符串的首地址赋值给了指针～

user: user-2
content: char *s1 = "OK";  	printf("%s", s1);         可以正常输出“OK”           char *s2 = s1；          printf("%s", s2);          也可以正常输出“OK”

user: user-2
content: 这个是可以的

user: user-3
content: 没问题的，放心用吧！
user-0 提问: 并发如何突破端口数65535的限制

回复:
user: user-1
content: 引用 12 楼 stherix 的回复:一般都是负载均衡 集群配置  另外 你的服务器崩绝对不是端口数的问题 连接的客户端再多,你服务器也只要使用一个端口 肯定是代码里有错误,比如连接池大小用ushort等等 需要查看错误日志,看问题出在哪  我看楼主就不像是有心想跟我们讨论问题的。 另外，他所说的端口可能不是我们想的那个端口。现在有的人讨论问题呢，直接模糊专业术语，搞得讨论半天根本不在一个点上。就好比说端口这个术语吧，我以前跟人家讨论过，结果发现说了半天，他指的是连接。我觉得吧，专业性的问题，最好是用专业术语，你不能说一个西瓜是冬瓜，否则没办法讨论了

user: user-2
content: 一般都是负载均衡 集群配置  另外 你的服务器崩绝对不是端口数的问题 连接的客户端再多,你服务器也只要使用一个端口 肯定是代码里有错误,比如连接池大小用ushort等等 需要查看错误日志,看问题出在哪

user: user-1
content: 引用 10 楼 m0_37837425 的回复:大家都没有回答到我的核心问题，我的问题是写的并发高于6万/秒，进程就会挂，也就是超过了端口的数量，没超过不会有问题。  或许大家的回答没切中要害，但是楼主有没 想过一个问题，你这个问题本来就含有一个悖论，换句话说，当你提出这个问题的时候，不见得考虑过你所提出这个问题，实际上存在矛盾的。  首先，如果你这个服务器是一个TCP服务器的话，怎么可能会有你所说的端口数超6万的存在呢？一般我们TCP服务器都是绑定一个端口，然后不管连进来的客户端达到多少数量，它就一个端口而已，怎么会存在端口数超量的问题呢？  那么，难道你说的是UDP服务器，那么你这个服务器的响应机制是怎么样的呢？当一个客户端发数据报上来，服务器就创建一个socket与它通信吗？如果是这样，这个服务器的资源足够使用吗？当客户端不再活跃的时候，这个资源要释放吗？这里面有很多问题要解决了，而这些不是我们这些外人说几句话就能解决的了。

user: user-0
content: 大家都没有回答到我的核心问题，我的问题是写的并发高于6万/秒，进程就会挂，也就是超过了端口的数量，没超过不会有问题。

user: user-3
content: 引用 6 楼 SuperDay 的回复:[quote=引用 楼主 m0_37837425 的回复:] 大家好，我在做IM系统测试的时候发现，连接数可以达到100万，但并发请求（即同时发送消息的QPS）超过65535的时候，系统就挂了。请问像腾讯这样的大型IM是如何解决这个问题的？  大型的IM服务器，是通过多台服务器的集群来解决连接数超多的问题[/quote] 你们的单台服务器可以到多少连接？理论上可以到百万吗？主要限制是在哪里

user: user-3
content: 引用 5 楼 SuperDay 的回复:[quote=引用 1 楼 羽飞 的回复:] 那楼主知道超过65535就挂在哪里吗？知道现象找原因，把系统报错，或者out of memory，或者程序崩溃，都有原因。 发送消息使用的是TCP还是UDP。测试客户端是一台还是多台? TCP连接受限制于四元组(IP,PORT, IP,PORT),服务端的IP和PORT是固定的，但是客户端的IP和PORT还是很多的，所以如果客户端只有一台机器那受PORT个数限制。PORT的个数也不是65535，有一些是系统保留的不能用的。  虽然端口号不会上去，但是socket有可能达到上限的啊，如果连接数过多，就像linux系统，它有个最大打开文件数的设置[/quote] 是的，所以要看下报错的原因，可能就是自认为是这个错误，但实际不一定。

user: user-4
content: 不频繁传输数据的服务器（一般用户只是登记到服务器，主要通信是用户间直接完成的，需要服务器中转的很少），连接用户数几十万上百万没有问题，参考电骡服务器，一般最大用户数限制是几万到几十万。

user: user-1
content: 引用 楼主 m0_37837425 的回复:大家好，我在做IM系统测试的时候发现，连接数可以达到100万，但并发请求（即同时发送消息的QPS）超过65535的时候，系统就挂了。请问像腾讯这样的大型IM是如何解决这个问题的？  大型的IM服务器，是通过多台服务器的集群来解决连接数超多的问题

user: user-1
content: 引用 1 楼 羽飞 的回复:那楼主知道超过65535就挂在哪里吗？知道现象找原因，把系统报错，或者out of memory，或者程序崩溃，都有原因。 发送消息使用的是TCP还是UDP。测试客户端是一台还是多台? TCP连接受限制于四元组(IP,PORT, IP,PORT),服务端的IP和PORT是固定的，但是客户端的IP和PORT还是很多的，所以如果客户端只有一台机器那受PORT个数限制。PORT的个数也不是65535，有一些是系统保留的不能用的。  虽然端口号不会上去，但是socket有可能达到上限的啊，如果连接数过多，就像linux系统，它有个最大打开文件数的设置

user: user-5
content: 服务端  引用 1 楼 羽飞 的回复:那楼主知道超过65535就挂在哪里吗？知道现象找原因，把系统报错，或者out of memory，或者程序崩溃，都有原因。 发送消息使用的是TCP还是UDP。测试客户端是一台还是多台? TCP连接受限制于四元组(IP,PORT, IP,PORT),服务端的IP和PORT是固定的，但是客户端的IP和PORT还是很多的，所以如果客户端只有一台机器那受PORT个数限制。PORT的个数也不是65535，有一些是系统保留的不能用的。 这位兄弟说的很清楚了，不是端口数的限制问题。 从别的方面考虑，会不会是你的变量使用了16位数字做记录，达到65535会翻转。 上面也是随意想想可能出现问题的情况之一，还是得从问题具体现象作分析。

user: user-6
content: 既然是这么大的量，没有做负载均衡吗？

user: user-0
content: 客户端我有很多台，服务器端也绑定了很多个端口

user: user-3
content: 那楼主知道超过65535就挂在哪里吗？知道现象找原因，把系统报错，或者out of memory，或者程序崩溃，都有原因。 发送消息使用的是TCP还是UDP。测试客户端是一台还是多台? TCP连接受限制于四元组(IP,PORT, IP,PORT),服务端的IP和PORT是固定的，但是客户端的IP和PORT还是很多的，所以如果客户端只有一台机器那受PORT个数限制。PORT的个数也不是65535，有一些是系统保留的不能用的。
user-0 提问: 5.30版本cubemx配置can通信问题

回复:
user: user-1
content: 同问。。。

user: user-0
content: 第二天找到问题了，晶振频率没选对

user: user-2
content: F1似乎没这个问题，F4也遇到这个坑了，有脱坑的大佬或者早就看穿一切的大佬吗？欢迎发言

user: user-3
user-0 提问: 求助贴，这个c语言程序哪里出错了，怎么只运行当n＝111结果？程序题目如图。

回复:
user: user-1
content: 代码本身没问题，只是写得效率太低，导致后面的结果需要很长时间才能输出

user: user-2
content: 那就是其他两个数都是素数，然后的你main函数中已经有逻辑，只输出不是素数的情况，那只有111不是素数，所以只打印出111的结果。
user-0 提问: 求解，顺序表的销毁

回复:
user: user-1
content: free(L)肯定是不行的。 free(L.elem)应当是可以的。就是下面着这样：  Status DestroyList(SqList &L){     free(L.elem);     return OK; } //销毁

user: user-2
content: 关键是顺序表是采用链表还是数组，从已有代码来看是链表，链表的话就得从最后一个开始一个个free

user: user-3
content: 建议提供更多的代码，但从目前的信息上看free(L);肯定是不可以的，free(L.elem);还可以理解。因为上面是L.elem=malloc的
user-0 提问: 二维数组的有关问题

回复:
user: user-1
content: 如果数组的元素又是数组，则称为二维数组。例如  int marbles[3][4] = { {0, 1, 2, 3} , {4, 5, 6, 7} , {8, 9 ,10 ,11} }; 可以将a看成一个数组，这个数组中有3个元素，每个元素又是一个包含4个int的数组。 a[0]表示二维数组中的第一个元素，a[1]表示二维数组中的第二个元素，而二维数组中的元素类型还是数组，所以a[0]表示数组{0, 1, 2, 3}的地址，a[1]表示数组{4, 5, 6, 7}的地址。a是指向其第一个元素，则a+1指向其第二个元素，a+2指向其第三个元素，所以 printf("%p\t%p\t%p\n", marbles, marbles + 1, marbles + 2); 	printf("%p\t%p\t%p\n", marbles[0], marbles[1], marbles[2]); 以上两行代码输出的地址应该是相同的。 printf("%p\t%p\t%p\n", marbles[0], marbles[0]+1, marbles[0]+2); 分别表示marbles第一个元素（数组）的第1-3个元素，即0， 1，2   请参考《C++二维数组》 《C++数组地址偏移》 希望能够帮到你！

user: user-2
content: 引用 楼主 老犯錯誤 的回复:在学习二维数组的过程中（书是c primer plus 第六版第303面）发现书上的结论和我的实践结果不一样 假定一个二维数组 int zippo[][] 作者说数组名zippo是地址的地址，所以zippo指向一个8字节数据对象。因此zippo加1，它所指向的地址加8字节。 以下是我自己的实验结果 你得看你是编译为多少位的程序了32位程序寻址就是4字节地址 4*8=32
user-0 提问: 用C语言来编写程序

回复:
user: user-1
content: 需要编译器开启对C++17的支持，我用#CSDN#这个app发现了有技术含量的博客，小伙伴们求同去《VS2019修改C++标准（支持C++17）》, 一起来围观吧 https://blog.csdn.net/qq_40946921/article/details/90645890?utm_source=app

user: user-0
content: 引用 4 楼 user-1的回复: #include <iostream> #include <filesystem> #include <fstream> using namespace std; using namespace std::filesystem; void traverse() { 	 } void moveWav(string infile, string outfile) { 	if (!exists(infile)) { 		cout << "目录不存在" << endl; 		return; 	} 	if (!exists(outfile)&&!outfile.empty())	//输出目录不存在时，构建目录 		create_directories(outfile); 	directory_iterator trans(infile); 	char buffer[4]; 	int32_t sample_rate=0; 	int16_t bits_per_sample = 0; 	while (!trans._At_end()) { 		directory_iterator it = trans; 		++trans; 		if (it->path().extension().string() == ".wav") { 			ifstream in(it->path()); 			in.seekg(24); 			in.get((char *)&sample_rate, sizeof(sample_rate)); 			in.seekg(34); 			in.get((char*)& bits_per_sample, sizeof(bits_per_sample)); 			in.close(); 			if (sample_rate == 16000 && bits_per_sample == 16) {	//判断 				try {		 					copy_file(it->path(), path(outfile).append(it->path().filename().string())); 					cout << it->path().filename() << ":复制成功" << endl; 				} 				catch (filesystem_error& e) { 					std::cout << "复制失败！" << e.what() <<endl; 				} 			} 		} 	} } int main() { 	moveWav("C:/Users/Administrator/Desktop/","D:/");	//参数为输入输出目录，注意目录以分隔符结尾 	return 0; }   谢谢谢谢，非常有用，

user: user-1
content: #include <iostream> #include <filesystem> #include <fstream> using namespace std; using namespace std::filesystem; void traverse() { 	 } void moveWav(string infile, string outfile) { 	if (!exists(infile)) { 		cout << "目录不存在" << endl; 		return; 	} 	if (!exists(outfile)&&!outfile.empty())	//输出目录不存在时，构建目录 		create_directories(outfile); 	directory_iterator trans(infile); 	char buffer[4]; 	int32_t sample_rate=0; 	int16_t bits_per_sample = 0; 	while (!trans._At_end()) { 		directory_iterator it = trans; 		++trans; 		if (it->path().extension().string() == ".wav") { 			ifstream in(it->path()); 			in.seekg(24); 			in.get((char *)&sample_rate, sizeof(sample_rate)); 			in.seekg(34); 			in.get((char*)& bits_per_sample, sizeof(bits_per_sample)); 			in.close(); 			if (sample_rate == 16000 && bits_per_sample == 16) {	//判断 				try {		 					copy_file(it->path(), path(outfile).append(it->path().filename().string())); 					cout << it->path().filename() << ":复制成功" << endl; 				} 				catch (filesystem_error& e) { 					std::cout << "复制失败！" << e.what() <<endl; 				} 			} 		} 	} } int main() { 	moveWav("C:/Users/Administrator/Desktop/","D:/");	//参数为输入输出目录，注意目录以分隔符结尾 	return 0; }

user: user-0
content: 引用 2 楼 user-1的回复:需要的话@一下_*# 需要需要，并且是急需，跪谢大佬

user: user-1
content: 需要的话@一下_*#

user: user-1
content: C++的我倒是知道怎么操作，现在有点事，等回去我看一下哈
user-0 提问: python遍历数组

回复:
user: user-0
content: 引用 3 楼 ctrigger的回复:仅供参考： #!/usr/bin/env python  def visit(lst):     print("[", end = " ")     for l in lst:         if isinstance(l, list):             visit(l)         else:             print(l, end = " ")     print("]", end = " ")  lst = [1,2,3,4,5,[60,61,62,63,64,65],7,8,[90,91]]   visit(lst)  很谢谢您嘿嘿

user: user-0
content: 引用 1 楼 user-2的回复: def visit(list1):     for i in list1:         if isinstance(i,(list,set)):             print("%s------start"%(i))             visit(i)             print("%s------end"%(i))         else:             print(i)  list1 = [1,2,3,4,5,[60,61,62,63,64,65],7,8,[90,91]]  visit(list1)   特别谢谢您

user: user-1
content: 仅供参考： #!/usr/bin/env python  def visit(lst):     print("[", end = " ")     for l in lst:         if isinstance(l, list):             visit(l)         else:             print(l, end = " ")     print("]", end = " ")  lst = [1,2,3,4,5,[60,61,62,63,64,65],7,8,[90,91]]   visit(lst)

user: user-2
content: def visit(list1):     for i in list1:         if isinstance(i,(list,set)):             print("%s------start"%(i))             visit(i)             print("%s------end"%(i))         else:             print(i)  list1 = [1,2,3,4,5,[60,61,62,63,64,65],7,8,[90,91]]  visit(list1)
user-0 提问: C

回复:
user: user-0
content: 引用 楼主 qq_45541848的回复:书上说“所有的浮点运算都是以双精度进行的，即使仅含float单精度运算的表达式，也要先转换为double类型，再进行运算” 但用sizeof测试int+float和int*float结果都是float类型，和书上说的矛盾，求大神解释一下这是怎么回事 谭的书上解释int+float在编译器内部实际上是double+double=double，但sizeof判断的结果类型为float，我应该记哪一种版本呢？

user: user-1
content: sizeof测试int+float和int*float都是本身的类型，和如何运算无关

user: user-2
content: 《C++Primer第5版中文版》中提到 算术类型之间的隐式转换被设计的极可能避免精度损失。 所以int+float时，会将int隐式转换为float int+double时，会将int隐式转换为double 以下代码在VS2015中调试 	int size1 = sizeof(3.14 + 3); 	int size2 = sizeof(3.14f + 3);

user: user-0
content: 引用 1 楼 liups的回复:sizeof测试int+float和int*float都是本身的类型，和如何运算无关 没看明白啥意思，刚学C，
user-0 提问: c语言 左移符号的问题

回复:
user: user-1
content: 先PCLK进行1M分频 分频完-1（那么这个分频结果估计也是个十以内数）  接下来三个移位和三个或，我认为应该是看门狗的控制寄存器BIT流，你要查一下手册，分频结果、3、1、分别对应哪几个寄存器。

user: user-2
content: 引用 1 楼 user-2 的回复:101<<3=101000 1<<2=100 101000|100=101100 (PCLK/1000000-1)<<8取决于PCLK是什么 3*2^3+2^2 弄错了， 3是11<<3=11000

user: user-2
content: 101<<3=101000 1<<2=100 101000|100=101100 (PCLK/1000000-1)<<8取决于PCLK是什么 3*2^3+2^2
user-0 提问: 数组

回复:
user: user-1
content: 引用 3 楼 Vanessa盐 的回复:[quote=引用 2 楼 棉猴 的回复：]《C++Primer第五版中文版》P44中提到 （变量的）作用域能彼此包含，被包含的作用域称为内层作用域，包含着别的作用域的作用域叫做外层作用域。作用域中一旦声明了某个名字，它所嵌套的所有作用域中都能访问该名字。同时，允许在内层作用域中重新定义外层作用域已有的名字。 请注意“重新定义”这四个字，也就是说在内层作用域中，重新定义的名字会覆盖外层作用域的名字！ 所以 	int a[2] = { 1, 0 }; 	for (i = 0; a[i]; i++) 	{ 		printf("%4d", a[i]); 	}[/code] 中，a[i]处于内层作用域，此时a[0]的值是1，a[1]的值是0。 对于	for (i = 0; a[i]; i++) 	{ 		int a[3] = { 100, 200, 300 }; 		printf("%4d", a[i]); 	} for语句中的a[i]处于 int a[2] = { 1, 0 }; 的作用域中，即a[1] = 0，而 printf("%4d", a[i]); 处于int a[3] = { 100, 200, 300 };的作用域下，a[0]的值是100 以下是数中的一个例子，也许对你有帮助 厉害厉害酪[/quote] 不敢不敢，对你有帮助就好。互相学习，共同进步！

user: user-0
content: 引用 2 楼 棉猴 的回复：《C++Primer第五版中文版》P44中提到 （变量的）作用域能彼此包含，被包含的作用域称为内层作用域，包含着别的作用域的作用域叫做外层作用域。作用域中一旦声明了某个名字，它所嵌套的所有作用域中都能访问该名字。同时，允许在内层作用域中重新定义外层作用域已有的名字。 请注意“重新定义”这四个字，也就是说在内层作用域中，重新定义的名字会覆盖外层作用域的名字！ 所以 	int a[2] = { 1, 0 }; 	for (i = 0; a[i]; i++) 	{ 		printf("%4d", a[i]); 	}[/code] 中，a[i]处于内层作用域，此时a[0]的值是1，a[1]的值是0。 对于	for (i = 0; a[i]; i++) 	{ 		int a[3] = { 100, 200, 300 }; 		printf("%4d", a[i]); 	} for语句中的a[i]处于 int a[2] = { 1, 0 }; 的作用域中，即a[1] = 0，而 printf("%4d", a[i]); 处于int a[3] = { 100, 200, 300 };的作用域下，a[0]的值是100 以下是数中的一个例子，也许对你有帮助 厉害厉害🤙

user: user-1
content: 《C++Primer第五版中文版》P44中提到 （变量的）作用域能彼此包含，被包含的作用域称为内层作用域，包含着别的作用域的作用域叫做外层作用域。作用域中一旦声明了某个名字，它所嵌套的所有作用域中都能访问该名字。同时，允许在内层作用域中重新定义外层作用域已有的名字。 请注意“重新定义”这四个字，也就是说在内层作用域中，重新定义的名字会覆盖外层作用域的名字！ 所以 	int a[2] = { 1, 0 }; 	for (i = 0; a[i]; i++) 	{ 		printf("%4d", a[i]); 	}[/code] 中，a[i]处于内层作用域，此时a[0]的值是1，a[1]的值是0。 对于	for (i = 0; a[i]; i++) 	{ 		int a[3] = { 100, 200, 300 }; 		printf("%4d", a[i]); 	} for语句中的a[i]处于 int a[2] = { 1, 0 }; 的作用域中，即a[1] = 0，而 printf("%4d", a[i]); 处于int a[3] = { 100, 200, 300 };的作用域下，a[0]的值是100 以下是数中的一个例子，也许对你有帮助

user: user-2
content: 对
user-0 提问: c语言冒泡排序，可以这样写吗,帮纠错。

回复:
user: user-0
content: 引用 6 楼 user-1的回复:for(int j = i + 1; j < n;  ++j) {     if (a[i] < a[j]) {         int temp = a[i];         a[i] = a[j];         a[j] = temp;     } } 谢谢，这样改是没问题了。

user: user-1
content: for(int j = i + 1; j < n;  ++j) {     if (a[i] < a[j]) {         int temp = a[i];         a[i] = a[j];         a[j] = temp;     } }

user: user-0
content: 引用 1 楼 user-1的回复:运行一下就知道了。 我知道有什么出错了，如果进行a[i]=()的赋值，原来的值没有了。。。

user: user-0
content: 我知道可能不是冒泡。

user: user-0
content: 我也觉得是，冒泡的是把最大或最小的先放下面，我是把它放上面。

user: user-1
content: 另外：你这个不是冒泡。

user: user-1
content: 运行一下就知道了。
user-0 提问: 局部静态变量

回复:
user: user-1
content: c的值怎么可能一直是2呢？肯定是2 3 4递增的呀，a一直是5，b一直是2，所以结果才是9 10 11呀。而且答案说是递归，我没看出来哪里用到递归了，只是循环调用同一个函数而已呀。

user: user-2
content: 拿个编译器，自己是试一下就知道了 他的解释是错的

user: user-3
content: 把你的fun()函数修改了一下 int fun(int a) { 	int b = 1; 	static int c = 1; 	a++; 	b++; 	++c; 	printf("%d+%d+%d=", a, b, c);//添加了如下代码，可以打印a，b,c的值 	return a + b + c; } VS2015调试的结果是  这样可能就好理解一些了

user: user-0
content: 引用 1 楼 真相重于对错 的回复：拿个编译器，自己是试一下就知道了 他的解释是错的ok
user-0 提问: C语言

回复:
user: user-1
content: 照着书上的抄，这样效果好一点。

user: user-2
content: 这个帖子怎么还没结掉呀？楼主解决问题了，还是要结帖的，这样人家回答你的问题也会有积极性的，本来都是没什么好处，只是攒一点积分而已。

user: user-3
content: 你这代码格式看的头疼

user: user-4
content: 在两个scanf之间加一个getchar()函数试试

user: user-5
content: 图片上看不清代码，你应该想办法弄清楚一点

user: user-6
content: 我觉得输入那块需要改进一下。有点麻烦，说明也让人看不懂你觉得呢

user: user-7
content: 额。。。 楼主，代码中的m是干什么的  输出UTC时为什么要赋 m 的值 是粗心打错了吗，这样写不知道代码是干啥的

user: user-8
content: 引用 17 楼 LINZHONG21的回复:[quote=引用 15 楼 通信小卒的回复:][quote=引用 10 楼 LINZHONG21的回复:][quote=引用 8 楼 通信小卒的回复:]如果回答了你的问题，希望采纳，不明白的可以继续沟通 怎么采纳呀，我不知道[/quote] 你仔细找找有采纳的按钮[/quote] 还是，，，找不到采纳。。[/quote] 结帖，如果对我的结果满意，设置满意就行

user: user-8
content: 引用 17 楼 LINZHONG21的回复:[quote=引用 15 楼 通信小卒的回复:][quote=引用 10 楼 LINZHONG21的回复:][quote=引用 8 楼 通信小卒的回复:]如果回答了你的问题，希望采纳，不明白的可以继续沟通 怎么采纳呀，我不知道[/quote] 你仔细找找有采纳的按钮[/quote] 还是，，，找不到采纳。。[/quote] 结帖，如果对我的结果满意，设置满意就行

user: user-2
content: 就是结帖啊！！！

user: user-0
content: 引用 15 楼 通信小卒的回复:[quote=引用 10 楼 LINZHONG21的回复:][quote=引用 8 楼 通信小卒的回复:]如果回答了你的问题，希望采纳，不明白的可以继续沟通 怎么采纳呀，我不知道[/quote] 你仔细找找有采纳的按钮[/quote] 还是，，，找不到采纳。。

user: user-9
content: 有中文字符吧

user: user-8
content: 引用 10 楼 LINZHONG21的回复:[quote=引用 8 楼 通信小卒的回复:]如果回答了你的问题，希望采纳，不明白的可以继续沟通 怎么采纳呀，我不知道[/quote] 你仔细找找有采纳的按钮

user: user-8
content: 整个程序不清楚你的m值是做什么的？ 如果t是北京世间的话， printf("UTC=%d\n",UTC);就好了

user: user-0
content: 引用 12 楼 通信小卒的回复:[quote=引用 9 楼 通信小卒的回复:][quote=引用 7 楼 LINZHONG21的回复:][quote=引用 6 楼 通信小卒的回复:]这个程序是将北京时间转化成UTC时间(通用协调时)，北京时间提前UTC时间8小时 是，但是我执行的时候就出问题了[/quote] 你说说出什么问题了？[/quote] 你想要达到什么样的结果，可以说一下[/quote] 输入北京时间，换算出UTC时间

user: user-8
content: 引用 9 楼 通信小卒的回复:[quote=引用 7 楼 LINZHONG21的回复:][quote=引用 6 楼 通信小卒的回复:]这个程序是将北京时间转化成UTC时间(通用协调时)，北京时间提前UTC时间8小时 是，但是我执行的时候就出问题了[/quote] 你说说出什么问题了？[/quote] 你想要达到什么样的结果，可以说一下

user: user-0
content: 引用 9 楼 通信小卒的回复:[quote=引用 7 楼 LINZHONG21的回复:][quote=引用 6 楼 通信小卒的回复:]这个程序是将北京时间转化成UTC时间(通用协调时)，北京时间提前UTC时间8小时 是，但是我执行的时候就出问题了[/quote] 你说说出什么问题了？[/quote] 就是没有按照我想象的执行，不会说，要不你复制，试一下

user: user-0
content: 引用 8 楼 通信小卒的回复:如果回答了你的问题，希望采纳，不明白的可以继续沟通 怎么采纳呀，我不知道

user: user-8
content: 引用 7 楼 LINZHONG21的回复:[quote=引用 6 楼 通信小卒的回复:]这个程序是将北京时间转化成UTC时间(通用协调时)，北京时间提前UTC时间8小时 是，但是我执行的时候就出问题了[/quote] 你说说出什么问题了？

user: user-8
content: 如果回答了你的问题，希望采纳，不明白的可以继续沟通
user-0 提问: 这个for循环为什么没执行？

回复:
user: user-0
content: 引用 2 楼 轻箬笠 的回复:for语句最后的分号去掉 谢谢，太感谢了！！！

user: user-1
content: for语句最后的分号去掉

user: user-2
content: for循环执行了，只是循环体是空语句。而后面的printf语句与for没有关系。
user-0 提问: 编译提示错误:expected '=', ',', ';', 'asm' or '__attribute__' before '{' token，

回复:
user: user-0
content: 引用 1 楼 真相重于对错的回复:int max2(.....); //这里应该有个分号 已经找到了，谢谢老哥哈

user: user-0
content: 引用 1 楼 真相重于对错的回复:int max2(.....); //这里应该有个分号 老哥你说的是第几张图呀

user: user-1
content: int max2(.....); //这里应该有个分号
user-0 提问: 时间复杂度O(m+n)和O(max(m,n))是否可以认为等同？

回复:
user: user-1
content: O(N) 代表这个时间复杂度是线性增长的，也就是输入数据规模和耗费时间是线性关系 O(max(m,n)) 和O(m+n) 其实一样

user: user-2
content: 至少王道书上是这么说的。

user: user-3
content: 其实这两种都是O(n)级别的复杂度。

user: user-4
content: 要看m和n之间的关系，如果是线性的或者m是常数，可以认为等同，O(a*n+b)，如果a、b是常数，也是O(n)复杂度，所以O(n)算法不一定优于O(n^2)算法，要看n的规模

user: user-5
content: 一个m+n，一个是max(m, n)即m, n中较大值。  举个例子，m = 8, n = 6;那么一个复杂度是14, 第二个复杂度是8。很明显了吧

user: user-6
content: 一个是m+n，一个是m或者n，当然不等
user-0 提问: can't open include file:怎么改

回复:
user: user-1
content: 工程、设置、C/C++、分类：Preprocessor、附加包含路径：填写附加头文件所在目录 逗号间隔多项

user: user-2
content: 工程设置的问题 把头文件的路径没设对

user: user-3
content: 建议确认下头文件路径和头文件有没有拼写错误，如大小写等

user: user-4
content: 只能说你的include下面没这个文件。先找找呗

user: user-5
content: 直接看不到你编译器提示的错误，建议提供更详细的相关信息～

user: user-6
content: 这个应该是属于电脑使用习惯不当：直接打开压缩包中的源程序导致头文件不能正常操作，请解压后使用

user: user-7
content: 你的工程目录下有这个Calc.h头文件吗？
user-0 提问: 学习编程

回复:
user: user-1
content: C语言教程（附带C语言100例）http://download.csdn.net/detail/zhao4zhong1/8830817 Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-2
content: 写项目练习，看大佬代码学习，再写项目复习，还有刷题

user: user-3
content: 三个月要做到“熟练”，几乎不可能，你要不吃不喝吗？  要做熟练掌握，可能需要3年吧 需要你多练习，多努力～

user: user-4
content: 刷题啊，PTA，力扣，牛客网，自己愿意花时间，提升就很快

user: user-5
content: 急功近利很难掌握，但是有更快的办法就是可以阅读高手写的程序(或者参加培训)，无论怎样是练出来的，就是自己亲自动手，三个月你每天花费12个小时以上写代码，调试代码，会有很大的进步。

user: user-6
content: 发帖时记得艾特 “赵4老师”哈， 据我观察，他长期埋伏于此，一旦你有风吹草动，他能立马杀粗来救你。

user: user-6
content: 恭喜入坑，3个小建议： 少玩，看书，不懂多来发帖~

user: user-7
content: 不断地练习，自己编的代码总共超过一万行，能构思写出两三百行，就入门的小项目，。
user-0 提问: C语言

回复:
user: user-1
content: 以管理员身份运行IDE 关闭UAC、防火墙、杀毒软件、……

user: user-2
content: 引用 2 楼 m0_45081612 的回复:[quote=引用 1 楼 user-3的回复:]红色翻译一下就知道了。 OK了，打开管理员模式就好了[/quote] 应该是权限的问题～

user: user-0
content: 引用 1 楼 user-3的回复:红色翻译一下就知道了。 OK了，打开管理员模式就好了

user: user-3
content: 红色翻译一下就知道了。
user-0 提问: 这个答案为什么是？c=>>3又是什么意思？？

回复:
user: user-1
content: 妈也，看标题我还以为我的C语言是体育老师教的

user: user-2
content: c=>>3看不出是啥意思？但是再看你的图片，才知道是c = a>>3;这个是a右移3为赋值给c。 提问题的时候不要太雷人，细心一些～  a >>3，即8>>3，根据2进制8即1000，右移三位就是1了。

user: user-3
content: 8在二进制中用1000表示 >>表示位移操作 8 >> 3表示将二进制数据全部左移3位 1000左移3位为0001 所以结果为1

user: user-4
content: 二进制右移三位 比如 1000 右移3位后 变成 0001
user-0 提问: 求助！！！！！

回复:
user: user-1
content: #include <stdio.h> #include<stdlib.h>  #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MAXSIZE 100  typedef int Elemtype; typedef struct{     Elemtype *elem;     int len; }SqList;  //初始化 int InitList(SqList *L) {     int n=0;     int i;      L->elem = new Elemtype[MAXSIZE];     if(!L->elem)         exit(0);     L->len=0;      //printf("输入表长度:\n",n);     printf("输入表长度:\n");     scanf("%d", &L->len);     printf("输入表的元素:\n");     for(i=0; i<(L->len); i++) {         int t;         scanf("%d", &t);         L->elem[i] = t;     }     return OK; }  //输出 void PrintList(SqList *L) {     int i;     //for(i=0;i<=L->len;i++)     for(i = 0; i < L->len; i++)         printf("%d",L->elem[i]);     printf("\n"); }  //判断是否为空 int IsEmpty(SqList *L) {     if(L->len==0)     return 1;     else         return 0; }  //取值 int GetElem(SqList *L,int i,Elemtype &e) {     if(i < 1 || i > L->len)         return ERROR;      e = L->elem[i-1];      return OK; }  //查找 int LocateElem(SqList *L,Elemtype e) {     int i;     for(i=0; i<(L->len); i++)         if(L->elem[i] == e)             return (i+1);         //else             //return 0;     return 0; }  //插入 int ListInsert(SqList *L,int i,Elemtype e) {     int j;     if(i<1||i>(L->len+1))         return ERROR;      if(L->len==MAXSIZE)         return ERROR;     for(j=(L->len-1); j >= i-1;j--)         L->elem[j+1] = L->elem[j];     L->elem[i-1] = e;     L->len++;      return OK; }  //删除 int DeleteList(SqList *L,int i) {     int j;     if(i < 1||i>L->len)         return ERROR;      //for(j=i;j<(L->len-1);j++)     for(j=i;j<(L->len);j++)         L->elem[j-1]=L->elem[j];     L->len--;      return OK; }  int main() {     SqList *L;     int e;     int t;     L = new SqList;     if (!L)         exit(0);      printf("初始化顺序表L:\n");     InitList(L);     printf("输出顺序表L:\n");     PrintList(L);      printf("第三个元素为:");     GetElem(L,3,e);     printf("%d\n", e);     int m=LocateElem(L,5);     //printf("元素5的序号为:\n",m);     printf("元素5的序号为:%d\n",m);     printf("在位置二处插入数字9后输出顺序表:\n");     ListInsert(L,2,9);     PrintList(L);     printf("删除第3个元素:\n");     DeleteList(L,3);     PrintList(L);      return 0; }  供参考～  建议对比上面的代码找一下自己的问题。  建议代码不要写的那么紧凑，看着不舒服，一般一条语句就占一行～

user: user-2
content: L是空指针。exit(0)直接结束程序了。 建议在exit()前面加上输出语句。
user-0 提问: 学生信息管理

回复:
user: user-0
content: 引用 2 楼 自信男孩的回复:main函数里调用grod的实参应该是ch而不是*ch。 报错啊，大佬，一下子一堆错误

user: user-0
content: 引用 2 楼 自信男孩的回复:main函数里调用grod的实参应该是ch而不是*ch。 没有你我真的可能要想很久了

user: user-0
content: 引用 2 楼 自信男孩的回复:main函数里调用grod的实参应该是ch而不是*ch。 大佬，前几次谢谢你了

user: user-1
content: main函数里调用grod的实参应该是ch而不是*ch。

user: user-0
content: 编译器还没检查出什么问题，但是运行就出错了
user-0 提问: 指定初始化器的问题

回复:
user: user-1
content: 书上的是C99标准，可能你的编译器现在支持C11标准。C99的指定初始化器可读性本来就不太强，一般就用”=“依次赋值就行。

user: user-0
content: 可以的，但为什么书上的写法会显示错误？

user: user-2
content: int days[MONTHS]={31,28,days[4]=31,30,31,days[1]=29};

user: user-2
content: int a[23]={a[1]=2}; 是可以这样吧

user: user-0

user: user-2
content: 这是什么语法，即然是初始化，一次把12个月的都输进去不就行了
user-0 提问: C 语言 for嵌套循环怎么跳不出内层循环了？

回复:
user: user-1
content: 老坑了都是。

user: user-0
content: 引用 2 楼 zjq9931的回复:if((m=1))  应当是 if((m==1)) 感谢(❁´ω`❁)，被这个耽误了半天时间，感谢感谢

user: user-0
content: 引用 3 楼 阿大古 古古古的回复:条件语句 == 和 =  谢谢，感谢，竟然没注意到

user: user-0
content: 引用 1 楼 636f6c696e的回复:if判断比较相等是==而不是= =是赋值，==才是比较 谢谢，真是醉了，都没注意到这个问题

user: user-2
content: 条件语句 == 和 =

user: user-3
content: if((m=1))  应当是 if((m==1))

user: user-4
content: if判断比较相等是==而不是= =是赋值，==才是比较

user: user-5
content: 哈哈，下次可以把数值1放在 == 前面，这样万一少写了也会报错~
user-0 提问: 关于for循环中的指针控制

回复:
user: user-1
content: 字符串最后以'\0'结尾，系统会默认补充，题主在给声明赋值时结尾加； 循环条件怎么控制看题主具体需求，看题主意图应该是想索引整个字符串，那判断条件就是 *s != '\0'

user: user-2
content: 《C++Primer第五版中文版》中提到 操作符*叫做解引用符，如果指针指向了一个对象，则允许使用解引用符来访问该对象。对指针解引用会得出所指向的对象。 在你的代码中，s是指针，*s就是对s进行解引用，得到s所指向的内容，即字符串“ this is a number”中的字符，而s++是对指针进行移位操作，将指针移动到字符串的下一个字符中。所以，for语句的作用是遍历字符串“ this is a number”中的字符，直到*s的内容是空为之，退出for循环。

user: user-3
content: 字符串最后一个'\0',你的判断条件*s!='\0'就行

user: user-4
content: 引用 2 楼 user-5 的回复:[quote=引用 1 楼 自信男孩的回复:]s++是向后移动位置（地址），*s是去对应地址里的数值。 举个例子，第一次判断*s即't' == 0？，为真执行循环体，s++，此时s指向了'h'，判断*s，即'h' == 0？ 继续执行，以此类推～ 为假，才执行循环体吧[/quote] 哦，应该是*s != 0

user: user-5
content: 引用 1 楼 自信男孩的回复:s++是向后移动位置（地址），*s是去对应地址里的数值。 举个例子，第一次判断*s即't' == 0？，为真执行循环体，s++，此时s指向了'h'，判断*s，即'h' == 0？ 继续执行，以此类推～ 为假，才执行循环体吧

user: user-4
content: s++是向后移动位置（地址），*s是去对应地址里的数值。 举个例子，第一次判断*s即't' == 0？，为真执行循环体，s++，此时s指向了'h'，判断*s，即'h' == 0？ 继续执行，以此类推～
user-0 提问: C语言程序设计

回复:
user: user-1
content: 这么简单的就自己实现啦。 把文件读进一个buf[]里 然后对每个buf进行移位判断，例如: for(int j=0; j<8; ++j) { if(buf[i] & 0x01) //输出1 else //输出0 buf[i] >>= 1; }  另外一个程序，把8个1、0进行移位，得到一个byte
user-0 提问: C语言数组问题

回复:
user: user-1
content: 如果是int a[4]，那就是四个int值，如果是struct tt a[4]，那就是四个tt，每个a[]是一个tt，每个tt里有两个参数(x和y)，所以给a初始化赋值的时候就有八个值，两个一组对应a[0] a[1] a[2] a[3]。至于给a[]的y赋值时的a+n,代表的是一个地址值，a就是a[0]的地址，a+1是a[1]的地址。。当调用->y的时候，其实求是让前者指向后者，整个程序类似写了个循环链表

user: user-2
content: a是结构体数组，结构体有两个元素一个是x，一个是指针y，所以20是对应x，a+1是对应y； 即y = a+1;即a[0].y = a+1;即y指向a[1]

user: user-3
content: struct tt a;a[4]是一个结构数组，结构中每个有两个元素x,*y,大括号中初始化，按顺序就需要有8个初始化的内容分对应a[0]={20,a+1},a[1]={15,a+2}..... a值是结构数组的头地址，也就是指向a[0],a+1相当于(&a[0]+sizeof(tt)*1)指向a[1]的指针.

user: user-4
content: 这是结构体数组的初始化,每个结构体有2个数据,每2个数据对应一个结构体元素的初始化. a+1,a+2是指针+1,,a+1指向a[1]这个数据
user-0 提问: 小学生50以内数学计算基于c语言

回复:
user: user-0
content: 谢谢指导，我去尝试一下

user: user-1
content: do{ a=rand()%51; b=rand()%51; d=rand()%2; if(d==0) c=a+b;     else c=a-b;     }while(c<0||c>50); 这一段通过不停试错得到结果 虽然可行 但可以考虑优化 最大是50 那么 a确定的情况下  b直接缩小选择随机数的范围即可 a = rand() % 51; b = rand() % (51 - a);//默认按照加法处理 c = a+b; d=rand()%2; if(d == 1)//减法做特殊处理  { c = b; b += a;  }一次到位不用循环

user: user-0
content: 引用 3 楼 棉猴的回复:代码写的不错，值得学习！ k = 0;//将k复位 	      printf("错误，正确答案:%d\n", c); 如果不添加这一行，在经过第一次提示正确答案后，以后每次只答错一次就要提示正确答案，而不是三次。 因为是题目要求答题者回答三次才能显示正确答案，所以才弄了答三次才能显示正确答案

user: user-0
content: 是的你这种更简单，我那种复杂化了

user: user-2
content: 代码写的不错，值得学习！ k = 0;//将k复位 	      printf("错误，正确答案:%d\n", c); 如果不添加这一行，在经过第一次提示正确答案后，以后每次只答错一次就要提示正确答案，而不是三次。

user: user-3
content: //int num=0, add=0; int num, add; int score[3]={10,7,5}; //char str[20],str1[10][20]; //int a=0,b=0,c=0,d,k=0,i=0,j=1,result; int a, b, c, d, k, i, j, result; char sf[2]={'+','-'}; 这些全局变量可以这么定义和声明；  对于i, j, k这些下表，建议定义为局部变量。  这个地方有关问题，如果使用者连续3次以上回答错误，那么在跳出循环之前， 是否现将k赋值为0呢，否则k的值会继续增加，回答下一道题时，执行这条语句时：add+=score[k-1]; 会导致score数组溢出。 修改如下：  else                 {                     printf("错误，正确答案:%d\n",c);                     k = 0;                     break;                 }
user-0 提问: 学生信息管理系统基于c语言，输入添加输出查询删除信息。

回复:
user: user-0
content: 好的，谢谢指导，希望以后多多交流

user: user-1
content: 建议增加对学号相同的判断，对于学生信息，姓名可能相同，学号不应该相同； 另外，程序中未对姓名相同做判断，若输入两个姓名一样的信息，删除时只会删除一个～  一些细节可以在考虑一下。  另外，gets建议用更安全的方式，比如fgets。gets不能保证输入的内容较多，导致缓存溢出～
user-0 提问: 求解！！！关于C语言的一些知识

回复:
user: user-0
content: 引用 3 楼 zarelaky 的回复:[quote=引用 2 楼 zarelaky 的回复:] 桩代码，一般来说是在已有实现程序逻辑里面插入一个函数调用，提供一个默认实现，在有需要的时候添加一些功能实现，具体功能需要看GUI_OBJECT_NO_POST_ACTION代表的什么意思 一般不需要理解GUI_OBJECT_NO_POST_ACTION这个符号名称的值具体是什么，只要关注它代表的功能。 在生成执行程序时GUI_OBJECT_NO_POST_ACTION会由编译器进行宏展开，展开后的值就是(1<<9)，开启编译器优化后，会转换为常数0x100[/quote]  好的 多谢大佬！

user: user-0
content: 引用 1 楼 自信男孩 的回复:是return (1<<9);因为宏定义就是等价替换；函数的真正作用可能是注释掉的部分。     哦哦 谢谢大佬了！

user: user-1
content: 引用 2 楼 zarelaky 的回复:桩代码，一般来说是在已有实现程序逻辑里面插入一个函数调用，提供一个默认实现，在有需要的时候添加一些功能实现，具体功能需要看GUI_OBJECT_NO_POST_ACTION代表的什么意思 一般不需要理解GUI_OBJECT_NO_POST_ACTION这个符号名称的值具体是什么，只要关注它代表的功能。 在生成执行程序时GUI_OBJECT_NO_POST_ACTION会由编译器进行宏展开，展开后的值就是(1<<9)，开启编译器优化后，会转换为常数0x100

user: user-1
content: 桩代码，一般来说是在已有实现程序逻辑里面插入一个函数调用，提供一个默认实现，在有需要的时候添加一些功能实现，具体功能需要看GUI_OBJECT_NO_POST_ACTION代表的什么意思

user: user-2
content: 是return (1<<9);因为宏定义就是等价替换；函数的真正作用可能是注释掉的部分。