Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: c函数体内extern

回复:
user: user-0
content: 服了你们了 编译的splayer，里面包含了一个libavcodec项目， rv10.c AVCodec rv10_decoder = {     "rv10",     CODEC_TYPE_VIDEO,     CODEC_ID_RV10,     sizeof(MpegEncContext),     rv10_decode_init,     NULL,     rv10_decode_end,     rv10_decode_frame,     CODEC_CAP_DR1,     .long_name = NULL_IF_CONFIG_SMALL("RealVideo 1.0"),     .pix_fmts= ff_pixfmt_list_420, }; allcodecs.c  void avcodec_register_all(void) {... 	extern AVCodec rv10_decoder;  	avcodec_register( &rv10_decoder ); ... } 这样编译不过libavcodec\allcodecs.c(96) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)  extern AVCodec rv10_decoder;  void avcodec_register_all(void) {... 	avcodec_register( &rv10_decoder ); ... } 这样就过了

user: user-1
content: 你看的是什么书啊，真是。。。  http://www.afanihao.cn/c_guide/

user: user-2
content: exern是用来申明全局变量的，函数体内的变量是局部变量

user: user-3
content: 引用 15 楼 my_live_123 的回复:[quote=引用 2 楼 sholber 的回复:] 是 extern struct A a; 不是 extern A a;  另外，C禁止空的结构{}。 你加上不加上都是不对的。 C的结构体中不允许extern的，一旦使用外连接存储对象，在构建符号表的时候，无法确定结构体的大小，必定报错的。这和使用static还不一样[/quote] 悲剧`没有仔细审题被抓了小辫子``

user: user-4
content: 引用 2 楼 sholber 的回复:是 extern struct A a; 不是 extern A a;  另外，C禁止空的结构{}。 你加上不加上都是不对的。 C的结构体中不允许extern的，一旦使用外连接存储对象，在构建符号表的时候，无法确定结构体的大小，必定报错的。这和使用static还不一样

user: user-5
content: 引用 13 楼 qq_21456317 的回复:所以我觉得你 extern   A; extern   a; 试试。 我傻逼了，这样语法错误，你得先引用那个你自己定义的类型，才能引用这种类型的变量，要不然你直接在另一个文件中重新定义一次A?

user: user-5
content: 所以我觉得你 extern   A; extern   a; 试试。

user: user-5
content: 有两种声明，一种是定义声明一种是引用声明，在对一个文件作用域的已在另一个文件定义的变量引用时，要用到extern，你看你在其他文件先后定义了一种新结构A类型，又用这种A类型定义了一个变量a，但是你在另一个文件中只引用声明了一次。

user: user-0
content: 引用 10 楼 gqjjqg 的回复:引用 9 楼 sx5486510 的回复:[quote=引用 8 楼 gqjjqg 的回复:] 楼主都不了 声明和定义。求指导，哪里有问题  简单来说就是：定义某种类型(struct A)的对象(a)之前，必须要声明该类型。  多看看课本。[/quote][img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/40.gif][/img

user: user-6
content: 引用 4 楼 sx5486510 的回复:[quote=引用 2 楼 sholber 的回复:] 是 extern struct A a; 不是 extern A a;  另外，C禁止空的结构{}。我只是举例，不要在乎这些细节[/quote]  你就是错在细节。

user: user-7
content: 楼主在“另一个文件中”都没有定义struct A, 自然是不行的。

user: user-8
content: 引用 9 楼 sx5486510 的回复:引用 8 楼 gqjjqg 的回复:楼主都不了 声明和定义。求指导，哪里有问题  简单来说就是：定义某种类型(struct A)的对象(a)之前，必须要声明该类型。  多看看课本。

user: user-0
content: 引用 8 楼 gqjjqg 的回复:楼主都不了 声明和定义。求指导，哪里有问题

user: user-8
content: 楼主都不了 声明和定义。

user: user-0
content: 引用 5 楼 mymtom 的回复:楼主在“另一个文件中”都没有定义struct A, 自然是不行的。在一个.c中定义struct A a;现在另外一个.c的某个函数中声明extern struct A a;为什么会编译不过，是vs不支持什么标准还是什么原因？

user: user-0
content: 引用 2 楼 sholber 的回复:是 extern struct A a; 不是 extern A a;  另外，C禁止空的结构{}。我只是举例，不要在乎这些细节

user: user-9
content: 顶楼上 ~~~~~~~

user: user-3
content: 是 extern struct A a; 不是 extern A a;  另外，C禁止空的结构{}。

user: user-10
content: 表示A类型未定义，包含定义A类型的头文件即可
user-0 提问: 简单复习一下三年没怎么用的C语言看什么视频呢

回复:
user: user-1
content: 以前用过，何必看视频

user: user-2
content: 以前如鹏网有个c也能干大事的视频。。  上面有教你用c写各种程序。教完了还布置了作业 主要是网友学习后提交的作业各种神作，我都下了很多。。  网站好像关了，视频还是找得到的。。。

user: user-2
content: 我也是笑了赵老师回复，，

user: user-3
content: 我习惯缺啥补啥，之前学过有基础，遇到不懂得直接看哪方面呗

user: user-4
content: 对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-5
content: 看书啊，从基础看起！多动手，视频没有书本上得来的多

user: user-6
content: 看书啊，什么视频都没有书里讲得全，而且每次看书都会有不同的体悟
user-0 提问: c语言 函数十六进制转换成ascii怎么写啊

回复:
user: user-1
content: 理解数组和内存

user: user-2
content: 引用 2 楼 luciferisnotsatan 的回复:没看懂1f 41 怎么转成38 30 30 31 。  lz你确定是ascII转换？字符 1 对应的是 0x31这个值[/quote  [quote=引用 楼主 yang627468471 的回复:] 列如十六进制1f 41 转换成 ascii 码 是38 30 30 31 大神求解啊，困扰了写一个函数  将1F41转化为十进制就是8001 8的ascii编码就是38 0是30 1是31 就行了

user: user-3
content: char s1 = 0x1f;

user: user-4
content: 没看懂1f 41 怎么转成38 30 30 31 。  lz你确定是ascII转换？字符 1 对应的是 0x31这个值

user: user-5
content: int hex=0x1f41; char s[10]; int L,i; sprintf(s,"%X",hex); L=strlen(s); for (i=0;i<L;i++) printf("%d ",s[i]);
user-0 提问: 这样的封装有什么意义

回复:
user: user-1
content: 请牢记：源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要，重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。  意思是你程序结构看上去再合理，再简洁，也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错，更方便修改，出错了更容易找到哪里出错和具体出错的原因，更容易改正错误。  试对比 图书馆（对图书的分类够结构化了吧） 和 搜索引擎（可看作是扁平化任何结构数据，仅支持全文检索） 哪个处理信息更方便、更高效。  所以 与其费劲去重构代码让其看上去更简洁、更合理 不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。  结构越复杂，越难修改，越难除错。 有时（甚至大多数时候），看上去越合理、越简洁的代码，运行起来性能越差，出错时查找原因越难，找到出错原因后改正越费劲。  程序员要做的不是尽力避免错误，而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误，“快速的失败”远胜过“预防错误”。Fred George

user: user-2
content: 嗯，就这个类来说，没啥必要，代价有点大。 要是每个类都这么干，那别写代码了。  引用 4 楼 chuansunshine 的回复:代理模式， 如果后期要做扩展有很多好处。 比如更改内存申请方式， 虽然还有其他的作用， 但是此处没看出优势

user: user-3
content: 因为楼主你点进去那文章看看，人家用C来模拟OOP,当然看起来蛋疼啦 人家是用来学习用的

user: user-4
content: 楼主奇怪：怎么操纵结构成员。 实际不需要，因为通过接口函数完成功能。如果作者加几个接口函数，楼主就明白了。差在没有功能性的接口函数。

user: user-5
content: 代理模式， 如果后期要做扩展有很多好处。 比如更改内存申请方式， 虽然还有其他的作用， 但是此处没看出优势

user: user-6
content: 还有就是调用次数很多的话, 节省劳动量, 代码看着也干净点

user: user-7
content: typedef struct Point point; point * new_point(); //newer a point object void free_point(point *point_);// free the allocated space 理解上面3行是关键  使用： point p = new_point();//生成 //使用  free_point(p);//销毁

user: user-8
content: 比如，当Point变成 x y z三个分量是，不会修改 .h 文件，所有#include “point.h”的代码都不会重新编译。节省编译时间，提高开发效率。
user-0 提问: 二进制文件换成txt文件时，fread，fwrite和fprintf,fscanf怎么改

回复:
user: user-1
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,fread,fwrite,fgetc,fclose  //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了
user-0 提问: 字符串连接问题

回复:
user: user-0
content: 谢谢 回复 问题已解决！多谢！

user: user-1
content: 在VS2013上跑了一遍，把gets改成了gets_s  ansi ， Unicode； 编译为C，C++都没问题

user: user-2
content: 多了什么？我复制了一遍，没发现有问题。

user: user-3
content: 使用了什么字符集？ansi？unicode？
user-0 提问: 长整数加减计算器的实现

回复:
user: user-1
content: 使用Openssl中的 BIGNUM，可以实现任意长度的整数的运算。

user: user-2
content: 仅供参考：#include <stdio.h> #include <string.h> #define MAXLEN 1000 char a1[MAXLEN]; char a2[MAXLEN]; static int v1[MAXLEN]; static int v2[MAXLEN]; static int v3[MAXLEN]; int i,j,n,L,z; void main(void) {     scanf("%d",&n);     for (j=0;j<n;j++) {         scanf("%s%s",a1,a2);          L=strlen(a1);         for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';          L=strlen(a2);         for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';          for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];          for (i=0;i<MAXLEN;i++) {             if (v3[i]>=10) {                 v3[i+1]+=v3[i]/10;                 v3[i]=v3[i]%10;             }         }          printf("Case %d:\n", j+1);         printf("%s + %s = ", a1, a2);          z=0;         for (i=MAXLEN-1;i>=0;i--) {             if (z==0) {                 if (v3[i]!=0) {                     printf("%d",v3[i]);                     z=1;                 }             } else {                 printf("%d",v3[i]);             }         }         if (z==0) printf("0");          printf("\n");     } } //Sample Input //3 //0 0 //1 2 //112233445566778899 998877665544332211 // //Sample Output //Case 1: //0 + 0 = 0 //Case 2: //1 + 2 = 3 //Case 3: //112233445566778899 + 998877665544332211 = 1111111111111111110

user: user-3
content: +8234567890 +5655456545 —————— 手算加减法的步骤模拟一下  两个数先调整成绝对值大的在前，小的在后，绝对值大的若为负数做一下变换 比如 -53322 + 999 变换为 -(53322 - 999)
user-0 提问: C中变量名储存在哪？

回复:
user: user-1
content: 引用 8 楼 zhao4zhong1 的回复:存在编译器比如gcc或g++所管理的数据结构中。 有时候会从这个数据结构（即符号表）中导出到调试辅助用的exe文件或pdb文件中一份。

user: user-2
content: 变量名只是地址标识符,为了程序员的方便. 你可以随便拿一个应用程序,然后进行反汇编,就可以看到编译后的实际内存分布. 里面的变量名全部变成了内存地址或者各种寄存器.  参考《程序员的自我修养》 参考 汇编语言

user: user-3
content: 变量名存放在变量名表

user: user-4
content: 参考《程序员的自我修养》

user: user-5
content: 变量名是 写代码的人 写给编译器看的  编译器看完就扔了  不用存

user: user-6
content: 估计懂汇编等语言的人，可能比较清楚 就我个人理解， 我觉得C++这些变量名称，函数名称等等，在高级语言中，只是方便给我们看的，并不是方便给电脑看的 所以需要，C++编译链接等等过程，转化成电脑可以理解的语言，就是二进制一堆数字吧，比如地址等等 这样就没有必要存储变量名称 个人理解，纯属于

user: user-7
content: 编译后，名字都变为了地址，没有名字信息

user: user-8
content: 我理解，变量名只是代表一个内存区域，供编译器使用的。

user: user-9
content: 编译原理：存放到“符号表”中。

user: user-10
content: 反汇编看小，变量名只是地址标识符

user: user-11
content: 这个需要参考汇编语言，当变成汇编时，只会出现对应变量地址 。可以看下深入理解计算机系统。

user: user-1
content: 存在编译器比如gcc或g++所管理的数据结构中。
user-0 提问: const修饰的只读变量必须在定义的同时初始化，这是为什么？

回复:
user: user-0
content: 引用 3 楼 taodm 的回复:因为语言标准的规定。 你完全可以自己造一个新语言，const的可以不同时初始化。 不要把自己绕太深了。如果是标准规定的话，这样理解起来会更好

user: user-1
content: 因为语言标准的规定。 你完全可以自己造一个新语言，const的可以不同时初始化。 不要把自己绕太深了。

user: user-2
content: 如果不在定义的时候初始化，他就会是一个随机值，之后又不能赋值，那要他有什么用。

user: user-3
content: 因为它在语义上是不可修改的。
user-0 提问: 一道关于C语言的题

回复:
user: user-1
content: 逆序输出

user: user-2
content: 引用 4 楼 zhao4zhong1 的回复:“给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出  上学那会深有体会重要性

user: user-3
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-4
content: 这个程序作用是eg  你输入mylove  输出是evolym，里面的i=5是限制可倒的字符，你阔以试试哦

user: user-5
content: 一个简单的递归调用，你输入五个字符：如 abcde 它会给你逆序输出：edcba 至于为什么会逆序输出？你画下递归调用图就明白了

user: user-6
content: 你运行一下试试就知道了！
user-0 提问: c primer plus第十四章 练习题2

回复:
user: user-1
content: 引用 3 楼 guicaisa 的回复:[quote=引用 1 楼 zhangxiangDavaid 的回复:] 题目的意思是在程序中你可用数字或字符代替月份，这不是要你同一个程序处理三种输入，选一个即可。  难道是我想复杂了吗。。[/quote] 想复杂了

user: user-0
content: 引用 1 楼 zhangxiangDavaid 的回复:题目的意思是在程序中你可用数字或字符代替月份，这不是要你同一个程序处理三种输入，选一个即可。  难道是我想复杂了吗。。

user: user-2
content: 觉得应该将monthn定义成2个元素的char型数组然后用%s接收；再判断monthn，name，abbrev中的一个是合理的表达就得到月份；

user: user-1
content: 题目的意思是在程序中你可用数字或字符代替月份，这不是要你同一个程序处理三种输入，选一个即可。
user-0 提问: 结果为什么是多少，为什么？

回复:
user: user-1
content: 40, 1 Array在main函数中sozeof值为40，即4*10，在foo函数内sizeof的值为4，即一个指针的大小。该结果显示，数组Array作为函数参数被自动转化为指针了，发生了隐式的指针化。
user-0 提问: 文件的理解

回复:
user: user-1
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

user: user-0
content: 引用 1 楼 user-3 的回复:看英文,不要看中文, 另外要看完.(下面的英文应该让你更好懂)  Files are logical units of information created by processes. A disk will usually contain thousands or even millions of them, each one independent of the others. In fact, if you think of each file as a kind of address space, you are not that far off, except that they are used to model the disk instead of modeling the RAM. 的确，明白了

user: user-2
content: 我理解的不深，但我知道电脑文件都是二进制存储的，那么你可把它看做地址空间吧

user: user-3
content: 看英文,不要看中文, 另外要看完.(下面的英文应该让你更好懂)  Files are logical units of information created by processes. A disk will usually contain thousands or even millions of them, each one independent of the others. In fact, if you think of each file as a kind of address space, you are not that far off, except that they are used to model the disk instead of modeling the RAM.
user-0 提问: 关于C语言类型提升的问题

回复:
user: user-1
content: 引用 4 楼 lgbxyz 的回复:[quote=引用 3 楼 fly_dragon_fly 的回复:] 标准规定需要提升  在标准的什么地方?[/quote] 没注意是c的问题，c标准好久没看，真不知道，只知道 C++11 5.3.1.10 只要c的话请忽略该回答

user: user-2
content: 引用 4 楼 lgbxyz 的回复:[quote=引用 3 楼 fly_dragon_fly 的回复:] 标准规定需要提升  在标准的什么地方?[/quote] N1570, 6.5.3.3

user: user-0
content: Update

user: user-0
content: 引用 3 楼 fly_dragon_fly 的回复:标准规定需要提升  在标准的什么地方?

user: user-1
content: 标准规定需要提升

user: user-0
content: Update

user: user-3
content: layout src：显示源代码窗口 layout asm：显示反汇编窗口 layout regs：显示源代码/反汇编和CPU寄存器窗口 layout split：显示源代码和反汇编窗口
user-0 提问: 菜鸟VC6.0报错One or more breakpoints are not positioned on valid lines.

回复:
user: user-1
content: 为什么要用VC6呢？ 建议使用VS2008或以上版本，程序界面、帮助文档全中文。  珍惜生命，远离VC6

user: user-2
content: 这种问题有时候真的是莫名其妙。 ①清理，重新编译； ②在工程中删除文件，然后再重新加入； ③删除工程目录下的debug目录，重新编译； ④重新安装VC6.0。  试试吧，这是我碰到这种情况时试过的方法。

user: user-3
content: 64位

user: user-3
content: 试试在64为机器上的32位虚拟机中运行VC6

user: user-3
content: 编辑、断点、Remove All、确定。
user-0 提问: 如何在节约内存的情况下存放一个位的数据

回复:
user: user-1
content: 最简单， 最省事， 向八楼看齐。 不想用crt就 看9楼， 都是大神

user: user-2
content: 1、用位运算，存到一个BYTE数组里，按位存、取值； 2、内嵌汇编。

user: user-3
content: //将0-7位当中的1位设置为1,指针b应该指向你分配的首地址 void setOneBit(byte*b,int pos) {  if(pos == 0)    *b = *b | 1; ....  else if(pos == 6)   *b = *b | 32 }

user: user-4
content: 存到硬盘, 最节省内存

user: user-5
content: std::vector<bool>

user: user-6
content: 引用 5 楼 cheng7068 的回复:这种采用位操作应该是最省内存空间的，采用union数据结构吧  这样挺好

user: user-7
content: c++ 里有bitset类型，有多少位就定义多少位，很省内存 example： #include  <bitset> bitset<30> bitvec; // bitvec含30位，每一位默认初始化为0  具体细节参考c++ primer

user: user-8
content: 这种采用位操作应该是最省内存空间的，采用union数据结构吧

user: user-9
content: 看你的数据有多少, 然后申请内存. unsigned char length[数据长度/8 + 1]; 然后按位操作即可, 最多浪费7bit.   如果考虑机器字啥的, 32位机: unsigned int length[数据长度/32 + 1]; 64位机: unsigned long length[数据长度/64 + 1];

user: user-10
content: stl 里的 bvector, 不谢！

user: user-11
content: 不是可以定义这种吗： struct xxx { char data:1; }; 这种结构体其实还是要占用8个字节 楼主可以参考std::vector<bool>的实现，一个char表示8个数据

user: user-12
content: 两种方案。 第一种是使用位字段，但相邻的位字段是否能挤在同一个存储单元里，是由Ｃ的实现决定，所以不保准； 第二种是自己用位操作运算符弄，这个麻烦，但效果也挺好。
user-0 提问: C语言使用默认浏览器打开指定网址应该怎么写？

回复:
user: user-1
content: windows 下可以 还可以调用   CreateProcess

user: user-2
content: 直接给代码吧，就是一句关键代码：  #include<stdlib.h> int main() { 	system("explorer http://www.baidu.com"); //关键代码 	return 0; }   VS2010 编译测试通过。。

user: user-1
content: 第一部 获取 默认浏览器  这个  可以通过注册表获取到  构建一个字符串    比如： "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"  www.baidu.com  第三:  system(上面的字符串);

user: user-1
content: 这个和 c 语言没有关系啊

user: user-3
content: 引用 8 楼 cy88630 的回复:[quote=引用 5 楼 wanguser-3 的回复:] ShellExecute(NULL, "open", "http://www.baidu.com", NULL, NULL, SW_SHOWNORMAL);  能给一段完整的代码吗？[/quote] 就这一句啊，把网址替换掉就行了啊。你的程序在什么情景下用默认浏览器打开指定网址就把这句加进去就行了啊。 给你一个vs2008编译通过的最简单的代码吧：  #include "stdafx.h" #include <Windows.h>  int _tmain(int argc, _TCHAR* argv[]) { 	ShellExecute(NULL, L"open", L"http://www.baidu.com", NULL, NULL, SW_SHOWNORMAL); 	return 0; }

user: user-0
content: 引用 5 楼 wanguser-3 的回复:ShellExecute(NULL, "open", "http://www.baidu.com", NULL, NULL, SW_SHOWNORMAL);  能给一段完整的代码吗？

user: user-0
content: 引用 1 楼 tsh185 的回复:这个和 c 语言没有关系啊  用其他的写也可以的，只要能满足要求？能给一段完整的代码吗？谢谢！

user: user-0
content: 引用 3 楼 huxueyan2008 的回复:直接给代码吧，就是一句关键代码：  #include<stdlib.h> int main() { 	system("explorer http://www.baidu.com"); //关键代码 	return 0; }   VS2010 编译测试通过。。  请问这个是按照系统默认浏览器打开的吗？

user: user-3
content: ShellExecute(NULL, "open", "http://www.baidu.com", NULL, NULL, SW_SHOWNORMAL);
user-0 提问: C语言随机数产生

回复:
user: user-0
content: 谢谢你！谢谢你！

user: user-1
content: #include<time.h> nt randm2n(int m, int n) { 	srand(time(0)); 	if (m > n) 		swap(m, n); 	return rand() % (n - m) + m; }

user: user-2
content: http://www.cplusplus.com/reference/random/

user: user-3
content: #include <time.h>  不好意思刚才打少了就发出去了- - void randomum(int n,int m) {       int i = 0,a[10];       for(;i < 10;i++)       {           srand((unsigned)time(NULL)*( i+1 ));           a[i]=rand()%m+n;        } }

user: user-3
content: #include <time.h>  void randomum(int n,int m) {       int i = 0;       for(;i < 10;i++)       {           srand((unsigned)time(NULL)*( i+1 ));  }
user-0 提问: 这个里面的嵌套到底是什么时候发生作用？

回复:
user: user-1
content: 局部变量会覆盖全局变量。如果仅是在花括号里对全局变量赋值，那么赋值依然有效。仅当你在花括号里定义了新的同名的局部变量并赋值，才不会对全局变量的值造成影响。

user: user-2
content: score = a + 250;	//score         int score = 30;         printf("%d", score);	////score 30 这里没有添加换行符，这里的int score = 30是局部变量，在出了这个大括号就失效了，所以下下一句printf输出的是260、

user: user-3
content: 两个相同的标识符，如果它们各自指示不同的实体，且属于同一个名字空间，要使它们不冲突，可以采用让它们的作用域重叠的办法。在这种情况下，外部块内的标识符被内部块中的同名标识符隐藏。

user: user-4
content: 注意变量的生命周期及作用域  #include <stdio.h>  int main() {     int a = 20;	//a     int score = a + 100;	//score     printf("%d\n", score);	//score     {         int score = 50;         {             score = 10;			///score             printf("%d\n", score);	///score         }         a = 10;	//a     }     {         score = a + 250;	//score         int score = 30;         printf("%d", score);	////score 30     }          printf("%d\n", score);	////score 260     return 0; }  30260是因为你输出没有换行显示到一行了
user-0 提问: C语言中sizeof与strlen的区别

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:1. sizeof是操作符，strlen是库函数。  2. sizeof的参数可以使数据类型，变量，对象，结构体，数组等，返回其所占内存字节数。  3. strlen的参数只能是字符串，返回字符串的长度。  4. sizeof在编译时就运算出结果，strlen在运行时计算结果。  小结：sizeof计算的是分配内存的大小，计算的对象很广泛，包括数据类型，变量等等。strlen 则局限于字符串，并返回字符串的长度。需要特别注意的是，禁止空指针引用strlen  ，结果不确定。另外，strlen参数为字符串数组情况下，如果数组长度不大于字符个数，则无法再为字符串末尾添加"这个够全的

user: user-1
content: 1. sizeof是操作符，strlen是库函数。  2. sizeof的参数可以使数据类型，变量，对象，结构体，数组等，返回其所占内存字节数。  3. strlen的参数只能是字符串，返回字符串的长度。  4. sizeof在编译时就运算出结果，strlen在运行时计算结果。  小结：sizeof计算的是分配内存的大小，计算的对象很广泛，包括数据类型，变量等等。strlen 则局限于字符串，并返回字符串的长度。需要特别注意的是，禁止空指针引用strlen  ，结果不确定。另外，strlen参数为字符串数组情况下，如果数组长度不大于字符个数，则无法再为字符串末尾添加"
user-0 提问: 如何理解“条件运算符”的"自右至左“的结合性

回复:
user: user-1
content: 优先级和结合性  只决定 运算符和哪些操作数结合  和求值顺序 毫无关系  举一个例子 a+b+c*d 完全可以 a求值 b求值 a+b求值 然后 c求值 d求值 c*d求值 最后 a+b + c*d 求值 完毕  这里加法完全可以比乘法先求值   而*优先级高 只决定了 a+b+c*d  表达的是 a+b+ (c*d) 而不是 (a+b+c)*d   a>b?c:d>e?f:g 这里根据结合性 只确定了 这个表达式是 a>b ? c : (d>e?f:g) 而不是 (a>b ? c : d>e) ? f :g 这才是 结合性的作用 和求值顺序无关

user: user-2
content: 拿人脑当编译器。

user: user-0
content: 引用 12 楼 lin5161678 的回复:优先级和结合性  只决定 运算符和哪些操作数结合  和求值顺序 毫无关系 我比较赞同，谢谢大家的讨论！！！

user: user-3
content: 拿数学中的结合律来理解也可以，结合嘛——在一起也，右呢——方向噻！假设A + B + C,你赋予+一个新的概念，就像布尔当初给+赋予与的运算类似，你重新对符号+定义一种新的运算概念使得它是右结合性，那么你就不能用A + B得出E在 E+C得出最终结果。 而是反过来先算B+C，最后再+A，因此等价于A + (B + C)，那么这里的+是个抽象概念，若把+替换成实际的条件运算，您是否理解了呢？

user: user-4
content: 条件运算符?:是右结合的。因此，表达式 a ? b : c ? d : e a ? b ? c : d : e 分别等同于 a ? b : (c ? d : e) a ? (b ? c : d) : e 要理解这样做的原理，只需要掌握两个原则： 1，从右边开始往左找，直至遇到第一个未被处理的“?”； 2，再从这个“?”开始往右找第一个遇到的“:”； 3，在“?”左边的操作数前加一个“(”，在“:”右边的操作数后加一个“)”； 4，返回1，继续处理其它条件运算符?:。

user: user-5
content: 1、表达式a>b?c>d?e:f:g只能等价于a>b?(c>d?e:f):g，这属于运算符的嵌套，实际上是一个内层的条件运算符嵌套在一个外层的条件运算符中，这里根本不需要利用结合性来解释。  2、表达式a>b?c:d>e?f:g中出现了两个条件运算符，因为它们的结合性都是从右往左，意味着应该先算右边的条件运算， 因此         a>b?c:d>e?f:g 等价于     a>b?c:(d>e?f:g) 不等价于(a>b?c:d)>e?f:g

user: user-4
content: 引用 3 楼 paschen 的回复:不要纠结这种问题，如果你觉得看不出来，就加上括号  参看：http://bbs.csdn.net/topics/370153775 引用 4 楼 user-9 的回复:语法，建议加括号吧 引用 5 楼 zxh707wk 的回复:考试才有的东西，代码是写给人看的，不是给机器看的  不明白就说不明白，不要找这个那个理由。捂着耳朵，蒙上眼睛，问题就不存在了？？

user: user-6
content: 引用 6 楼 sholber 的回复:[quote=引用 3 楼 paschen 的回复:] 不要纠结这种问题，如果你觉得看不出来，就加上括号  参看：http://bbs.csdn.net/topics/370153775 引用 4 楼 user-9 的回复:语法，建议加括号吧 引用 5 楼 zxh707wk 的回复:考试才有的东西，代码是写给人看的，不是给机器看的  不明白就说不明白，不要找这个那个理由。捂着耳朵，蒙上眼睛，问题就不存在了？？[/quote]  我的队友写这种代码, 我会在心里问好他家人的. 当然每个人看法不一样. 我只是说一下我的

user: user-7
content: 不要纠结这种问题，如果你觉得看不出来，就加上括号  参看：http://bbs.csdn.net/topics/370153775

user: user-4
content: So, ++ a < ++ b ? ++ c < ++ d ? ++ e : ++ f : ++ g; equ.： ++ a < ++ b ? (++ c < ++ d ? ++ e : ++ f) : ++ g;

user: user-4
content: 瞧瞧人家问的问题，这才叫问题呢！ 给定声明： int a = 0, b = 1, c = 2, x = 3, y = 4, z = 5; 则， a ? b : x ? y : z 等同于 a ? b : (x ? y : z) 这是因为，要先找到最右边的?，让它与旁边的操作数结合，而它后面最近的冒号也属于它的同类。而 a ? x ? y : z : b 等同于 a ? (x ? y : z) : b 原因同上。

user: user-8
content: 考试才有的东西，代码是写给人看的，不是给机器看的

user: user-9
content: 语法，建议加括号吧
user-0 提问: while（）循环使用free（）释放内存时，第二次出现Debug错误CrtIsValidHeapPointer

回复:
user: user-1
content: free(current);         current=current->next; ------> 要先保存next， 再释放current 不然current都释放掉了，有可能取不到它的next了

user: user-0
content: 引用 1 楼 user-1 的回复:free(current);         current=current->next; ------> 要先保存next， 再释放current 不然current都释放掉了，有可能取不到它的next了 刚刚先保存current->next，然后再free（current），也同样出现这样的问题，而且这样不就会使头指针没有释放吗？

user: user-0
content: 引用 1 楼 user-1 的回复:free(current);         current=current->next; ------> 要先保存next， 再释放current 不然current都释放掉了，有可能取不到它的next了  谢谢！理解错了   free(current);         current=current->next; 这种写法在没有保存下一个节点的地址的时候就全部释放了，所以第二次取不到current->next的地址 我添加了一个temp指针提前存放下一个节点的地址就OK了 	while(current != NULL) 	{ 		puts("Test1"); 		temp=current->next; //		current=current->next; 			puts("Test2"); 		free(current); 			puts("Test3"); 		current=temp; 	}
user-0 提问: 关于scanf输入与转换符不匹配的的问题

回复:
user: user-0
content: 了解了： a和b都没有被scanf赋值。scanf读取到类型与控制符代表的类型不符合，所以 第一个scanf()读取到m，又把m送回到缓冲区，第二个scanf接着读，也是读到字符m，类型不对，送回缓冲区。、 所以缓冲区留下了 2个字符: 'm'      '\n' 输出的b是未初始化的垃圾值.

user: user-1
content: ps：技术好不代表是个好老师，有耐心的才是好老师 CSDN不缺技术好的，但十分缺少有耐心的。

user: user-1
content: int a, b;  //此处是未指定初值的初始化，a和b的值是个不确定值 scanf("%d", &a); //你输入了m，缓冲流中无法读取一个整数赋值给a，此行不起作用，被跳过 scanf("%d", &b); //缓冲流中仍然无法读取一个整数赋值给b，此行不起作用，被跳过 prinf("%d\n", b); //此处输出的是：b的那个最初的不确定值   //假定要让a、b分别接收3和5，可以采用如下输入 //输入：3(空格键)5回车 //输入：3(Tab键)5回车 //输入：3(回车键)5回车

user: user-0
content: 哦，我看出来与缓冲区有关，可是缓冲区的问题我还没切研究。麻烦能用语言通俗的讲一下吗？

user: user-2
content: 再供参考：#include <stdio.h> #include <string.h> char s[80]; int i; char c; int main() {     while (1) {         printf("Input a integer:");fflush(stdout);         rewind(stdin);         fgets(s,80,stdin);         if (strlen(s)>10) {             printf("Input too long(>9)!\n");             continue;         }         if (2==sscanf(s,"%d%c",&i,&c)) {             if ('\n'==c) {                 printf("%d is a integer.\n",i);                 break;             }         }         if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;         printf("\"%s\" is NOT a integer!\n",s);     }     return 0; }

user: user-2
content: 仅供参考：#include <stdio.h> int main() {     int a,b,n,v,r,k;     char buf[80];     char *p;      k=0;     r=EOF;     while (1) {         if (EOF==r) {             fgets(buf,80,stdin);             p=buf;         }         while (1) {             r=sscanf(p,"%d%n",&v,&n);             if (1==r) {k++;break;}             if (EOF==r) break;             p++;         }         if (EOF==r) continue;         p+=n;         if (1==k) a=v;         if (2==k) {             b=v;             break;         }     }     printf("%d,%d\n",a,b);     return 0; }
user-0 提问: 一个关于顺序表的错误，求大神指点

回复:
user: user-1
content: 1) 2-1SeqList.h 改成如下:  #ifndef  _2_1SEQLIST_H   ///// #define _2_1SEQLIST_H   ///// #define MAXSIZE 100 .... int SeqListAll(MySeqListType *SL);//遍历顺序表中的内容 #endif   ////   2) 2-2SeqList.c 改成如下:  #include <stdio.h>    /////////// #include <string.h>   /////////// #include "2-1SeqList.h"  //////////   3) 2-3SeqListTest.c 改成如下:  #include <stdio.h>    /////////// #include <string.h>   /////////// #include "2-1SeqList.h"  //////////

user: user-2
content: #include"2-2SeqList.c" 包含 2-1SeqList.h 导致 一般.h定义函数，.c是实现文件
user-0 提问: 统计文本单词数程序 换行后不能再输入问题

回复:
user: user-1
content: 引用 3 楼 mao_miaoxi 的回复:[quote=引用 2 楼 hnwyllmm 的回复:] if (ch == '\n')             cntline++; 如果换成while不就变成死循环了吗 应该是while (ch == '\n')  { cntline++; ch = getchar();}  if (!isspace (ch) && !inword)         {              cntword++;             inword = true;         }  楼主这段逻辑也有问题，'\n' \t'这种也是分隔符，但是没有起到楼主想要的效果  我明白我的错误了，谢谢你。  另外，我不知道你所说的第二个错误是怎么回事，因为这一段是《C Primer Plus》上的，我并没有改动，而且我运行的时候也没有出现问题。[/quote] 我说的第二个问题的意思是， if (ch == '\n')             cntline++; 改成while循环就变成了： while (ch == '\n')             cntline++; 但是ch的值不会改变，所以如果ch等于'\n'的时候，就变成了死循环

user: user-0
content: 引用 2 楼 hnwyllmm 的回复:if (ch == '\n')             cntline++; 如果换成while不就变成死循环了吗 应该是while (ch == '\n')  { cntline++; ch = getchar();}  if (!isspace (ch) && !inword)         {              cntword++;             inword = true;         }  楼主这段逻辑也有问题，'\n' \t'这种也是分隔符，但是没有起到楼主想要的效果   函数说明 检查参数c是否为空格字符，也就是判断是否为空格(' ')、水平定位字符 ('\t')、归位键('\r')、换行('\n')、垂直定位字符('\v')或翻页('\f')的情况。[1]  返回值 若参数c为空格字符，则返回TRUE，否则返回NULL(0)。 附加说明 此为宏定义，非真正函数。  这是 isspace() 函数的百度百科说明。在代码中使用应该没有问题。

user: user-0
content: 引用 2 楼 hnwyllmm 的回复:if (ch == '\n')             cntline++; 如果换成while不就变成死循环了吗 应该是while (ch == '\n')  { cntline++; ch = getchar();}  if (!isspace (ch) && !inword)         {              cntword++;             inword = true;         }  楼主这段逻辑也有问题，'\n' \t'这种也是分隔符，但是没有起到楼主想要的效果  我明白我的错误了，谢谢你。  另外，我不知道你所说的第二个错误是怎么回事，因为这一段是《C Primer Plus》上的，我并没有改动，而且我运行的时候也没有出现问题。

user: user-1
content: if (ch == '\n')             cntline++; 如果换成while不就变成死循环了吗 应该是while (ch == '\n')  { cntline++; ch = getchar();}  if (!isspace (ch) && !inword)         {              cntword++;             inword = true;         }  楼主这段逻辑也有问题，'\n' \t'这种也是分隔符，但是没有起到楼主想要的效果

user: user-2
content: /*  * this code is copyed from <The C praogramming Language>  */ #include<stdio.h> #include<stdlib.h> #define IN 1 #define OUT 0  int main() { 	int c , nl , nw , nc , state;  	state = OUT; 	nc = nl = nw = 0; 	while((c = getchar()) != EOF) 	{ 		++nc;//the nunber of character plus one 		if(c == '\n') 			++nl;//the number of line plus one 		if(c == ' ' || c == '\n' || c == '\t') 			state = OUT; 		else if(state == OUT) 		{ 			nw++; 			state = IN; 		} 	} 	printf("%d %d %d\n",nl,nw,nc); 	exit(0); }
user-0 提问: 有5万个三维坐标点，怎样用“图”G(V,E)这种数据结构组织起来？？C/C++

回复:
user: user-1
content: 单独存顶点和边

user: user-0
content: 不是的，每个点只需要和与它最近的K个点相连。（K经验上取50）

user: user-2
content: 用文件读写模拟内存读写。 参考_lseeki64函数

user: user-3
content: 五万个点，每两个点之间的边都要计算距离，计算量和存储量都太大了吧
user-0 提问: 文件复制程序

回复:
user: user-1
content: 你的问题是，char temp[81]申明后没有做格式化处理，就直接用了 .先使用void *memset( void *dest, int c, size_t count );将申请的内存格式化为0，就解决这个问题了。 memset(temp,0,81);

user: user-2
content: /*  * 本程序实现文件的复制，可复制文本文件和二进制文件  */ #include<stdio.h> #include<string.h> int main(int argc, char **argv) {     int c;      FILE *source,*targe;     if (!(argc>=3 && stricmp(argv[1],argv[2]) && NULL==fopen(argv[2],"rb"))) return 1;     source = fopen(argv[1],"rb");     targe = fopen(argv[2],"wb");     if(source && targe) {         while(1) {             c=fgetc(source);             if (EOF==c) break;             fputc(c,targe);         }         fclose(source);         fclose(targe);         return 0;     } }

user: user-3
content: for reference only! /*  * 本程序实现文件的复制，可复制文本文件和二进制文件  */  #include<stdio.h> #include<stdlib.h> int main(int argc, char **argv) { 	char buffer[10];  	FILE *source,*targe; 	source = fopen(argv[1],"rb"); 	targe = fopen(argv[2],"a+b");  	if(source && targe) 	{ 		while(fread(buffer,sizeof(char),1,source) > 0) 			fwrite(buffer,sizeof(char),1,targe);  		fclose(source); 		fclose(targe);  		return 0; 	} 	else 	{ 		fprintf(stderr,"can`t open file\n"); 		exit(0); 	} }

