Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 为什么堆一定是完全二叉树？

回复:
user: user-1
content: 方便找双亲以及向下调整

user: user-0
content: 引用 1 楼 user-2 的回复:堆就是那么任性的。贴一下堆的定义给你补补。。。  堆的定义如下：n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时，称之为堆。 (ki <= k2i,ki <= k2i+1)或者(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4...n/2) 也就是说堆本应是数组形式是吧？

user: user-2
content: 堆就是那么任性的。贴一下堆的定义给你补补。。。  堆的定义如下：n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时，称之为堆。 (ki <= k2i,ki <= k2i+1)或者(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4...n/2)
user-0 提问: 千万级数据，如何以最快的速度查找

回复:
user: user-1
content: 引用 6 楼 Bandry 的回复:感谢大家的回复，目前采用了uthash存储，但是总感觉还有更高效的方法能实现，匹配是完全匹配，不用部分匹配 可以分块。 比如按第一个字节的值，分块，可以把千万条级别的数据每块下降1-3个数量级。 根据第一个字节选择块，然后再在块里面查找。这样就会快很多。

user: user-0
content: 感谢大家的回复，目前采用了uthash存储，但是总感觉还有更高效的方法能实现，匹配是完全匹配，不用部分匹配

user: user-2
content: 建立哈希表呀

user: user-3
content: 分组建立索引呗，全都导入内存吗？看看内存够不够吧

user: user-1
content: 我上面说的太粗了。 其实还需要知道 字符串的匹配方式是什么样的？ 比如字符串需要的是完全匹配还是部分匹配？ 如果不需要部分匹配，就不用建立索引

user: user-1
content: 这个要建索引。参考搜索引擎的索引方式。

user: user-4
content: 关键看你用何种数据结构存储 建议使用hashtable，或者BTREE
user-0 提问: HDOJ 1001

回复:
user: user-1
content: scanf在出错的情况下才会返回-1，这个可能性很小。在文件末尾时会返回EOF，在类型和输入的数据不匹配时会返回0（因为输入个数是1）。

user: user-2
content: 引用 4 楼 qq_44793599 的回复:我只是个菜鸟哈哈，你看了题意就不会有这些疑问了，不能光看代码哦  能加深对scanf返回值的了解的话，也不错啊。我也是初学者，互相学习哈！

user: user-0
content: 引用 3 楼 儿童节的回复:说个另外的问题。 不是很了解下面这个scanf与while的搭配  while (scanf("%d", &n) != -1) {}  是从哪里流行起来的？ 是否因为有人用过下面这句？ 而 EOF 是 -1 的宏，所以干脆直接用 -1 ？  while (scanf("%d", &n) != EOF) {}  这个表达式其实有一个小问题。如果scanf 的返回值为0 的话， 这个 while 是会进入死循环的。具体见下方说明。  因为scanf 的返回值是它成功获得对象的个数，当在接收到第一个对象之前遇到了类型匹配错误的话，返回值是0，而如果在接收到第一个对象之前遇到了输入错误的话则返回值是EOF。所以，总结起来，scanf 的返回值有3种大的情况：（1）成功接收到的对象的个数，不一定正好就等于格式符的个数，这取决于实际输入，（2）0，（3）EOF。  下面两张截图是从《C Reference》里截取的，读取文档的软件名称是Zeal，开源软件，github上有。    所以，上面这段循环代码，因为scanf 里的格式符是 %d ，如果有一个整型数据被它接收到的话，那么 返回值就肯定是 1 了， 但是如果这时候输入一个字母的话，那么返回值就是 0 了，因为没有接收到 匹配 %d 的数据。而 本来 期待 接收到一个整数的变量 n 因为没有被初始化，或者 现在很多编译器会默认 将它初始化为 0 了， 那么 n 的值 就是 不确定的 或者是 0 ， for 循环的执行次数也就可能是不确定的 。这还不是关键。 关键是， scanf 没有得到类型相匹配的数据，输入缓冲区的那个 字母 就还在输入缓冲区里 等着被读取， 到了下一次的 while 循环的时候， scanf 又 读到了 第一次输入的那个 字母， 返回值又是 0 ， 又 进入循环。 所以，这样就会出现一个 死循环 ！  当然了，你也许会问，那么不输入字母不就好了吗？  是的，不输入字母就不会出现死循环，只是说万一不小心按错了，或者不小心数字后面接了一个字母或者别的字符。  或者说，就算这种概率相当相当小吧，那么换个角度看，如果把循环条件改成下面这样，如何？  while (scanf("%d", &n) == 1) {}  意思是，只有scanf 接收到一个类型匹配的数据的时候才进入循环体内，而要结束while循环的时候，随便输入一个字母再回车即可。 甚至可以在最后一次循环的时候直接输入「一个数字+字母或别的符号」的组合，然后数字的计算结果也照常出来了，循环也顺势结束了。这样，会不会稍微轻松或者灵活一点点呢？  另外，也不妨碍直接手动输入EOF来结束循环，Linux下实测按下Ctrl+D后，循环结束。  好吧，大半夜的睡不着，对这个while循环条件闲扯了一堆，就这样吧。 欢迎给分！  （PS. 我个人推荐下面的这种写法。睡觉克了～）  你也太可爱了吧我的妈

user: user-0
content: 我只是个菜鸟哈哈，你看了题意就不会有这些疑问了，不能光看代码哦

user: user-2
content: 说个另外的问题。 不是很了解下面这个scanf与while的搭配  while (scanf("%d", &n) != -1) {}  是从哪里流行起来的？ 是否因为有人用过下面这句？ 而 EOF 是 -1 的宏，所以干脆直接用 -1 ？  while (scanf("%d", &n) != EOF) {}  这个表达式其实有一个小问题。如果scanf 的返回值为0 的话， 这个 while 是会进入死循环的。具体见下方说明。  因为scanf 的返回值是它成功获得对象的个数，当在接收到第一个对象之前遇到了类型匹配错误的话，返回值是0，而如果在接收到第一个对象之前遇到了输入错误的话则返回值是EOF。所以，总结起来，scanf 的返回值有3种大的情况：（1）成功接收到的对象的个数，不一定正好就等于格式符的个数，这取决于实际输入，（2）0，（3）EOF。  下面两张截图是从《C Reference》里截取的，读取文档的软件名称是Zeal，开源软件，github上有。    所以，上面这段循环代码，因为scanf 里的格式符是 %d ，如果有一个整型数据被它接收到的话，那么 返回值就肯定是 1 了， 但是如果这时候输入一个字母的话，那么返回值就是 0 了，因为没有接收到 匹配 %d 的数据。而 本来 期待 接收到一个整数的变量 n 因为没有被初始化，或者 现在很多编译器会默认 将它初始化为 0 了， 那么 n 的值 就是 不确定的 或者是 0 ， for 循环的执行次数也就可能是不确定的 。这还不是关键。 关键是， scanf 没有得到类型相匹配的数据，输入缓冲区的那个 字母 就还在输入缓冲区里 等着被读取， 到了下一次的 while 循环的时候， scanf 又 读到了 第一次输入的那个 字母， 返回值又是 0 ， 又 进入循环。 所以，这样就会出现一个 死循环 ！  当然了，你也许会问，那么不输入字母不就好了吗？  是的，不输入字母就不会出现死循环，只是说万一不小心按错了，或者不小心数字后面接了一个字母或者别的字符。  或者说，就算这种概率相当相当小吧，那么换个角度看，如果把循环条件改成下面这样，如何？  while (scanf("%d", &n) == 1) {}  意思是，只有scanf 接收到一个类型匹配的数据的时候才进入循环体内，而要结束while循环的时候，随便输入一个字母再回车即可。 甚至可以在最后一次循环的时候直接输入「一个数字+字母或别的符号」的组合，然后数字的计算结果也照常出来了，循环也顺势结束了。这样，会不会稍微轻松或者灵活一点点呢？  另外，也不妨碍直接手动输入EOF来结束循环，Linux下实测按下Ctrl+D后，循环结束。  好吧，大半夜的睡不着，对这个while循环条件闲扯了一堆，就这样吧。 欢迎给分！  （PS. 我个人推荐下面的这种写法。睡觉克了～）

user: user-0
content: 对这个题没关系啦，只是我习惯i=0

user: user-3
content: i循环多了一次
user-0 提问: 查找算法

回复:
user: user-0
content: 感谢各位嗷，这个是我们的教材，算法与数据结构，上面是c语言写的定位算法。

user: user-1
content: 没错，最后一位不等于，i++了

user: user-2
content: 楼主的教科书不是很靠谱。BUG是存在的，last=1时，就不比较直接返回1了。  数组下标是从0开始，last是最后一个元素的下标  则应改为：int i=0；while（i<=L->last&&L->data[i]!=x)  以上代码来自《数据结构》（第二版） 陈越 主编 p57 。

user: user-3
content: 哇，好老的函数定义格式了，差点儿就看不懂了！  感觉代码有问题，就是循环条件那里。   既然循环条件是 (i < L->last &&  L->data[i] != x) ， 那么如果没有目标元素的话，假如 i 和 L->last 都是int型的话，那么最终 i 的值应该是 L->last 。而底下的 if 里，没有「等于」这个判断，那等于说会 返回 i 值， 实际上就是返回的 L->last 的值喽。但是，没有 目标元素的情况是应该返回 0 的呀！ 要么，难道 L->last 不是int 型 而是 浮点型 ？比如， L->last 是 2.5 ， 最后一次执行循环时 i 是 2 ， 下一次 i 变成 3 了 所以结束循环。然后去下面 做 if 比较。。。奇怪哦！  你在书上不是也写了 i 等于 last 这样的笔记吗？ 应该也是有这个疑问吧？   嗯，感觉这本书不是太靠谱！

user: user-4
content: 这是什么书啊、这缩进就不想看了  while里面条件是<last，下面的if是>last,不太对吧。 感觉while里改成<=last就对了：找到时、i属于[1,last], 找不到时i=last+1  你可以写代码测以下。书和老师都不一定对、当然自己也不一定对。

user: user-5
content: 没上下文看不出来 一般i=0开始的话，这段代码没啥问题
user-0 提问: 求大神帮帮孩子吧！