user: user-0
content: 引用 1 楼 q3733353520 的回复: #include <stdio.h> # include <stdlib.h> int main(int argc, char * argv[]) { 	FILE * fd, * fs; 	char temp[81];  	if (argc != 3) 	{ 		fprintf(stderr, "Usage: %s filename\n", argv[0]); 		exit(1); 	} 	if ((fs = fopen(argv[1], "rb")) == NULL) 	{ 		fprintf(stderr, "Could not open the file \"%s\"\n", argv[1]); 		exit(2); 	} 	if ((fd = fopen(argv[2], "wb")) == NULL) 	{ 		fprintf(stderr, "Could not creat the output file.\n", argv[2]); 		exit(3); 	}  	int ret = fread(temp, sizeof(char), 81, fs);  	printf("temp = [%s] \n", temp); 	fwrite(temp, sizeof(char), ret, fd);  	return 0; }   文件复制成功了，，但是打印出来了还是很多的烫的乱码，这是咋回事呢。。

user: user-4
content: #include <stdio.h> # include <stdlib.h> int main(int argc, char * argv[]) { 	FILE * fd, * fs; 	char temp[81];  	if (argc != 3) 	{ 		fprintf(stderr, "Usage: %s filename\n", argv[0]); 		exit(1); 	} 	if ((fs = fopen(argv[1], "rb")) == NULL) 	{ 		fprintf(stderr, "Could not open the file \"%s\"\n", argv[1]); 		exit(2); 	} 	if ((fd = fopen(argv[2], "wb")) == NULL) 	{ 		fprintf(stderr, "Could not creat the output file.\n", argv[2]); 		exit(3); 	}  	int ret = fread(temp, sizeof(char), 81, fs);  	printf("temp = [%s] \n", temp); 	fwrite(temp, sizeof(char), ret, fd);  	return 0; }
user-0 提问: 运算符优先级问题