回复:
user: user-1
content: MFC吧，代码网上应该有

user: user-2
content: 接水果?用unity或者opengl + cocos ,C语言写不了

user: user-3
content: 百度吧，这里只提供问题解答，不帮人做课程设计的

user: user-4
content: 你确定是用c语言写，不是MFC
user-0 提问: 大佬们这个什么意思

回复:
user: user-1
content: 引用 1 楼 潇潇-易水 的回复:全是错误  #include <stdio.h> int main() {     int a=6;     for(int i=0;i<3;i++)     {        printf(" %d",a);    // 你为什么要这么干？ 打印3次 6？     }     printf("\n");     return 0; }    就是 666 应该是聊天表情包吧

user: user-2
content: 可以发一下问题的题目吗

user: user-3
content: 全是错误  #include <stdio.h> int main() {     int a=6;     for(int i=0;i<3;i++)     {        printf(" %d",a);    // 你为什么要这么干？ 打印3次 6？     }     printf("\n");     return 0; }

user: user-4
content: 抄代码都抄不好，那么多错误

user: user-5
content: 是找错误吗？应该编译不过吧，如果忽略细节应该是输出666

user: user-3
content: 引用 3 楼 lin5161678 的回复:[quote=引用 1 楼 潇潇-易水 的回复:] 全是错误  #include <stdio.h> int main() {     int a=6;     for(int i=0;i<3;i++)     {        printf(" %d",a);    // 你为什么要这么干？ 打印3次 6？     }     printf("\n");     return 0; }    就是 666 应该是聊天表情包吧 [/quote] 秀儿 ， 是你吗？
user-0 提问: 二叉树的建立bug导致程序中断

回复:
user: user-1
content: 你这个程序bug太多了 Preorder_create(&(*node)->left, arr);  Preorder_create(&(*node)->right, arr); arr一直指向一开始传进来的地址，所以前头的判断就一直不会为真，因此不会退出。 其次，你的意思先建左树，再建右数，但是第一个Preorder就会把arr所有的数全部建立为节点，后面Preorder_create就是无效语句。

user: user-2
content: 递归出口应该是*(arr)=0吧，而不是#。  static  _index  会一直增长，然后*(arr+ _index) 越界了。。。
user-0 提问: 关于while()

回复:
user: user-1
content: 先说while循环语句 while循环的条件语句中包含了后置版本的递增运算符，在《C++Primer第5版中文版》中提到，后置版本的递增运算符会将运算对象加1，但是求值结果是运算对象改变之前的那个值的副本。对于 while(i++<2) 首先将i加1，i变为1，接下来是用i改变前的那个值的副本，即0与2进行比较，while条件语句成立，此时输出的值是i的当前值1；之后，在while条件语句中，将i加1，i变为2，接下来是用i改变前的那个值的副本，即1与2进行比较，while条件语句成立，此时输出的值是i的当前值2；最后，while循环语句不成立，循环退出。 再说for循环 在《C++Primer第5版中文版》中提到  其执行的顺序为1首先执行一次init-statement 2接下来判断condition 3如果condition为真，则执行循环体 4最后执行expression 对于 for（;i<2;i++） init-statement是空语句，之后判断condition是否为真，此时i的值是0，条件为真，所以输出0，最后执行expression，i的值加1，此时i的值是1；之后再判断condition是否为真，此时i的值是1，条件为真，所以输出1，最后执行expression，i的值加2，此时i的值是2；最后condition条件为假，退出for循环，所以for输出的是0和1。 这两种情况的主要区别在于后置版本的递增运算符的用法上。

user: user-2
content: while：i++表示先用后加，while（0<2）执行完毕，自加一，即i+1=1输出，同理下次执行while（1<2），再自加一，i+1=2。 for：先i=0，判断i是否<2，成立，执行输出语句输出i=0，再执行i++，i然后就等于1，再此循环，i<2，输出i=1，i++，此时i=2<2，不成立，结束。

user: user-3
content: while先执行i＜2然后++接着循环体 for先执行i＜2然后循环体最后才i++或者++i

user: user-4
content: while里面是比了大小后再加1，所以是1 2。for里面最后一个分号后面的语句是在每次循环结束后再运行的，所以是0 1

user: user-5
content: 程序是这样运行的  while    先判断i小于2   在++     输出的就是1      而for   循环是  先判断i小于2      输出0，在++        简单的说   while  在判断完以后就++了   而for循环   是判断   执行完一次后  再++   判断            前者是判断伴随++   后者是   判断后  循环走一次后  再++
user-0 提问: 访问冲突问题

回复:
user: user-1
content: 引用 4 楼 qq_44836834 的回复:[quote=引用 3 楼 儿童节的回复:]不知道你说的给  head->next  赋一个地址 是赋 的什么 地址， 又是如何冲突的。 代码发上来看看如何？ 已经解决了，谢谢[/quote]  恭喜，解决了就好！  顺便能麻烦结个贴给分吗？ 谢谢！

user: user-0
content: 引用 3 楼 儿童节的回复:不知道你说的给  head->next  赋一个地址 是赋 的什么 地址， 又是如何冲突的。 代码发上来看看如何？ 已经解决了，谢谢

user: user-1
content: 不知道你说的给  head->next  赋一个地址 是赋 的什么 地址， 又是如何冲突的。 代码发上来看看如何？

user: user-0
content: 按照你的建议进行更改后，问题解决，但是给head->next赋一个地址同样会冲突，是不是next不够长，该怎么改

user: user-1
content: pointer1 和 pointer2 都是指针类型， sizeof得到的返回值是 8 个字节， 远远小于 结构体变量所占的 字节数。  malloc的参数 用 sizeof(struct node1) 和 sizeof(struct node2) 吧。
user-0 提问: C程序求输入两个数的最大公约数和最小公倍数

回复:
user: user-1
content: 交换后 有 m>n r=m%n m=n n=r 最后r==0时 最大公约数为m

user: user-2
content: while中r都未初始化，另外辗除法是用num1除以num2，num1＞num2求出余数resd，如果resd==0，则num2是最大公约数，否则(resd!=0)，num1=num2，num2=resd，重复以上过程直到resd==0为止。
user-0 提问: 小白求助，这代码一直超时，要疯了

回复:
user: user-0
content: 引用 6 楼 niiiloc 的回复:还有代码里最大的问题就是输入和处理没有分开 for(i=1;i<=m;i++) {     for(j=1;j<=n;j++)     {         scanf("%c",&num[i][j]);     }     getchar(); }  // 数据处理... 谢谢，问题已经解决，我是个小白，以为这样处理能提高效率，谢谢你的建议

user: user-1
content: 还有代码里最大的问题就是输入和处理没有分开 for(i=1;i<=m;i++) {     for(j=1;j<=n;j++)     {         scanf("%c",&num[i][j]);     }     getchar(); }  // 数据处理...

user: user-1
content: 就不应该在main函数里用while(1)死循环 题目里虽然写了多组数据，但是没有明确循环退出条件，所以建议把while(1)死循环去掉

user: user-0
content: 顶一下，求一位大佬

user: user-0
content: 引用 2 楼 真相重于对错 的回复:把原题贴一下  要求输出所使用砖块的高度和数量，使用如下格式分行显示： k Ck 其中k∈{ 1,2,….,M}代表砖块的高度，Ck代表需要的高度为K的砖块的数量，不用输出Ck=0的行，按照K的升序显示各行。

user: user-2
content: 把原题贴一下

user: user-0
content: #include <stdio.h>  int process(int m,int n) {     char num[200][200];     int i,j,count[200],ans[200];     for(i=1;i<=m;i++)     {         for(j=1;j<=n;j++)             {                 scanf("%c",&num[i][j]);                 if(num[i][j]=='0')                 {                     count[j]++;                     if(i==m)                     {                         ans[count[j]]++;                         count[j]=0;                     }                 }                 if(num[i][j]=='1')                 {   if(num[i-1][j]=='0')                     {                      ans[count[j]]++;                      count[j]=0;                     }                 }             }              getchar();     }      for(i=1;i<=200;i++)          if(ans[i]>0)             {                 printf("%d %d\n",i,ans[i]);                 ans[i]=0;             } }  int main() {      int m,n;     while (1)     {  scanf("%d%d",&m,&n);        process(m,n);     }     return 0; } 这是我的代码，能有效的输入输出，就是提交好几次都是超时，把process直接写进main里也是一样。（为了能实现多组输入我在main里面用了一个大while）
user-0 提问: 求大神讲解

回复:
user: user-0
content: 引用 4 楼 魏宇轩的回复:警告并不是错误，编译能过 而且，一直提示有错误

user: user-0
content: 那为什么把程序导入protues之后还是不能仿真呢

user: user-1
content: 警告并不是错误，编译能过

user: user-0
content: 引用 1 楼 phenix2009的回复:没提示错误啊 提示三处警告啊，感觉不太对

user: user-0
content: 提示3wrning这个是什么原因

user: user-2
content: 没提示错误啊
user-0 提问: cfree不支持 函数形参前面写*&的形式，请问能不能通过一些设置上的更改来让他支持

回复:
user: user-1
content: 我没有用过cfree ，是不是你没有按c++方式编译？

user: user-0
content: cfree 不是号称可以编译c++的吗

user: user-1
content: *& 是C++的方式，请改用C++编译器。
user-0 提问: 大神，这题怎么解？