回复:
user: user-1
content: 你的两条语句从结果来说是一样的  第一种是没错的，大于号的优先级是比|| 高的

user: user-1
content: 加了括号会改变判断的顺序，有些时个可以提高效率  比如：  a || b， 如果表达式a是真，那么就不会再去执行表达式b  另外你的第一条也是可以的，没看出什么错误，你编译的错误是什么

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:搜“逻辑短路”一直觉得赵老师是个大水B，但关键时候，还是能够说道点子上去

user: user-0
content: 引用 1 楼 paschen 的回复:加了括号会改变判断的顺序，有些时个可以提高效率  比如：  a || b， 如果表达式a是真，那么就不会再去执行表达式b  另外你的第一条也是可以的，没看出什么错误，你编译的错误是什么编译结果显示期望获得一个表达式

user: user-2
content: 引用 4 楼 user-4 的回复:[quote=引用 3 楼 my_live_123 的回复:] 最短路径： A || B -当A为真时，B不再测试真假;只有当A假时，继续测试B； 不用你的实例了，抽象一下： 1-A || B ||C || D 2 -（A || B） || （C || D） 区别是 第2中情况比第1中情况运算的要多 A = 1，BCD任意， 则第一种只测试A就得出真的结果 第二种要测试A || B然后测试中间||才得到结果 但是结果是一样的 不对 对于第一种情况  需要求值 第一个 || 和 第二个 || 和第三个 || 对于第二种情况 只需要求值 第一个 || 和 第二个|| 就能得出结果了[/quote]  是的，我想错了！谢谢指正

user: user-3
content: 搜“逻辑短路”

user: user-3
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-4
content: 引用 3 楼 my_live_123 的回复:最短路径： A || B -当A为真时，B不再测试真假;只有当A假时，继续测试B； 不用你的实例了，抽象一下： 1-A || B ||C || D 2 -（A || B） || （C || D） 区别是 第2中情况比第1中情况运算的要多 A = 1，BCD任意， 则第一种只测试A就得出真的结果 第二种要测试A || B然后测试中间||才得到结果 但是结果是一样的 不对 对于第一种情况  需要求值 第一个 || 和 第二个 || 和第三个 || 对于第二种情况 只需要求值 第一个 || 和 第二个|| 就能得出结果了

user: user-2
content: 最短路径： A || B -当A为真时，B不再测试真假;只有当A假时，继续测试B； 不用你的实例了，抽象一下： 1-A || B ||C || D 2 -（A || B） || （C || D） 区别是 第2中情况比第1中情况运算的要多 A = 1，BCD任意， 则第一种只测试A就得出真的结果 第二种要测试A || B然后测试中间||才得到结果 但是结果是一样的
user-0 提问: linux系统 and c\c++ 爱好者 (提示 and) 团队组建！

回复:
user: user-1
content: 支持 愿意一起学习

user: user-2
content: 坚持才是成功的基础啊