回复:
user: user-1
content: 引用 楼主 你怪带劲的回复:用函数实现，从键盘任意输入一组数。把各位上的奇数和偶数分别提取出来，然后构成两个新数。高位依然是高位，低位依然是低位。 解法思路:  设置新基数odd_n=0,位数标志on_f=1；偶数even_n=0,位数标志en_f=1。 读取任意数x。  循环(当x>0){ 取x的个位数b=x%10,x=x/10; 判断b奇偶    如是基数则（odd_n=odd_n+on_f＊b；on_f=on_f*10  //进一位）    反之是偶数，如法炮制。 }  输出基数odd_n，偶数even_n。  相信楼主会写了。
user-0 提问: 求大神讲解一下这个程序是什么意思呀，为什么结果是23呀，初学者，有点懵

回复:
user: user-0
content: 懂了懂了，谢谢

user: user-1
content: 楼上正解。楼主~

user: user-2
content: 因为case 2:printf("%d", k++);没有加break，因此会继续执行case 3:printf("%d", k++);  case 2:printf("%d", k++);  输出2，k=3 case 3:printf("%d", k++);  输出3，k=4  因此最终输出结果是23
user-0 提问: 看一下这段代不错那儿

回复:
user: user-1
content: 错在闲的蛋疼

user: user-2
content: 引用 4 楼 user-3 的回复:听说结果31  引用 2 楼 qq_40878688 的回复:代码没有错，运行结果31 我用的在线编辑器结果是31，可能有问题吧

user: user-3
content: 听说结果31  引用 2 楼 qq_40878688 的回复:代码没有错，运行结果31

user: user-3
content: 引用 2 楼 qq_40878688 的回复:代码没有错，运行结果31 输出语句用了逗号运算符： 引用逗号运算符是指在C语言中，多个表达式可以用逗号分开，其中用逗号分开的表达式的值分别结算，但整个表达式的值是最后一个表达式的值。参数分隔符号 不是逗号运算符

user: user-2
content: 代码没有错，运行结果31 输出语句用了逗号运算符： 引用逗号运算符是指在C语言中，多个表达式可以用逗号分开，其中用逗号分开的表达式的值分别结算，但整个表达式的值是最后一个表达式的值。

user: user-3
content: 未定义行为 GG 没意义
user-0 提问: 一个刚学C语言和单片机小白的提问 

回复:
user: user-1
content: 引用 3 楼 pxf1249905281 的回复:[quote=引用 1 楼 lishungong 的回复:] while（S==1）    {    for（t=1；t<4;t++）        {         if(Z==1)          {            z   break;//如果Z也成立 则执行z一次          }         else         ｛ continue;//如果Z变为不成立则在一段时间内持续判断Z是否成立          ｝       }    s ｝这样的话 功能z退出for循环 外部的while循环还是会让z继续一直运行 而不是一次[/quote]   把s的条件置成false 就可以了

user: user-0
content: 引用 1 楼 lishungong 的回复:while（S==1）    {    for（t=1；t<4;t++）        {         if(Z==1)          {            z            break;//如果Z也成立 则执行z一次          }         else         ｛        continue;//如果Z变为不成立则在一段时间内持续判断Z是否成立          ｝       }    s ｝这样的话 功能z退出for循环 外部的while循环还是会让z继续一直运行 而不是一次

user: user-2
content: 后面的没有明白 引用S成立时执行s                                  此时如果Z也成立 则执行z一次  这里用中断感觉比较好

user: user-1
content: while（S==1）    {    for（t=1；t<4;t++）        {         if(Z==1)          {            z   break;//如果Z也成立 则执行z一次          }         else         ｛ continue;//如果Z变为不成立则在一段时间内持续判断Z是否成立          ｝       }    s ｝
user-0 提问: 求助，关于if语句的一个问题

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

user: user-2
content: 编译器的问题吗

user: user-3
content: 改成 a*0.2+b*0.3-1 < 0.000001试试 浮点数比较一般考虑个误差范围，小于这个误差范围则认为相等
user-0 提问: 可视化程序制作

回复:
user: user-1
content: 引用 6 楼 qq_44824814的回复:[quote=引用 3 楼 ooolinux 的回复：][quote=引用 2 楼 qq_44824814 的回复:] c语言代码也可以用这个软件吗？  C++，兼容C语言。 第一本书有一章简单介绍了C++。[/quote]这个从网上可以下载不 [/quote] 可以下载的。字数字数

user: user-2
content: 引用 7 楼 qq_44824814 的回复:引用 5 楼 棉猴 的回复：MFC吧，在界面编辑器中拖几个控件进去，所见即所得，挺简单的mfc是软件吗？ MFC叫做微软基本类库，Visual Studio中都支持的。在创建项目时选择创建MFC项目，之后，选择基于对话框的项目即可。

user: user-0
content: 引用 5 楼 棉猴 的回复：MFC吧，在界面编辑器中拖几个控件进去，所见即所得，挺简单的mfc是软件吗？

user: user-0
content: 引用 3 楼 ooolinux 的回复：[quote=引用 2 楼 qq_44824814 的回复:] c语言代码也可以用这个软件吗？  C++，兼容C语言。 第一本书有一章简单介绍了C++。[/quote]这个从网上可以下载不

user: user-2
content: MFC吧，在界面编辑器中拖几个控件进去，所见即所得，挺简单的

user: user-3
content: 二维还是三维的？？

user: user-1
content: 引用 2 楼 qq_44824814 的回复:c语言代码也可以用这个软件吗？  C++，兼容C语言。 第一本书有一章简单介绍了C++。

user: user-0
content: 引用 1 楼 ooolinux 的回复：图形用户界面（GUI）编程可以学习C++ Builder，架构先进（和C#一样拖控件），入门比较容易。  　　C++ Builder是真正的可视化的开发工具。C++ Builder可以用鼠标拖拉控件加上设置属性轻松的“设计”出一个程序的图形用户界面，利用可视的组件/控件像“搭积木”一样，以“所见即所得”的方式搭建应用程序的界面，这也是C++ Builder这个名字中Builder的概念。这样，只需要用C++语言编写业务逻辑代码，类似于DOS下文本界面编程，只要专注于实现业务逻辑功能就可以了，代码非常简洁。数据的输入和表现，都在图形用户界面，非常直观、易用。这就是RAD开发（Rapid Application Development，快速应用程序开发）。  书籍推荐： 《C++Builder 6程序设计教程（第二版）》 （陆卫忠，刘文亮　等编著 /2011-04-01 /科学出版社）（当当网） 《C++Builder 6编程实例精解》（赵明现），PDF，是数字版的，非扫描版的，里面还有一个俄罗斯方块游戏的完整实现。 《精彩C++Builder 6程序设计》（台湾 吴逸贤），里面有10几个简单小游戏的实现，可以自己看懂以后再重写，才是自己掌握的。 《C++ Builder 5高级编程实例精解》（刘滨 编著）都是较大的实用的程序。  C++ Builder书籍下载： https://pan.baidu.com/s/13n9hxwVj9ai1p5L2rQC83Qc语言代码也可以用这个软件吗？

user: user-1
content: 图形用户界面（GUI）编程可以学习C++ Builder，架构先进（和C#一样拖控件），入门比较容易。  　　C++ Builder是真正的可视化的开发工具。C++ Builder可以用鼠标拖拉控件加上设置属性轻松的“设计”出一个程序的图形用户界面，利用可视的组件/控件像“搭积木”一样，以“所见即所得”的方式搭建应用程序的界面，这也是C++ Builder这个名字中Builder的概念。这样，只需要用C++语言编写业务逻辑代码，类似于DOS下文本界面编程，只要专注于实现业务逻辑功能就可以了，代码非常简洁。数据的输入和表现，都在图形用户界面，非常直观、易用。这就是RAD开发（Rapid Application Development，快速应用程序开发）。  书籍推荐： 《C++Builder 6程序设计教程（第二版）》 （陆卫忠，刘文亮　等编著 /2011-04-01 /科学出版社）（当当网） 《C++Builder 6编程实例精解》（赵明现），PDF，是数字版的，非扫描版的，里面还有一个俄罗斯方块游戏的完整实现。 《精彩C++Builder 6程序设计》（台湾 吴逸贤），里面有10几个简单小游戏的实现，可以自己看懂以后再重写，才是自己掌握的。 《C++ Builder 5高级编程实例精解》（刘滨 编著）都是较大的实用的程序。  C++ Builder书籍下载： https://pan.baidu.com/s/13n9hxwVj9ai1p5L2rQC83Q
user-0 提问: C语言中strcmp函数可以比较一个由键盘输入的字符串和从文件里读出来的字符串吗？

回复:
user: user-1
content: 這沒什麽區別啊，關鍵只在於結束符，都確保有NULL結尾就可以比較了。

user: user-2
content: 没有区别的。都可以。

user: user-3
content: 只要是字符串就可以，前提是字符串内部不包含'\0'字符，否则会被截断
user-0 提问: c语言关于多线程的问题

回复:
user: user-1
content: 线程函数不是你这么定义的 线程函数也不能转换成void*进行传递 pthread_creat要求的就是函数类型的参数  自己man pthread_creat研究一下吧

user: user-2
content: 如果是双向链表，为什么没有pre->previous->next = p？ 不同的问题建议另外开帖问

user: user-0
content: 想问下这个segmenttation fault是咋回事

user: user-2
content: 编译不过把编译错误贴出来
user-0 提问: 数据结构。求大神指点

回复:
user: user-1
content: 引用 5 楼 weixin_44810057的回复:第五个你能给我写一下吗 结果：若cur_e是list的数据元素，且不是第一个，则用pre_e返回 //          他的前驱，否则操作失败，pre Status PriorElem(List list,ElemType cur_e,ElemType *pre_e){ 	int itr; 	if(!list.data){ 		printf("Error!! Please inital first!!\n"); 		exit(0); 	} 	if((itr=ExistElem(list,cur_e)) && itr != 1){ 		*pre_e=list.data[itr-2]; 		return OK; 	}else{ 		return ERROR; 	} } 我复制的见别人写的

user: user-2
content: 引用 5 楼 weixin_44810057 的回复:第五个你能给我写一下吗  好吧。 Listempty _Sq(&L)  应该是清空链表吧……前面看错了。  步骤： 用2根指针，一根指向链表头，一根指向要free的节点。 将链表头置为NULL。 遍历链表，依次free。  伪C代码： NODE *p,*q; p=q=L.head; L.head=NULL; while(p){ 	p=p->next; 	free(q); 	q=p; }   Priorelem_ Sq(L, cur-e, &pre_e) 猜想是将cur_e的前一个赋值给pre_e吧~~  步骤：遍历链表，找到当前节点的后继节点等于cur_e的节点(p->next->data=cur_e)，赋值给pre_e。  NODE *p； p=L.head; while(p->next) 	if(p->next->data==cur_e) 	{  *pre_e=p->data; 	   return true; 	} //如果没有找到或者链表第一个元素=cur_e,没有前序则返回false return false;

user: user-0
content: 第五个你能给我写一下吗

user: user-2
content: 你这题目主要是指时间复杂度吧。。。书上有的。

user: user-0
content: 谢谢啊，我们老师也没有说清楚

user: user-2
content: 你没说明链表是否带头节点，就当他是带头结点的链表把。  Listlength _Sq(L)   这个求链表长度的是吧 步骤：从链表头数到链表尾 伪C代码： NODE* p; count=0; for（p=L.head；p；p=p->next）       count++; return count; 性能：O(n)  Getelem _Sq(L, i, &e)  是获取第i个元素吗？  步骤：从头开始一个个数，数到第i个，然后赋值给e  伪C代码： NODE* p； for(p=L.head;p&&i>1;p=p->next)     --i; if(p) *e=p->data;  性能：O(n)   Locate Elem _Sq(L,e) 定位e在链表中的位置？  步骤：从头开始一个个找，直到找到和e相等的元素，返回位置。  伪C代码： NODE* p; int count=0; for(p=L.head;p;p=p->next){ 	++count; 	if(p->data==e) break; } if(p&&count) return count;  性能：O(n)   Listempty _Sq(&L)  判断链表是否为空？  步骤：看看头指针是否为NULL 伪C代码：if（L->head==NULL）return true;else return false;   性能：O(1)
user-0 提问: void Swap ( int &a, int &b)与void Swap ( int &a, int &b)

回复:
user: user-0
content: 引用 5 楼 轻箬笠的回复:[quote=引用 4 楼 sdghchj 的回复:] C语言没有引用 这句才是关键的，void Swap ( int &a, int &b)是c++的写法。[/quote] 找了好久 谢谢你啦😄

user: user-1
content: https://www.cnblogs.com/x_wukong/p/5712345.html 最大的不同在于： 指针本质是值传递，被调函数对形式参数的任何操作都是作为局部变量进行，不会影响主调函数的实参变量的值。 而引用传递，被调函数对形参做的任何操作都影响了主调函数中的实参变量。

user: user-2
content: 引用 4 楼 sdghchj 的回复:C语言没有引用 这句才是关键的，void Swap ( int &a, int &b)是c++的写法。

user: user-3
content: C语言没有引用

user: user-4
content: void Swap ( int &a, int &b)与void Swap ( int *a, int *b)  前者c++的引用。后者c指针。两种不同的概念。不要把引用当成c来看。c没有引用。

user: user-5
content: 地址可以通过指针变量修改，地址不能直接被修改。等一个传过去没法修改，第二个传过去可以修改指向和地址指向变量的值

user: user-6
content: 第一个是传引用，第二个是传指针，教科书上都有详细说明的呀。你可以百度搜索：  指针和引用的区别

user: user-0
content: void Swap ( int &a, int &b)与void Swap ( int *a, int *b)
user-0 提问: 】近似数是从某一位四舍五入后，与准确数最相近的数。例如：精确到十位数，则328的近似数为330；精确到百位数，则1123的近似数为1100。
现输入一个四位的正

回复:
user: user-1
content: #include <stdio.h> int main() { int n; scanf("%d",&n); if(n<1000|n>9999) printf("data error!");//如果输入不是四位数，给出输入错误提示 else printf("%d",(n+50)/100*100);//输入是四位数，输出其近似数 return 0; }
user-0 提问: 关于stand(time(NULL))的问题

回复:
user: user-1
content: 引用 4 楼 哎哟，我的小黑猫还不会说的回复:#include <time.h>   还要包括这个头文件。 好像是  #include<windows.h>  这个头文件。

user: user-1
content: #include <time.h>   还要包括这个头文件。

user: user-1
content: srand((unsighted int)time(NULL));   随机变量为一个无符号整型，这样就可以了

user: user-0
content: 谢谢，直接加一个time的头文件就可以了。刚上机试过

user: user-2
content: 引用 7 楼 lin5161678的回复:[quote=引用 1 楼 qq_38834405 的回复:] time是保留字，不能用来当变量名，去掉就好了time不是保留字 可以用来做变量名  这里的问题是 time是一个int 而不是函数  不能 time() 就像 int n; 不能 n() 一样 语法上不支持 函数调用运算符的操作数 必须是 函数类型或者函数指针类型 [/quote] sry 这段时间学数据库晕了 我又误导人了

user: user-3
content: 把time变量改个名字吧，后面还要用time函数呢

user: user-4
content: 引用 1 楼 qq_38834405 的回复:time是保留字，不能用来当变量名，去掉就好了time不是保留字 可以用来做变量名  这里的问题是 time是一个int 而不是函数  不能 time() 就像 int n; 不能 n() 一样 语法上不支持 函数调用运算符的操作数 必须是 函数类型或者函数指针类型

user: user-5
content: 你在上一行把time声明成int类型了啊~ 你换个名字吧~~

user: user-2
content: time是保留字，不能用来当变量名，去掉就好了
user-0 提问: 求大佬设计一下程序，我的时间复杂度太大了

回复:
user: user-1
content: 这种题目真讨厌啊~~语文不好，要看半天才能看懂他在说什么。 分析题目，结果如下： 有一个长度为n的数组，起始位置是数组头部pos=0；每轮可以跳x步(1<=x<=Vi)同时需满足（Di>=n[pos+x]）；经过若干轮后，判断最后是否能到达数组尾部pos=n-1。 给定m个（Vi，Di），判断每个是否能到达。  这个用贪婪算法，每次能跳多远就跳多远，如果一步都不能跳那么就一定跳不出了。 这个问题时间复杂度O(n)~   #include<stdio.h> #include<stdlib.h> int main() { 	int n,m,pos,step; 	int * pool,*Vi,*Di; 	scanf("%d%d",&n,&m); 	//读入长度为n的鳄鱼数据 	pool=(int *)malloc(sizeof(int)*n); 	for(int i=0; i<n; i++) 		scanf("%d",pool+i); 	//读入m个 装备的属性 	Vi=(int*)malloc(sizeof(int)*m); 	Di=(int*)malloc(sizeof(int)*m); 	for(int i=0; i<m; i++) 		scanf("%d%d",Di+i,Vi+i); 	//求每个装备是能渡过 	for(int i=0; i<m; i++) { 		pos=0;//起始位置 		while(pos<n-1) { 			step=0; 			//求一次最多能跳几步 			for(int j=1; j<=Vi[i]&&pos+j<n; j++) 				if(Di[i]>=pool[pos+j]) 					step=j; 			//如果一步都跳不了，那就不再跳了 			if(step==0) break; 			else pos+=step; 		} 		//输出结果 		if(pos==n-1) printf("Yes\n"); 		else printf("No\n"); 	} 	free(pool); 	free(Vi); 	free(Di); }
user-0 提问: 大佬们问个问题
为什么a+‘a’-‘A’是97

回复:
user: user-1
content: 代码错的 题目错的 出题人水平太低 怎么错的 看前面各位的介绍

user: user-2
content: 《C++程序的150个建议》中 “建议3：对表达式计算顺序不要想当然”中提到“C语言也不能识别操作符的哪一个操作被先计算”  所以，这个a=a+1这个表达式可能先执行，也可能后执行！

user: user-3
content: 典型的序列点日经问题，答案是未定义。

user: user-4
content: 具体是97，还是98，依赖于参数入栈方向。

user: user-0
content: 引用 8 楼 user-5的回复:不要纠结这种题，如果单考逗号表达式，是从左往右的，但是夹杂着参数入栈，就不要理他了 嗯……………………😊

user: user-5
content: 不要纠结这种题，如果单考逗号表达式，是从左往右的，但是夹杂着参数入栈，就不要理他了

user: user-0
content: 懂了，这道题就是错的，不要说太复杂(≧Д≦)ノ只是个初学者……

user: user-0
content: 引用 1 楼 真相重于对错的回复:a等于多少？ 66……………………

user: user-4
content: a等于多少？
user-0 提问: 小白求救，谢谢大佬

回复:
user: user-1
content: 1：sum需要重置，应该放在for循环中； 2：a=a/10;  b=a%10; 这样的结果就是少了一位了~~，这两句只要更换一下顺序就可以了。

user: user-1
content: 大致没问题，如下修改。

user: user-2
content: 引用 9 楼 qq_44790116的回复:[quote=引用 8 楼 qq_38834405的回复:][quote=引用 7 楼 qq_44790116 的回复:] [quote=引用 5 楼 qq_38834405的回复:]水仙花数是指一个 3 位数，你n=4到7要干嘛。。而且int类型也放不下这么大的数字（因为你后面要次方），你把你的while里面a和b 的赋值顺序交换一下就行了 书上的题目这么要求的[/quote]你把题目拍一下，你的算法没问题，就是a,b赋值顺序错了。水仙花数真真是指一个 3 位数。。[/quote] 我加你QQ吧，这好像不能拍照[/quote] Q 469704848

user: user-0
content: 引用 8 楼 qq_38834405的回复:[quote=引用 7 楼 qq_44790116 的回复:] [quote=引用 5 楼 qq_38834405的回复:]水仙花数是指一个 3 位数，你n=4到7要干嘛。。而且int类型也放不下这么大的数字（因为你后面要次方），你把你的while里面a和b 的赋值顺序交换一下就行了 书上的题目这么要求的[/quote]你把题目拍一下，你的算法没问题，就是a,b赋值顺序错了。水仙花数真真是指一个 3 位数。。[/quote] 我加你QQ吧，这好像不能拍照

user: user-2
content: 引用 7 楼 qq_44790116 的回复:[quote=引用 5 楼 qq_38834405的回复:]水仙花数是指一个 3 位数，你n=4到7要干嘛。。而且int类型也放不下这么大的数字（因为你后面要次方），你把你的while里面a和b 的赋值顺序交换一下就行了 书上的题目这么要求的[/quote]你把题目拍一下，你的算法没问题，就是a,b赋值顺序错了。水仙花数真真是指一个 3 位数。。

user: user-0
content: 引用 5 楼 qq_38834405的回复:水仙花数是指一个 3 位数，你n=4到7要干嘛。。而且int类型也放不下这么大的数字（因为你后面要次方），你把你的while里面a和b 的赋值顺序交换一下就行了 书上的题目这么要求的

user: user-3
content: #include <iostream> #include <math.h> #include <cstdio>  int main() { 	int n, i, N, sum; 	sum = 0; 	printf("请输入位数[3,7]: "); 	scanf_s("%d",&n); 	if (n<3 || n > 7) 	{ 		printf("输入数据不符合要求，请重新输入"); 		scanf_s("%d", &n); 	} 	switch (n) 	{ 	case 3: N = 100; 		break; 	case 4: N = 1000; 		break; 	case 5: N = 10000; 		break; 	case 6: N = 100000; 		break; 	case 7: N = 1000000; 		break; 	default: 		break; 	}  	// 分配空间，存储各个位置上的数字 	int *Ptr = NULL; 	Ptr = (int *)malloc(n * sizeof(int));  	for (i = N; i < N * 10; ++i) 	{ 		// 初始化各个位置上的数字为0 		for (size_t j = 0; j < n; j++) 		{ 			Ptr[j] = 0; 		}  		// 计算各个位置上的数字 		for (int j = n-1; j >= 0; j--) 		{ 			int sum_temp = 0; 			for (int k = n-1; k > j; k--) 			{ 				sum_temp += pow(10, k)*Ptr[k]; 			} 			Ptr[j] = (i - sum_temp) / pow(10,j); 		}  		// 计算和 		sum = 0; 		for (size_t j = 0; j < n; j++) 		{ 			sum += Ptr[j] * Ptr[j] * Ptr[j]; 		}  		// 比较，是否为水仙花数 		if (sum==i) 		{ 			printf("当前水仙花数是： %8d\n ", i); 		} 	}  	free(Ptr);  	std::cin.get();  	return 0;

user: user-2
content: 水仙花数是指一个 3 位数，你n=4到7要干嘛。。而且int类型也放不下这么大的数字（因为你后面要次方），你把你的while里面a和b 的赋值顺序交换一下就行了

user: user-0
content: 引用 1 楼 qq_38834405的回复:sum需要重置，sum=0放for里面。 而且输出的数还有不是水仙花数的

user: user-0
content: 引用 1 楼 qq_38834405的回复:sum需要重置，sum=0放for里面。 改过来了，可是还是输不出全部符合情况的水仙花数，只输出了一个

user: user-0
content: 改过来了，可是还是输不出全部符合情况的水仙花数，只输出了一个

user: user-2
content: sum需要重置，sum=0放for里面。
user-0 提问: c语言中&与&&的区别

回复:
user: user-1
content: 有引用。可以避免传指针。

user: user-2
content: C语言中有引用吗？

user: user-3
content: 承接上文，&还有引用 的作用

user: user-4
content: 区别多的是 而你差不多一个都没说出来
user-0 提问: 萌新求解！

回复:
user: user-1
content: 引用 2 楼 qq_44823489 的回复:[quote=引用 1 楼 顾宇宝宝的回复:]         首先a=15，a%3为0，然后执行case 0语句，m+1变成1，           break跳出switch语句，打印结果就是1了 m++后m就等于1了吗，那什么时候m仍然为0呢[/quote] 看书

user: user-0
content: 引用 1 楼 顾宇宝宝的回复:首先a=15，a%3为0，然后执行case 0语句，m+1变成1，           break跳出switch语句，打印结果就是1了 m++后m就等于1了吗，那什么时候m仍然为0呢

user: user-2
content: a%3的结果为0，直接匹配case 0： 执行m++，m自增变成1，然后跳出匹配，打印结果1

user: user-3
content: 首先a=15，a%3为0，然后执行case 0语句，m+1变成1，           break跳出switch语句，打印结果就是1了
user-0 提问: 飞思卡尔

回复:
user: user-0
content: 、无线节能组 、无线节能组 （1）车模 ）车模 自行制作车模，不允许使用传统车轮支撑车模运行。可以使用履带、整体滚 动、爬行机构、气垫等类型的运动方式。 如果车模是脱离地面运行，则需要从车模上下垂一个终端带有磁铁的物体， 接触赛道表面， 它的作用： （1） 用于指示车模运行是否还在赛道边界内； （2） 用于触发感应线圈计时系统。 对于无线节能系统， 除了可以利用从无线线圈接收到的电能之外， 也允许使 用车体上存储的机械动能、势能（压缩气体、弹簧、橡皮筋） 、光能电池进行辅 助驱动，车上预储机械势能总量不能超过2000焦耳。不允许使用化学能源。 （2）传感器 ）传感器 允许电磁感应线圈进行赛道引导线的检测， 也允许使用摄像头传感器进行赛 道检测。 （3）比赛赛道 ）比赛赛道 比赛是在PVC赛道上进行，赛道采用电磁线进行引导，赛道也同时具有黑色 边界线。赛道中可能存在的元素包括表2中所有的元素。 比赛赛道发车区中安放有无线发射线圈，通过交变电流，产生交变磁场。车 模通过接收线圈获得电能， 对车模上的储能法拉电容进行充电。 关于无线充电线 圈具体技术规格以及制作方式， 无线接收线圈的规格以及制作方式将会另行发布 文档进行说明。

user: user-1
content: 能说的再明白一点吗
user-0 提问: C语言问题int a[][N]      那个[]是什么意思呀

回复:
user: user-1
content: 你这是定义了一个二维数组，二维数组的列是一定要确定的，而行可以先不确定

user: user-2
content: 二维数组的行数

user: user-0
content: 嗯嗯，我知道了，谢谢大家啦

user: user-3
content: 不不，刚才看错了，是二维数组的行数，第一个代表行第二个代表列，行数可忽略不写，列数一定要写

user: user-3
content: 是一维数组的长度，可忽略不写

user: user-4
content: int a[？行][N列] 二维矩阵的行和列，当你知道有多少个数据，知道一行有多少列时，就可以算出来有多少行，就可以省略行的输入（如果不知道有多少个数据是不能省略的，c语言不允许定义不知道大小的数组）

user: user-5
content: c语言数组是行序为主，Arr[m][n]就是一个m行n列的二维数组，当二维数组作为函数参数时，可以不用给出一维大小，所以就可以写成a[][n]了
user-0 提问: 新手求指教！！一直出错要哭了

回复:
user: user-1
content: linkedlist本身就是指针类型 你的l想定义成什么类型？，指针的指针，还是结构体指针 如果是 linkedlist *l = null；指针的指针 那么应该是 l = （linkedlist*）malloc（sizeof（linkedlist）） 如果是lineklist l = null；结构体指针 那么应该是 l = （linekedlist）mallloc（sizeof（lnode））

user: user-2
content: 1. malloc的返回值是指针 2. LinkedList已经是指向LNode的指针了  LinkedList  L = NULL; L = (LinkedList)malloc(sizeof(LNode));
user-0 提问: void fun函数中的*s=a［0］和*s=a［i］为什么不能改成s=&a［0］和s=&a［i］的形式

回复:
user: user-1

user: user-0
content: 引用 2 楼 qq_38834405的回复:我觉得没差别，能贴一下源码吗，这个真的看不清楚 才开始用 不太会 实在抱歉

user: user-0
content: #include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> #define N 10 typedef struct ss{ char num[10];   int s;} STU; void fun(STU a[], STU *s) {	int i;  s=a;   for(i=0;i<N;i++) 	  if(s->s>a[i].s)		   *s=a[i];} void main() {   FILE *wf;   STU a[N]={ { "A01",81},{ "A02",89},{ "A03",66},{ "A04",87},{ "A05",77},  { "A06",90},{ "A07",79},{ "A08",61},{ "A09",80},{ "A10",71}},m;   int i;   system("CLS");   printf("*****The original data*****\n");  for(i=0;i<N;i++)      printf("No=%s Mark=%d\n", a[i].num,a[i].s);  fun(a,&m);   printf("*****THE RESULT*****\n");   printf("The lowest :%s, %d\n",m.num,m.s);/******************************/  wf=fopen("out.dat","w");   fprintf(wf,"%s, %d",m.num,m.s);   fclose(wf);/*****************************/}

user: user-0
content: 抱歉抱歉 图太模糊了

user: user-2
content: 一个是修改指针所指向地址的值；一个是改变指针的位置，这两个形式看着很像，但是确实天差地别、不可同日而语的。建议好好理解指针的概念，指针存储的只是地址，并不是值。

user: user-3
content: *s=a[0] 和 s=&a[0]应该不一样 你的图看不清，我只能根据标题回答 *s=a[0] 猜测 s 应该是个指针类型 ，这句话的意思是把a[0]的值拷贝给s所指向的地址中，语句执行后如果修改s指向地址的内容不影响a[0] s=&a[0] 是把s指向了a[0],因此之后如果修改s,将会影响到a[0]  int a[]={1,2,3,4,5}; 	int *s; 	s=new int; 	*s=a[0]; 	*s=10; //a[0]不变 	int *s1; 	s1=&a[0]; 	*s1=100;//a[0]也会改为100

user: user-1
content: 我觉得没差别，能贴一下源码吗，这个真的看不清楚

user: user-4
content: 我觉得是因为用指针会直接把数据储存到内存中，而用&不会，他只是在输入的时候会把输入的数储存到内存里
user-0 提问: C语言命令行如何进行多次传参

回复:
user: user-1
content: #include<stdio.h> int main(int argc, char *argv[]) {     char str[1024];     char* p = argv[1];     if (argc == 1)     {         printf("please enter parameter!  ATTENTION:The first parameter is number,the second parament is whatever you want!\n");         scanf("%s", str);         p = str;     }      printf("%s",p);     return 0;        }

user: user-1
content: 引用 3 楼 niiiloc 的回复:你的程序也没啥错啊，卡在那里是因为在等待用户输入参数 你随便输入个参数就过去了有的 argc是1  argv[1]是NULL scanf("%s", NULL); 会凉凉

user: user-1
content: 另外定义一个数组  新输入的参数就存到数组里面就完事

user: user-2
content: MSDN中提到 The __argc global variable is a count of the number of command-line arguments passed to the program. __argv is a pointer to an array of single-byte-character or multi-byte-character strings that contain the program arguments. argc是命令行的参数数量，而argv是一个指向数组的指针，这个数组中的元素是命令行中的参数。也就是说，argv指向的数组中的元素的数量要与argc相同。 if (argc == 1)     {         printf("please enter parameter!  ATTENTION:The first parameter is number,the second parament is whatever you want!\n");         scanf("%s",argv[1]);     } 在以上代码中，argc的值是1，则argv的数组元素个数是1个，不会存在argv[1]，所以程序会报错。因此，不能用scanf()输入参数。此时之只能是如2楼所说，退出程序。在cmd中输入参数，重新进入。

user: user-3
content: scanf(“%s”, &argv[1]);

user: user-4
content: 你的程序也没啥错啊，卡在那里是因为在等待用户输入参数 你随便输入个参数就过去了

user: user-5
content: #include<stdio.h> int main(int argc, char *argv[]) {     if (argc == 1)     {         printf("please enter parameter!  ATTENTION:The first parameter is number,the second parament is whatever you want!\n");         return 1;     }     printf("%s",argv[1]);     return 0;       } H:\a大一下>xxx.exe please enter parameter!  ATTENTION:The first parameter is number,the second parament is whatever you want!  H:\a大一下>xxx.exe 1 abc 1

user: user-0
content: 别沉了啊。。。。

user: user-0
content: 谢谢各位大佬的解答，感谢感谢！
user-0 提问: 求第三题codeblocks怎么做

回复:
user: user-0
content: 引用 2 楼 user-2的回复: switch（opr）{ case  ‘+’：printf("%d+%d=%d",a,b,a+b);break; case  ‘-’：printf("%d-%d=%d",a,b,a-b);break; case    ’*‘：printf("%d*%d=%d",a,b,a*b);break; case   ’/‘：printf("%d/%d=%d",a,b,a/b);break; default: printf("error");break； }  基本的操作就这样，具体要你自己去实现，例如除以0错误这种 多谢指点

user: user-1
content: 用开关语句做

user: user-2
content: switch（opr）{ case  ‘+’：printf("%d+%d=%d",a,b,a+b);break; case  ‘-’：printf("%d-%d=%d",a,b,a-b);break; case    ’*‘：printf("%d*%d=%d",a,b,a*b);break; case   ’/‘：printf("%d/%d=%d",a,b,a/b);break; default: printf("error");break； }  基本的操作就这样，具体要你自己去实现，例如除以0错误这种
user-0 提问: C新手，有大神帮我看看作业哪错了吗

回复:
user: user-1
content: 我最喜欢的VC++6.0，没有之一！ 计算输入数字的位数的代码没有错误，主要是求逆序数，即case 2语句中有一些小小的错误 	case 2: 		printf("输入一个不多于三位的数字以继续:\n"); 		scanf("%d", &i); 		b = i / 100; 		c = (i - (b * 100))/10;//-------修改求c的代码----------- 		d = i - (b * 100) - (c * 10); 		if (b != 0) 		{//------添加括号------ 			e = b; 			b = d; 			d = e; 			printf("%d%d%d\n", b, c, d); 		}//------添加括号------ 		else if (c != 0)//-------改为else if------- 		{//------添加括号------ 			e = d; 			d = c; 			c = e; 			printf("%d%d\n", c, d); 		}//------添加括号------ 		else if (d != 0)//-------改为else if------- 		{//------添加括号------ 			printf("%d\n", d); 		}//------添加括号------ 		break; VC++6.0 User，加油！

user: user-2
content: 错了好多，都不知道怎么说。

user: user-3
content: 自己加个断点调一下就清楚了，代码上看的话，输入56，会输出655，因为这时候c，d（十位，个位）都不等于0，应该用else if； if(b!=0) {...} else if (c!=0) {...} else {...} 或者用switch 或者这样： if(b!=0) {只输入百位} if (c!=0) {只输入十位} if(d!=0) {只输入个位}
user-0 提问: 怎么把文件里的内容保存到数组里然后读取

回复:
user: user-1
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-0
content: 文件里不是只有数字。还有英语单词和一些符号什么的。

user: user-0
content: 那个输出代码之前写了的，可是输出开出来乱码，代码还是这个

user: user-2
content: 好像没写输出数据的代码

user: user-3
content: 你只读取 没输出  当然空白了

user: user-0
content: 换了几个函数都编译不出

user: user-4
content: 调试下呗
user-0 提问:  LED = ~data  这个到底是什么意思呢？

回复:
user: user-0
content: 谢谢，帮大忙了！

user: user-1
content: 一个寄存器里面有8位数据，每一位一般都有特别的含义，按照你这个程序而言，寄存器LED的每一位对应一个实际的LED口，而且对这一位写0就可以点亮（共阳极），所以一开始赋值～（0x01），意思是对0x01取反，原本是1的位就会变0，所以第一位LED先点亮，其余熄灭，然后把这个1不断左移，依次点亮其余LED，当这个1左移最高位继续左移的时候就会消失，于是就会变成0，此时已经依次点亮一遍，重新赋值0x01再开始下一轮
user-0 提问: a+b

回复:
user: user-1
content: 所以 你的问题呢?

user: user-2
content: #include <stdio.h>  #include <stdlib.h>  //主要你没给例子 //是要3 1 2 3这样的输入 输出6吗  int main()  {      int sum,n,a[100],i;//a改成数组      while(scanf("%d",&n)&&n!=0){//这里条件符号                    sum=0;          for(i=0;i<n;i++){              scanf("%d",&a[i]);              sum+=a[i];          }          printf("%d\n",sum);      }      return 0;  }

user: user-3
content: 这是我根据题目要求写的一个程序  #include <stdio.h> #include <stdlib.h>  int main() {     int sum,n,a,i;     while(scanf("%d",&n),n!=0){         sum=0;         for(i=0;i<n;i++){             scanf("%d",&a);             sum+=a;         }         printf("%d\n",sum);     }     return 0; }
user-0 提问: 求大佬帮助

回复:
user: user-1
content: 循环有三种，分别是：while（）{}、do{}while();和for（；；）{} while（条件）{需要循环的操作} do{需要循环的操作}while（判断条件）；（这种方法会在未判断之前先做一次） for（i=0；i<次数；i++）{需要循环的操作}（按给定次数循环） 看你需要哪一种咯
user-0 提问: 跪求大佬指点

回复:
user: user-1
content: 自定义消息协议可以实现

user: user-2
content: 必须使用特定地点wifi. 要么带wifi特征。要么wifi里某台服务器提供验证服务，连了wifi,就是局域网。连对应ip服务器的端口签到。可以http或者socket干活。其他的网你自然连不到公司的wifi签到咯。 当然可以绕过。比如内网搞代理等等

user: user-3
content: 具体怎么搞不清楚，不过，从钉钉的情形看，应该是记录了wifi的唯一特征码，然后用户连上wifi的时候跟服务器那边就校验就可以了。 至于怎么记录wifi的唯一特征码，应该是管理员用户连上wifi的时候，app计算出来的，然后由管理员手动设置的。

user: user-0
content: 引用 2 楼 轻箬笠 的回复：卧槽，这不就是钉钉的定点打卡。哪个公司这么变态啊，还需要自己搞一个但是不让用流量

user: user-0
content: 引用 2 楼 轻箬笠 的回复：卧槽，这不就是钉钉的定点打卡。哪个公司这么变态啊，还需要自己搞一个重庆中国人寿，哈哈不信吧

user: user-4
content: 特定地点wifi 可以将连入这个Wifi的某台PC，作为服务器。在软件上，签到的话，与这个PC服务器进行通讯。就可以保证，不可以用流量了。  实现的话，确实局域网 Socket就可以了。

user: user-3
content: 卧槽，这不就是钉钉的定点打卡。哪个公司这么变态啊，还需要自己搞一个

user: user-5
content: 局域网socket通信应该可以吧
user-0 提问: 变量名称获取

回复:
user: user-1
content: 编译后的汇编语言是没有变量名称的

user: user-2
content: C不支持RTTI，C++支持RTTI也很有限，只能取类型名，至少标准C++是这样的，但是可以用宏模拟一下：  #include <stdio.h>  #define __NAME__(x) #x  int func(int a) {   printf("%s = %d\n", __NAME__(a), a);   return a; }  int main() {   int num = 10;   printf("%s = %d\n", __NAME__(num), num);   printf("%s = %d\n", __NAME__(func)__NAME__((num)), func(num));    return 0; }

user: user-3
content: 为什么不去试试读取对应PDB文件获取变量名呢？

user: user-0
content: 那就只能把名称传进去了 void func(char *pParaName, int paraVAlue) {      printf("%s =  %d\n",pParaName, paraValue); }

user: user-4
content: 不可以,编译后这些变量名称都不存在了
user-0 提问: 求大佬

回复:
user: user-1
content: sin, cos两个函数传的是角度，不是弧度，把30和60也转换成弧度

user: user-2
content: 引用 12 楼 weixin_44815382 的回复:救救孩子   不知道哪错了！！！！？樂 跟踪调试基本技能，自己跟踪一下哪一步错了。 或者把公式拆开，看，公式的哪一步结果错了。

user: user-0
content: 救救孩子   不知道哪错了！！！！？🤔

user: user-0
content: 改了以后还是错的    。。。

user: user-2
content: 引用 9 楼 weixin_44815382 的回复:没懂  可以具体说一下改哪  怎么改吗 他的意思是，你的角度单位不统一，sin你似乎用的是角度。cos你用的是弧度。 你要统一，或者cos用acos

user: user-0
content: 引用 7 楼 user-4的回复:[quote=引用 6 楼 weixin_44815382 的回复:] [quote=引用 4 楼 zjq9931的回复:][quote=引用 3 楼 weixin_44815382 的回复:] 求大佬指点                 谢   #include <stdio.h> #include <stdlib.h> #include <math.h>  #define pi 3.14159 int main() { 	double x,y; 	scanf("%f",&x); 	x=x*pi/180; 	y=sqrt((sin((double)60)+1)*(sin((double)30)+1)/cos(x)); 	printf("%.2f",y); 	return 0; } [/quote] 答案错误                   。[/quote]  都是弧度、改一下就好了[/quote] 没懂  可以具体说一下改哪  怎么改吗

user: user-3
content: 原来 三角函数的参数都是 弧度啊

user: user-4
content: 引用 6 楼 weixin_44815382 的回复:[quote=引用 4 楼 zjq9931的回复:][quote=引用 3 楼 weixin_44815382 的回复:] 求大佬指点                 谢   #include <stdio.h> #include <stdlib.h> #include <math.h>  #define pi 3.14159 int main() { 	double x,y; 	scanf("%f",&x); 	x=x*pi/180; 	y=sqrt((sin((double)60)+1)*(sin((double)30)+1)/cos(x)); 	printf("%.2f",y); 	return 0; } [/quote] 答案错误                   。[/quote]  都是弧度、改一下就好了

user: user-0
content: 引用 4 楼 zjq9931的回复:[quote=引用 3 楼 weixin_44815382 的回复:] 求大佬指点                 谢  #include <stdio.h> #include <stdlib.h> #include <math.h>  #define pi 3.14159 int main() { 	double x,y; 	scanf("%f",&x); 	x=x*pi/180; 	y=sqrt((sin((double)60)+1)*(sin((double)30)+1)/cos(x)); 	printf("%.2f",y); 	return 0; } [/quote] 答案错误                   。

user: user-3
content: x=x*pi/180; 这一步去掉 ?

user: user-2
content: 引用 3 楼 weixin_44815382 的回复:求大佬指点                 谢  #include <stdio.h> #include <stdlib.h> #include <math.h>  #define pi 3.14159 int main() { 	double x,y; 	scanf("%f",&x); 	x=x*pi/180; 	y=sqrt((sin((double)60)+1)*(sin((double)30)+1)/cos(x)); 	printf("%.2f",y); 	return 0; }

user: user-0
content: 求大佬指点                 谢

user: user-0
content: 引用 1 楼 zjq9931的回复:包含math.h头文件即可有这些数学函数。 #include <stdio.h> #include <stdlib.h> #include <math.h> #define pi 3.14159 int main() {double x,y; scanf("%d",x); x=x*pi/180; y=sqrt((sin(60)+1)*(sin(30)+1)/cos(x)); printf("%.2f",y);     return 0; }哪错了？？

user: user-2
content: 包含math.h头文件即可有这些数学函数。
user-0 提问: while(1)后的语句

回复:
user: user-1
content: 我就搞不懂了，提问最基本的一点连问题都描述不明白么？  引用 5 楼 wopabe 的回复:[quote=引用 4 楼 niiiloc 的回复:] 晕死，while (1)就是死循环啊，一直循环在跑到啊 [quote=引用 3 楼 wopabe 的回复:] [quote=引用 1 楼 niiiloc 的回复:] 当然可以，没有规定说循环终不能释放资源啊 if (ptr != NULL) {     free(ptr);     ptr = NULL; } while(1)后面的代码什么时候走到？[/quote][/quote] 哈哈，不要晕，是while(1){}的后面，没有说明白[/quote]

user: user-2
content: 引用 5 楼 wopabe 的回复:哈哈，不要晕，是while(1){}的后面，没有说明白 需要你主动退出，比如调用break，或者使用goto

user: user-0
content: 引用 4 楼 niiiloc 的回复:晕死，while (1)就是死循环啊，一直循环在跑到啊 [quote=引用 3 楼 wopabe 的回复:] [quote=引用 1 楼 niiiloc 的回复:] 当然可以，没有规定说循环终不能释放资源啊 if (ptr != NULL) {     free(ptr);     ptr = NULL; } while(1)后面的代码什么时候走到？[/quote][/quote] 哈哈，不要晕，是while(1){}的后面，没有说明白

user: user-1
content: 晕死，while (1)就是死循环啊，一直循环在跑到啊 引用 3 楼 wopabe 的回复:[quote=引用 1 楼 niiiloc 的回复:] 当然可以，没有规定说循环终不能释放资源啊 if (ptr != NULL) {     free(ptr);     ptr = NULL; } while(1)后面的代码什么时候走到？[/quote]

user: user-0
content: 引用 1 楼 niiiloc 的回复:当然可以，没有规定说循环终不能释放资源啊 if (ptr != NULL) {     free(ptr);     ptr = NULL; } while(1)后面的代码什么时候走到？

user: user-3
content: 资源可以释放

user: user-1
content: 当然可以，没有规定说循环终不能释放资源啊 if (ptr != NULL) {     free(ptr);     ptr = NULL; }

user: user-0
content: 引用 7 楼 niiiloc 的回复:我就搞不懂了，提问最基本的一点连问题都描述不明白么？  [quote=引用 5 楼 wopabe 的回复:] [quote=引用 4 楼 niiiloc 的回复:] 晕死，while (1)就是死循环啊，一直循环在跑到啊 [quote=引用 3 楼 wopabe 的回复:] [quote=引用 1 楼 niiiloc 的回复:] 当然可以，没有规定说循环终不能释放资源啊 if (ptr != NULL) {     free(ptr);     ptr = NULL; } while(1)后面的代码什么时候走到？[/quote][/quote] 哈哈，不要晕，是while(1){}的后面，没有说明白[/quote][/quote] 受教受教了 大牛不要激动嘛，激动的就不好做大牛了哦
user-0 提问: 关于运算优先级

回复:
user: user-1
content: 引用 4 楼 weixin_44813559的回复:[quote=引用 1 楼 少爷！的回复:]括号优先级最高，而––运算符出现在变量后面的意思是让变量先进行其他运算，再自减 可以举个用到自减比减法运算级别高这个知识点的例子吗？[/quote] ––a–b 先自减在减b

user: user-2
content: 弄清楚 表达式的值和操作数的值 b-- 求值结果是b  这是表达式b--的结果 不用考虑b有没有减1 什么时候减1 看不懂你就拆分 int tmp = b--; a - tmp

user: user-3
content: 关于C,C++表达式求值顺序 http://blog.csdn.net/fefe82/article/details/37833767，http://bbs.csdn.net/topics/370153775

user: user-0
content: 引用 1 楼 少爷！的回复:括号优先级最高，而––运算符出现在变量后面的意思是让变量先进行其他运算，再自减 可以举个用到自减比减法运算级别高这个知识点的例子吗？

user: user-4
content: ++在前，先自增，再计算表达式 ++再后，则先计算表达式，最后再自增

user: user-5
content: 和运算优先级没有关系，关键点在于是b--还是--b b--这条语句中b还是原始值，语句结束后b=b-1 --b这条语句中b=b-1

user: user-1
content: 括号优先级最高，而––运算符出现在变量后面的意思是让变量先进行其他运算，再自减
user-0 提问: 新人求问

回复:
user: user-1
content: temp=s就是保存s的首地址 whlie遇到*s==0才退出，s++就是指针一直增加 所以s-temp-1就是计算和首地址距离，所以就是字符串s的长度

user: user-1
content: 计算字符串长度
user-0 提问: c语言数组越界读取错误花式搞事

回复:
user: user-0
content: 引用 8 楼 coo135的回复:楼主，仔细看了你的代码，主要的毛病是你没用弄明白变量的作用域。 例如在char *  generateKey(char  * key) 函数中，你返回的是：	return *k;	 k = keyGroup;而char keyGroup[16][17];定义在函数中，一但函数返回，k所指向的内容存在不确定性。有一下几种可能：1、被系统收回，出现非法操作；2、分配给其它对象覆盖，出现乱码；3、正常。所以，返回一个局部变量的指针是错误的！！！ 你在char * makeGroup(char plaintext[100]) 函数中也是如此。 了解，改过来了

user: user-0
content: 了解。之前不太懂，改过来了

user: user-1
content: 楼主，仔细看了你的代码，主要的毛病是你没用弄明白变量的作用域。 例如在char *  generateKey(char  * key) 函数中，你返回的是：	return *k;	 k = keyGroup;而char keyGroup[16][17];定义在函数中，一但函数返回，k所指向的内容存在不确定性。有一下几种可能：1、被系统收回，出现非法操作；2、分配给其它对象覆盖，出现乱码；3、正常。所以，返回一个局部变量的指针是错误的！！！ 你在char * makeGroup(char plaintext[100]) 函数中也是如此。

user: user-0
content: 引用 6 楼 qybao 的回复:%s打印char数组，就是打印从数组首地址开始到‘\0’结束这一段内存空间的内容（例如你把字符串中间的字符改成‘\0’再打印试试，肯定只输出前半部，‘\0’以后的内容丢失，但是内存里的内容并不会丢失），所以你要这么打印的话就自己控制好‘\0’。如果你做过c通信方面的开发，就不会觉得奇怪了，因为底层的通信都是把struct转成char[]字节来传输的。我大概了解了，谢谢

user: user-2
content: %s打印char数组，就是打印从数组首地址开始到‘\0’结束这一段内存空间的内容（例如你把字符串中间的字符改成‘\0’再打印试试，肯定只输出前半部，‘\0’以后的内容丢失，但是内存里的内容并不会丢失），所以你要这么打印的话就自己控制好‘\0’。如果你做过c通信方面的开发，就不会觉得奇怪了，因为底层的通信都是把struct转成char[]字节来传输的。

user: user-3
content: #include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }

user: user-0
content: 引用 3 楼 qybao的回复:用外部变量的或者用new，malloc申请内存（自己申请就要自己释放）。方法内部的数组只是在方法栈内有效，方法结束后栈被回收释放，原来栈内的数组属于垃圾内存 大佬，我想问一下，函数里面的数组和其他整形数，空间是连续分配的吗，为什么地址是连续的？像上面那个函数里面定义的数组和一个int变量。数组里面放的就是个字符串，没有给它设置结束符"\0"，用%s输出这个数组，会把后面那个int类型数字也一起输出。比如数组是csdn，数字是1，不设置结束符，打印csdn会显示csdn1。

user: user-2
content: 用外部变量的或者用new，malloc申请内存（自己申请就要自己释放）。方法内部的数组只是在方法栈内有效，方法结束后栈被回收释放，原来栈内的数组属于垃圾内存

user: user-0
content: 引用 1 楼 qybao的回复:太长没细看，你的函数返回的指针都是函数内部变量，函数结束后就被回收了，你这都是隐藏的炸弹 意思是要从外部传指针进来再返回？多设置一个指针作为属性，然后返回这个指针。为什么我返回数组的名字不行。不是说单个数组名就等于首地址么

user: user-2
content: 太长没细看，你的函数返回的指针都是函数内部变量，函数结束后就被回收了，你这都是隐藏的炸弹
user-0 提问: long double 加减法计算精度问题

回复:
user: user-1
content: 浮點數的實現方式是指數式的，所以不會每一位都精確。自己實現一個精確的浮點數，思路可以這樣：整數和小數分別用長整數表示，如果需要精度更高，也可能長整數達不到要求，可以用多個長整數，不過進位等方面就比較複雜了。

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

user: user-3
content: 自己用数据结构实现 引用 2 楼 charles_great 的回复:怎么算呢？ 引用 1 楼 老马何以识途 的回复:這是跟浮點數的存儲和表達方式有關的，如果你需要每一個小數位的精確，需要另外的算法。

user: user-0
content: 怎么算呢？ 引用 1 楼 老马何以识途 的回复:這是跟浮點數的存儲和表達方式有關的，如果你需要每一個小數位的精確，需要另外的算法。

user: user-1
content: 這是跟浮點數的存儲和表達方式有關的，如果你需要每一個小數位的精確，需要另外的算法。
user-0 提问: 新人学生求解一个在转换十六进制字符串到十进制时遇到的问题，用vs2017写的

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() {     int i,v;     char bs[33];     char b[33];     char hs[9];     char h[9];     char s[4];     char *e;  // 十进制整数转二进制串；     i=1024;     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("i=%d,bs=%s\n",i,bs); // 十进制整数转十六进制串；     i=1024;     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串     strcpy(s,"a汉");     i=0;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉
user-0 提问: 1＜＝1是真还是假？

回复:
user: user-1
content: 1<=1是真，y++是先执行操作后自增，你是不是在自增之前就进行操作了呀，如果打印y++的值是原值哦，打印后才自增的

user: user-2
content: 这个问题，数学老师应该知道

user: user-3
content: 反证法：若１<= 1为假，１>1则为真，而１>1实则为假，因此1<=1为真。

user: user-4
content: 1<=1 读作1不大于1

user: user-5
content: 1 <= 1可以分解为： 1 < 1 || 1 == 1

user: user-6
content: 不要怀疑常识，所以一定是你哪里搞错了
user-0 提问: c++求帮助 需要大佬帮忙看下

回复:
user: user-1
content: float result = 1.0; if (m > n && n > 0) { 	for (int i = m; i > 0; i --) { 		result *= i; 		if (i <= n) 			result /= i; 		if (i <= (m - n); 			result /= i; 	} } 这个是纯循环的用法

user: user-1
content: 刚手算了下，你应该是p=m!/(n! * (m-n)!) 那结果应该是factorial(m) * 1.0 / (factorial(n) * factorial(m - n)); 因为你要的结果是浮点数，需要乘上1.0

user: user-1
content: p=m!/n!(m-n)!这段表示 p=m!/(n! * (m-n)!)还是p=(m!/n!)*(m-n)!

user: user-0
content: 引用 3 楼 weixin_44810984的回复:[quote=引用 1 楼 轻箬笠的回复:]long factorial(int n) {   if (n < 2) return n;   return n * factorial(n - 1); }  你要的结果应该就是 factorial(m) / factorial(n) * factorial(m - n); 求p=m!/n!(m-n)!的值，其中m与n为两个整数，且要求m>n， 输出为单浮度精点，当m=12，n=8时 出去结果为495.000000  用循环  嘿嘿[/quote] 这个我写了好几遍 但是输入程序不对

user: user-0
content: 引用 1 楼 轻箬笠的回复:long factorial(int n) {   if (n < 2) return n;   return n * factorial(n - 1); }  你要的结果应该就是 factorial(m) / factorial(n) * factorial(m - n); 求p=m!/n!(m-n)!的值，其中m与n为两个整数，且要求m>n， 输出为单浮度精点，当m=12，n=8时 出去结果为495.000000  用循环  嘿嘿

user: user-0
content: 哦哦好的呢 谢谢啦 嘿嘿

user: user-1
content: long factorial(int n) {   if (n < 2) return n;   return n * factorial(n - 1); }  你要的结果应该就是 factorial(m) / factorial(n) * factorial(m - n);
user-0 提问: c语言 命令行参数求助

回复:
user: user-1
content: 是说写入文件的函数吗？比如 fprintf ?   #include <stdio.h> #include <stdlib.h> #include <string.h>  int main(int argc, char const *argv[]) {     if (2 == argc)     {          FILE *fp;         char fname[100];         strcpy(fname, argv[1]);          printf(">>> File write process starts. >>>\n");         if ((fp = fopen("1.txt", "wt")) == NULL)         {             puts("Failed to open file 1.txt\n");             exit(0);         }          //fputs(fname, fp);         fprintf(fp,"%s",fname);          fclose(fp);          printf(">>> File write process ends. >>>\n");          printf(">>> File read process starts. >>>\n");          if ((fp = fopen("1.txt", "rt")) == NULL)         {             puts("Failed to open file 1.txt\n");             exit(0);         }          int ch;         while ((ch = fgetc(fp)) != EOF)         {             putchar(ch);         }         puts("\n");          fclose(fp);          printf(">>> File read process ends. >>>\n");     }     else     {         printf("Wrong input...\n");         printf("Command usage: 'Command<space>stringasfilename<enter>'\n");         return -1;     }      return 0; }

user: user-0
content: www谢谢各位大佬，解决了解决了

user: user-2
content: printf("%s\n", filename);

user: user-3
content: https://bbs.csdn.net/topics/390469280

user: user-2
content: 看错了，写文件可以用fputs http://www.runoob.com/cprogramming/c-file-io.html
user-0 提问: c语言中如何求一串数据中指定范围内数的和？

回复:
user: user-1
content: 仅供参考，还有，你的题目前后矛盾，题目说21结尾实际是aa结尾，sum到底是2-5数字和还是2-6数字和 #include <stdlib.h>  int main() {     int a[6];     scanf("01 %d %d %d %d %d %d aa", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5]);     a[5] = (a[0] + a[1] + a[2] + a[3] + a[4]);     printf("01 %d %d %d %d %d %d aa\n", a[0], a[1], a[2], a[3], a[4], a[5]);     return 0; }
user-0 提问: 声明变量的问题

回复:
user: user-0
content: 谢谢，大哥的火眼金睛

user: user-1
content: 报错的文件的名字是「4.c」，你把「5.c」打开作甚？  去打开 「4.c」文件 看看吧！

user: user-2
content: 楼上应该真相了。。。。。。。 表扬楼主，终于有人能发看得清的图了

user: user-0
user-0 提问: #include "graph.c"无法找到原文件怎么办

回复:
user: user-0
content: 引用 4 楼 user-1 的回复:[quote=引用 1 楼 weixin_42163912 的回复:] 再就是#include<graphics.h>也出错，但是装了Easyx就好了，但是显示easyx只能在C++里运行，这怎么办？ c和c++可以混合编译 没有问题呀 [/quote] 您是怎么混合编译的呢

user: user-1
content: 百度 extern "C"

user: user-1
content: 引用 1 楼 weixin_42163912 的回复:再就是#include<graphics.h>也出错，但是装了Easyx就好了，但是显示easyx只能在C++里运行，这怎么办？ c和c++可以混合编译 没有问题呀

user: user-0
content: @luodongshui

user: user-0
content: @u012997273

user: user-0
content: 再就是#include<graphics.h>也出错，但是装了Easyx就好了，但是显示easyx只能在C++里运行，这怎么办？
user-0 提问: 逆序数c语言

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: #include<stdio.h>   //void main() int main() {     int num;      printf("请输入一个4位数：");     scanf("%d", &num);      while (num) {         printf("%d\t", num % 10);         num /= 10;     }     putchar(10);       /*     int a,b,c,d,e,f,g;     printf("请输入一个4位数：");     scanf("%d",&a);     b=a/1000;     c=a%1000;     d=c/100;     e=c%100;     f=d/10;     g=e%10;     printf("这四位数的逆序数是：%d%d%d%%d",g,f,d,b);     */ } 供参考～

user: user-3
content: 你为什么不直接用while呢？ #include<stdio.h> int main() {  int x=0; int i=0; scanf("%d",&x); while(x>0){ i=i*10+x%10; x=x/10;} printf("%d",x); return 0; }

user: user-4
content: 引用 1 楼 Huang Liudi-Brody 的回复：#include<stdio.h> int main() {      int  n,a; printf("请输入4位数的整数："); scanf("%d",&n); /*第一个n%10表示取出个位，n/10%10  表示取十位，n/100%10表示百位   n%1000表示千位    */ a=((n%10)*1000) + (((n/10)%10)*100)) +((n/100)%10)*10) + ((n%1000)); printf("\n逆序后：%d",a); return  0; } //手机手打的   不知道有没有错   大概就是这样子一个思路千位是/的

user: user-5
content: f=e/10

user: user-4
content: #include<stdio.h> int main() {      int  n,a; printf("请输入4位数的整数："); scanf("%d",&n); /*第一个n%10表示取出个位，n/10%10  表示取十位，n/100%10表示百位   n%1000表示千位    */ a=((n%10)*1000) + (((n/10)%10)*100)) +((n/100)%10)*10) + ((n%1000)); printf("\n逆序后：%d",a); return  0; } //手机手打的   不知道有没有错   大概就是这样子一个思路
user-0 提问: [Error] 'head' was not declared in this scope 为啥是这个错误啊

回复:
user: user-0
content: 非常感谢，差不多解决了

user: user-1
content: （1）add()函数的声明与底下的原形不一致，具体是第一个参数的类型不一致。 （2）head在main()函数中没有定义过。 （3）add()函数是没有返回值的，如何能赋值呢？