user: user-3
content: 在这儿招队友？  围观了

user: user-4
content: 引用 楼主 y_abel_sv729 的回复:本人热爱计算机，热爱技术，想做一点东西有用的东西出来。   思想在于行动，但是一个人的力量总是那么渺小，面对系统，完全不能力所能及。   在这里希望热爱linux 热爱改变， 热爱底层，热爱硬件的朋友们   不管你是菜鸟，还是老鸟，希望你的加入。   梦想开发全新系统的你，共同组建团队。   梦想开发全新系统的你？？ 既然是全新系统，那在这里为什么要提linux呢？

user: user-0
content: 《30天自制操作系统》   写得不错！ 看了一些。

user: user-0
content: 没有信念，没有追求，那就没有我的生命。 我不想不等待别人给我想要的，因为别人做出的是别人想要的。而我的，那就是我自己给的。  你就慢慢等待你的热情消失吧。

user: user-5
content: 热情是会很快消散的 少年

user: user-6
content: 《30天自制操作系统》

user: user-0
content: 有意向的发私信谢谢。

user: user-7
content: 《一个操作系统的实现》也能瞅瞅
user-0 提问: C语言如何实现类模板功能

回复:
user: user-1
content: 把具体类型带入模板手动生成实例化的类，然后再把成员函数提出来改成接收类对象指针的普通函数。或者就凑或用宏模拟模板吧。

user: user-2
content: 宏-强大的macro

user: user-3
content: cvtScaleAbs_得改成很多函数，cvtScaleAbs_SSE2里面的operator提出来改成函数，然后调用对应的就行了
user-0 提问: 怎么实现数据的可视化

回复:
user: user-0
content: 谢谢大家的热心帮助！

user: user-1
content: http://download.csdn.net/detail/zhao4zhong1/7610833

user: user-2
content: 就是想让你做个界面 比如说直方图啊， 饼图啊 找一下插件， 应该好弄，  这里是c/c++ 没有c++++的代码
user-0 提问: 调用libsvg出现问题

回复:
user: user-0
content: 找到错误，是头文件被多次包含了

user: user-0
content: 我不是写着错误在第二行吗？看清楚啊

user: user-1
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。
user-0 提问: 如何在主函数中调用结构体中声明的函数

回复:
user: user-1
content: /*  * you mean this?  */  #include<stdio.h> #include<stdlib.h>  struct csdn { 	void (*fun)(char *); };  void f(char *s) { 	puts(s); }  int main() { 	struct csdn test; 	test.fun = f; 	test.fun("hello world"); 	exit(0); }

user: user-2
content: 用函数指针，把函数指针作为结构体的一个成员，在结构体外可以call这个函数地址。C中函数指针的声明放在结构体外。如果已经在结构体中定义好了函数地址，直接call。  参考代码：   #include <stdio.h>  typedef void (*move_to)();  void fun();  struct Struct_MoveTO { 	int num; 	move_to moveto; } ;  void main() { 	struct Struct_MoveTO sm = {001, &fun}; 	sm.moveto(); }  void fun() { 	printf("hello\n"); }

user: user-3
content: 是这个意思不？---> typedef struct svg_render_engine {      svg_status_t (* move_to) (void *closure, double x, double y);//1      svg_status_t (* line_to) (void *closure, double x, double y);//2      svg_status_t (* curve_to) (void *closure,         double x1, double y1,         double x2, double y2,         double x3, double y3);//3  } svg_render_engine_t;    svg_status_t move_to (void * closure, double x, double y)  {      /* …… */  }   svg_status_t line_to (void * closure, double x, double y)  {      /* …… */  }   svg_status_t curve_to (void * closure,         double x1, double y1,         double x2, double y2,         double x3, double y3) {     /* …… */ }  int main (void) {     svg_render_engine_t sre = {move_to, line_to, curve_to};     sre.move_to (/* …… */);     sre.line_to (/* …… */);     sre.curve_to (/* …… */); }

user: user-4
content: 先赋值给有效的函数地址，然后就直接调用

user: user-5
content: svg_status_t user_move_to(void *closure, double x, double y); // declaration only  svg_render_engine_t e; e.move_to = user_move_to; // assignment e.move_to(...); // call

user: user-6
content: 可以定义一个形参和返回值一样的函数，然后把结构体函数指针指向它

user: user-0
content: 我测试了不行

user: user-7
content: svg_render_engine：：svg_render_engine_t.  svg_status_t (* move_to)（）; svg_render_engine：：svg_render_engine_t.   svg_status_t (* line_to)（）; svg_render_engine：：svg_render_engine_t.   svg_status_t (* curve_to)（）; 是不是这样的。

user: user-0
content: 额，我标题写的有问题，我想问的是怎么在.C文件中来定义这3个函数。

user: user-5
content: svg_render_engine_t e1, *e2; svg_status_t r; void *closure; double x[3], y[3]; r = e1.move_to(closure, x[0], y[0]); r = e2->line_to(closure, x[0], y[0]); r = e2->curve_to(closure, x[0], y[0], x[1], y[1], x[2], y[2]);

user: user-8
content: 先创建一个结构体变量，然后通过该变量调用……

user: user-9
content: 取结构体对象的成员函数指针，调用 参考函数指针的调用
user-0 提问: 请教Movewindow是如何产生WM_SIZE消息的？

回复:
user: user-1
content: MoveWindow The MoveWindow function changes the position and dimensions of the specified window. For a top-level window, the position and dimensions are relative to the upper-left corner of the screen. For a child window, they are relative to the upper-left corner of the parent window's client area.   BOOL MoveWindow(   HWND hWnd,      // handle to window   int X,          // horizontal position   int Y,          // vertical position   int nWidth,     // width   int nHeight,    // height   BOOL bRepaint   // repaint flag );   Parameters hWnd  Handle to the window.  X  Specifies the new position of the left side of the window.  Y  Specifies the new position of the top of the window.  nWidth  Specifies the new width of the window.  nHeight  Specifies the new height of the window.  bRepaint  Specifies whether the window is to be repainted. If this parameter is TRUE, the window receives aWM_PAINT message. If the parameter is FALSE, no repainting of any kind occurs. This applies to the client area, the nonclient area (including the title bar and scroll bars), and any part of the parent window uncovered as a result of moving a child window. If this parameter is FALSE, the application must explicitly invalidate or redraw any parts of the window and parent window that need redrawing.  Return Values If the function succeeds, the return value is nonzero.  If the function fails, the return value is zero. To get extended error information, callGetLastError.  Remarks If the bRepaint parameter is TRUE, the system sends the WM_PAINT message to the window procedure immediately after moving the window (that is, the MoveWindow function calls the UpdateWindow function). If bRepaint is FALSE, the system places the WM_PAINT message in the message queue associated with the window. The message loop dispatches the WM_PAINT message only after dispatching all other messages in the queue.   MoveWindow sends WM_WINDOWPOSCHANGING, WM_WINDOWPOSCHANGED, WM_MOVE, WM_SIZE, and WM_NCCALCSIZE messages to the window.   Windows CE: The bRepaint parameter is ignored and is assumed to be FALSE.   QuickInfo   Windows NT: Requires version 3.1 or later.   Windows: Requires Windows 95 or later.   Windows CE: Requires version 1.0 or later.   Header: Declared in winuser.h.   Import Library: Use user32.lib.  See Also Windows Overview, Window Functions, SetWindowPos,UpdateWindow, WM_GETMINMAXINFO,WM_PAINT

user: user-1
content: 为什么不单步到MoveWindow里面亲自查看一番呢？
user-0 提问: #define FIELD_SIZE(t,f)（sizeof(((t*)0)->f)) 为什么没有错误

回复:
user: user-1
content: 想完全彻底弄懂sizeof，请参考gcc源代码中实现sizeof函数部分。

user: user-2
content: 怎么像内核的代码   84 #define container_of(ptr, type, member) ({                      \  85         const typeof( ((type *)0)->member ) *__mptr = (ptr);    \  86         (type *)( (char *)__mptr - offsetof(type,member) );})  自己搜container_of宏的解析 其实这个工作是编译器的做的

user: user-3
content: sizeof是编译时确定，如果连编译器都无法确定语句的类型，又怎么生成执行代码呢？
user-0 提问:  find  命令的奇怪问题

回复:
user: user-1
content: 提醒诸位：find是开源的。

user: user-0
content: 引用 6 楼 from2015 的回复:[quote=引用 4 楼 caddor9100 的回复:] [quote=引用 3 楼 from2015 的回复:] find跟的不是正则表达式，是通配符——好像两者实质也差不多。  查找dir目录下以句点为结尾的文件，Linux下应该这样可以的  find dir -name "*."  1.   find -name '.'  find -name '\.'  有啥区别？  2.  为什么 find -name 后，可以加引号  而ls 则不行？ [/quote]  俩命令就是这么用的，习惯就好了，这个基本是不变的了。  linux上，find命令的参数先是要查找的目录，再是查找参数，最后是查找匹配串。  find -name '\.' 这个写法不对吧？你在什么上面用？ [/quote]   http://bbs.csdn.net/topics/390995329 高手帮忙看看这个帖子

user: user-2
content: find 命令确实是可以用正则表达式匹配的，但是限制是比sed ，grep命令大的多的  通过man可以看到find支持的正则主要有 ？ * .  这样极少数的匹配，所以你用的find -name '.$' 这样的命令，和你要表达的意思相差是非常远的，因为这条命令表示搜索 文件名是绝对 .$ ，肯定是搜索不到的。 1. find命令不支持$匹配，也没有^ 这样的匹配， 因为^ $ 分别代表行首和行尾，有时也表示文件开头和末尾，多用在文本匹配中，但是find是搜索文件而不是文本  2. 单引号和双引号的使用，这里使用单引号，就将字符串的扩展语义都去除了，只是看做单纯的字符串来处理，所以即使使用了正确的正则，在单引号里都是不会进行扩展的。  所以你想找个以点结尾的文件，这样写就可以了： find -name "*\."

user: user-0
content: 引用 11 楼 lee244868149 的回复:find 命令确实是可以用正则表达式匹配的，但是限制是比sed ，grep命令大的多的  通过man可以看到find支持的正则主要有 ？ * .  这样极少数的匹配，所以你用的find -name '.$' 这样的命令，和你要表达的意思相差是非常远的，因为这条命令表示搜索 文件名是绝对 .$ ，肯定是搜索不到的。 1. find命令不支持$匹配，也没有^ 这样的匹配， 因为^ $ 分别代表行首和行尾，有时也表示文件开头和末尾，多用在文本匹配中，但是find是搜索文件而不是文本  2. 单引号和双引号的使用，这里使用单引号，就将字符串的扩展语义都去除了，只是看做单纯的字符串来处理，所以即使使用了正确的正则，在单引号里都是不会进行扩展的。  所以你想找个以点结尾的文件，这样写就可以了： find -name "*\."  多谢，不过纠正你的一个错误  find支持的. 和正则中的.不一样，正则中的. 是代表任意一个字符。  find中的. 是指一个ansii码，没有上面个的意义

user: user-0
content: 引用 6 楼 from2015 的回复:[quote=引用 4 楼 caddor9100 的回复:] [quote=引用 3 楼 from2015 的回复:] find跟的不是正则表达式，是通配符——好像两者实质也差不多。  查找dir目录下以句点为结尾的文件，Linux下应该这样可以的  find dir -name "*."  1.   find -name '.'  find -name '\.'  有啥区别？  2.  为什么 find -name 后，可以加引号  而ls 则不行？ [/quote]  俩命令就是这么用的，习惯就好了，这个基本是不变的了。  linux上，find命令的参数先是要查找的目录，再是查找参数，最后是查找匹配串。  find -name '\.' 这个写法不对吧？你在什么上面用？ [/quote]  为啥不对？  转义符号

user: user-3
content: 引用 4 楼 caddor9100 的回复:[quote=引用 3 楼 from2015 的回复:] find跟的不是正则表达式，是通配符——好像两者实质也差不多。  查找dir目录下以句点为结尾的文件，Linux下应该这样可以的  find dir -name "*."  1.   find -name '.'  find -name '\.'  有啥区别？  2.  为什么 find -name 后，可以加引号  而ls 则不行？ [/quote]  俩命令就是这么用的，习惯就好了，这个基本是不变的了。  linux上，find命令的参数先是要查找的目录，再是查找参数，最后是查找匹配串。  find -name '\.' 这个写法不对吧？你在什么上面用？

user: user-4
content: 遇到不会使用的情况，建议看看man手册或help文档，搞懂一次，基本上你就会用所有命令了

user: user-0
content: 引用 3 楼 from2015 的回复:find跟的不是正则表达式，是通配符——好像两者实质也差不多。  查找dir目录下以句点为结尾的文件，Linux下应该这样可以的  find dir -name "*."  1.   find -name '.'  find -name '\.'  有啥区别？  2.  为什么 find -name 后，可以加引号  而ls 则不行？

user: user-3
content: find跟的不是正则表达式，是通配符——好像两者实质也差不多。  查找dir目录下以句点为结尾的文件，Linux下应该这样可以的  find dir -name "*."

user: user-0
content: 引用 1 楼 a30037338 的回复:文件名用通配符， 没见过用正则式的, 文件名后跟上路径 find -name "*.txt" /  *不就是正则？

user: user-5
content: 文件名用通配符， 没见过用正则式的, 文件名后跟上路径 find -name "*.txt" /

user: user-6
content: 文件搜索只有.和*吧- -

user: user-0
content: 引用 8 楼 my_live_123 的回复:用"*."试试 man find  看7 L

user: user-7
content: 用"*."试试 man find
user-0 提问: pkcs7 生成带签名的数字信封

回复:
user: user-1
content: 只能说明： 要么楼主搜例子的代码的功力不够 要么OpenSSL官方的例子代码典型性差  之所以我会这么光说不练，是因为我也没实际弄过。

user: user-0
content: 不太好找，我想要个带签名的，不知道能不能提供代码参考一下。

user: user-1
content: openssl没自带相关例子代码吗？
user-0 提问: POJ3468树状数组TLE

回复:
user: user-0
content: 置顶，求大神解释

user: user-0
content: 引用 1 楼 user-1 的回复:int k=i;     for(;k<=j;k++){ ……这能不TLE么 刚写树状数组，不太明白，求可以详细说明下吗？

user: user-1
content: int k=i;     for(;k<=j;k++){ ……这能不TLE么
user-0 提问: win32窗口程序

回复:
user: user-1
content: 应该把保存信息的代码放在主窗口得到弹出窗口返回确认以后。 甚至应该弹出窗口返回确认发自定义命令消息给主窗口自己，主窗口收到该自定义命令消息后保存信息。

user: user-2
content: 对话框不是主窗口的子窗口  lz可以在CreatDialog后，使用其返回的hDlg,使用SetProp将主窗口的的hWnd设置给hDlg 在需要对话框中，需要主窗口的位置，使用GetProp函数取出主窗口的hWnd
user-0 提问: C语言编程思维

回复:
user: user-1
content: 写着写着你就会了！

user: user-2
content: 看书+思考+实践，仅此而已

user: user-3
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-4
content: 多做养成的。 无从下手，做的少了，仅此而已。

user: user-5
content: 一般都会有demo和注释

user: user-6
content: 一步步抄下来，抄着抄着好像能理解一些了，这时候去看教程就好多了

user: user-7
content: 要开发真正的项目, 写例子不行
user-0 提问: 奇怪的C错误

回复:
user: user-1
content: 引用 11 楼 zxh707wk 的回复:引用 5 楼 mayo2012 的回复:不要把临时变量作为函数的返回值，尤其是指针。临时指针，一旦被调用的函数结束，该临时指针所指向的内存就会被收回。这个时候你再去访问这快内存，得到的值将是不确定的。+1  我看不一定。

user: user-2
content: static

user: user-3
content: 只返回了一个局部指针，返回后，分配的栈空间已经被释放，所以得出的结果是错误的。严重的话，还会崩溃。

user: user-1
content: 这个伙计压根就不知道对象的生存期和存储期是什么。

user: user-4
content: 首先我说下楼主的代码：NODE2 *node最好给个null，NODE2 node[maxsize]={0};习惯。。  然后分析： NODE2 node[maxsize]; 这一句表示栈空间开辟一个maxsize大小的NODE2， 下面，你用了一个for循环来对栈空间赋值。 所以第一行输出正确。  再看第二行， 对于栈空间来说，在函数的退出时，内存被释放，但是释放！=销毁。。 也就说你前面对内存的赋值数据依旧存在，只是被系统的空闲空间链表记录了 所以你第二行是指定内存输出，所以依旧是数据。  第三行， 数据依在，但是是闲置空间。所以又有栈的开辟时，前面空间可能会被使用。 所以导致第三行部分数据不是你想的  char* run() { char buffer[2] = {0}; buffer[0]='1'; buffer[1]='2'; return buffer; } //你可以用for循环一个一个字符打印和直接输出字符串打印比较

user: user-5
content: 不要把临时变量作为函数的返回值，尤其是指针。临时指针，一旦被调用的函数结束，该临时指针所指向的内存就会被收回。这个时候你再去访问这快内存，得到的值将是不确定的。

user: user-6
content: #include<stdio.h> struct NODE2{ 	int x; 	int y; }; #define maxsize 20  struct NODE2 *readNode(){ 	static NODE2 node[maxsize]; 	int j; 	for(j=0;j<4;j++){ 			node[j].x = 1; 			node[j].y = 1; 	} 	printf("\n%d %d %d %d %d %d %d %d",node[0].x,node[0].y,node[1].x,node[1].y,node[2].x,node[2].y,node[3].x,node[3].y); 	return node; } void main(){ 	NODE2 *node; 	node = readNode(); 	printf("\nfirst:\n%d %d %d %d %d %d %d %d",node[0].x,node[0].y,node[1].x,node[1].y,node[2].x,node[2].y,node[3].x,node[3].y); 	printf("\nsecond wrong?\n%d %d %d %d %d %d %d %d",node[0].x,node[0].y,node[1].x,node[1].y,node[2].x,node[2].y,node[3].x,node[3].y); 	printf("\n"); }

user: user-7
content: 引用 5 楼 mayo2012 的回复:不要把临时变量作为函数的返回值，尤其是指针。临时指针，一旦被调用的函数结束，该临时指针所指向的内存就会被收回。这个时候你再去访问这快内存，得到的值将是不确定的。+1

user: user-8

user: user-9
content: NODE2 node[maxsize];  丢到函数体外面

user: user-10
content: static NODE2 node[maxsize];

user: user-8
content: 不要用函数返回赋值，直接函数使用指针传参就行了

user: user-0
content: 引用 1 楼 user-11 的回复:struct NODE2 *readNode(){     NODE2 node[maxsize];     int j;     for(j=0;j<4;j++){             node[j].x = 1;             node[j].y = 1;     }     printf("\n%d %d %d %d %d %d %d %d",node[0].x,node[0].y,node[1].x,node[1].y,node[2].x,node[2].y,node[3].x,node[3].y);     return node;  // 这里返回了栈上的东西，多半是错的。 } 以前用JAVA习惯了，以为这个是可以的，谁知道C的临时变量的和JAVA临时变量声明周期不一样，所以才弄错了。

user: user-11
content: struct NODE2 *readNode(){     NODE2 node[maxsize];     int j;     for(j=0;j<4;j++){             node[j].x = 1;             node[j].y = 1;     }     printf("\n%d %d %d %d %d %d %d %d",node[0].x,node[0].y,node[1].x,node[1].y,node[2].x,node[2].y,node[3].x,node[3].y);     return node;  // 这里返回了栈上的东西，多半是错的。 }
user-0 提问: 关于指针类型的疑惑

回复:
user: user-1
content: 指针的位数与机器支持的最大寻址范围有关，比如32位的操作系统下指针的位数为32位，64位的操作系统下指针的位数为64位，当然，在64位的系统下也可以写32位的兼容性程序。至于指针为什么需要类型，你想下，如果指针都是void的话，你指针多了，代码长了，能分辨哪个指针指向的是多少个字节空间吗？有可能就会出现越界访问，程序崩溃！

user: user-2
content: 你知道寻址空间的大小么

user: user-0
content: 你们说的都不对，不过我已经想到为什么了。嘻嘻

user: user-3
content: 因为指针指向的对象的地址是四个或者八个字节大小，为了保存这个地址值，不就需要具有四个或者八个字节的变量了

user: user-4
content: 因为指针即地址，16机制32位（64位），每8位一个字节；

user: user-5
content: 内存决定的啊 指针就是内存的门牌号码
user-0 提问: 链表中的p和q是什么的缩写啊

回复:
user: user-1
content: 这个问题问得好。。。 head,p,q 都是用来保存4字节的地址。 head是链表首地址，如果head作为函数参数传入，比如删除结点函数，这个地址会被push到栈中，子函数就从这个栈地址去取到链表首地址。 p,q 一般用来存放结点地址，编译器通常会把他们在内存中放到一起。无论是创建链表，删除链表结点，还是插入链表结点，CPU都需要记住当前和之前处理的结点地址，p就用来保存当前正在处理的结点地址，q用来保存之前处理过的结点地址。比如创建链表的时候，新建一个结点，得到新结点的地址，这个地址就保存在p中，这个地址需要放到之前处理过的结点的next域中，而q中就保存了之前刚处理过的结点的地址，之后q中的地址就过时了，于是用p中的地址来更新，p,q保存的地址就这样随着循环跳转不断变化，直到最后一个结点。 或许你会问为什么一定要用p，q来保存之前和当前结点的地址，用其他地址不行吗？当然可以，但前提是没有循环。计算机的强大就在于利用循环来实现自动化。要实现循环就必须保证每次循环都跳转到相同的偏移地址，而p和q就保证了每次循环都有相同的偏移地址。

user: user-2
content: 哈哈，4楼正解

user: user-3
content: p= pointer，26字母序p的下一个字母是q，以此继续，以后你或许还会看到r,s用作指针 同理 索引标 i=index，下一个字母j,然后继续k,这三个常见 还有变量n = number，下一个m,以及初学程序最常见的a,b,c,d,e 数学中最常用的v,w,x,y,z 懂了不？这就叫传统

user: user-4
content: 想了下，估计指针 pointer 的首字母是 p，所以平时的指针变量缩写为 p q 等； 就像因为整型 int，首字母 i，平时的整型变量都 i j k 什么的。

user: user-5
content: p: pointer q: next character of p,another pointer

user: user-4
content: 不是就符合规则的变量标识吗
user-0 提问: 本人刚使用vs2010写c程序，循环判断条件有EOF，不过通过控制台输出的时候，必须使用两个Ctrl+Z才能终止？

回复:
user: user-1
content: 先enter 在Ctrl+Z  要不然windows不认  1 2 3 EOF 不行  1 2 3 EOF 可以

user: user-2
content: 我这边一个就可以了
user-0 提问: 请指教！float 数据类型

回复:
user: user-1
content: 这个是float数据存储存在精度丢失问题，你可以上网查下float数据精度丢失就知道了。

user: user-2
content: 这应该是与浮点数在计算机中的存储方式有关， 数据都是以二进制方式存储的，楼主可以参考一下——http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html

user: user-3
content: 说明内存中存储的值就是“100.099998” printf("b=%f\n", b ); 默认输出小数点后6位 printf("b=%0.1f\n", b );  试试

user: user-0
content: 只知道，float类型是7位有效数字的显然 100.1 并没有超过 7位，为什么打印出来的结果是100.09998 ？  急求解释！
user-0 提问: error C2053: 'XXX' : wide string mismatch问题

回复:
user: user-1
content: TCHAR szWindowClass []=_T("窗口示例"); TCHAR szTitle []=_T("My Windows");

user: user-2
content: 别用L"My Window", 用 _T宏应该可以了

user: user-3
content: TCHAR 是个宏，你没有打开宽字符编译，所以它被解释成了char，而不是wchar  L则告诉编译器，这是一个wchar，  也就是说，你把wchar赋给了char，所以你的编译器报错了。

user: user-4
content: 宽字符串被分配给了一个不兼容的类型 https://msdn.microsoft.com/zh-cn/library/988h0zdd%28v=vs.90%29.aspx

user: user-0
content: #include<windows.h> #include<tchar.h>  LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);  int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,	LPSTR lpCmdLine,int nCmdShow) { 	WNDCLASSEX wcex; 	HWND hWnd; 	MSG msg; 	TCHAR szWindowClass []=L"窗口示例"; 	TCHAR szTitle []=L"My Windows";    这样的
user-0 提问: 使用omp优化之后，运行时间却更长了，代码很简单，求解答

回复:
user: user-1
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！

user: user-2
content: 我的看法是：不是所有的东西都能优化。
user-0 提问: 昨天在微软官网下载了visual studio2013，编了个程序出错了。。。

回复:
user: user-1
content: 哥们，你这个编译能过？？？？ 改成下面的代码就好了。 “5.0/9”这个是没错的。因为你前面是5.0 #include <stdio.h> int main() { float s; float a; printf("请输入需要转换的华氏温度："); scanf("%f", &a); s = (5.0 / 9)*(a - 32); printf("转换后的摄氏温度为：%f\n", s); return 0; }

user: user-2
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-3
content: #include <stdio.h> int main(){ 	float s; 	float a; 	printf("请输入需要转换的华氏温度："); 	scanf_s("%f", &a); 	s = (5.0 / 9)*(a - 32); 	printf("转换后的摄氏温度为：%f\n", s); 	return 0; }  把printf的&号去掉就行了。

user: user-4
content: 两个错误  1. printf里不应取地址 2. 要将float转成double，让printf打印

user: user-5
content: printf("转换后的摄氏温度为：%f\n", &s); printf的时候就不用取地址符号了 printf("转换后的摄氏温度为：%f\n", s);

user: user-0
content: 谢谢各位了！
user-0 提问: 这事肿么个情况

回复:
user: user-1
content: 输出的最大值，printf的提示信息有误！修改下提示信息即可

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

user: user-3
content: 同楼上~~楼主在第二个printf中的汉字解释跟程序不匹配，改成：  printf("两个数中的较大的一个为：%d\n",max);

user: user-4
content: 你的函数find功能是找出两个数较大的一个，但是你输出的文字却写成两数之和了而已。
user-0 提问: 帮看下这个什么意思。。。。。

回复:
user: user-1
content: 宏定义，上面是注释说明吧

user: user-2
content: VS IDE中，在不明白的符号上点鼠标右键，选转到定义。

user: user-3
content: 宏啊。就是碰到 LLONG_MIN  就文本替换成 -__LONG_LONG_MAX__-1LL

user: user-4
content: 宏展开，什么问题
user-0 提问: 如何解决C 语言执行结果窗口隐藏

回复:
user: user-1
content: 引用 1 楼 user-6 的回复:main函数上一行 加#pragma comment(linker,"/subsystem:windows /entry:mainCRTStartup")  学习了~

user: user-2
content: 引用 4 楼 a30037338 的回复:[quote=引用 1 楼 user-6 的回复:] main函数上一行 加#pragma comment(linker,"/subsystem:windows /entry:mainCRTStartup") +1 ， vs中把_tmain 改成main[/quote]+2

user: user-3
content: 引用 1 楼 user-6 的回复:main函数上一行 加#pragma comment(linker,"/subsystem:windows /entry:mainCRTStartup") +1 ， vs中把_tmain 改成main

user: user-4
content: 在main开始的地方 //隐藏窗口 	HWND hwnd = GetConsoleWindow();  	if (hwnd) 	{ 		// 让控件台程序最小化。 		ShowWindow(hwnd, SW_HIDE); 	}

user: user-5
content: 你别用标准输入/输出。。

user: user-6
content: main函数上一行 加#pragma comment(linker,"/subsystem:windows /entry:mainCRTStartup")