Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C 日期转换

回复:
user: user-1
content: //如何根据周，计算具体的日期？比如20132002，其中前4位2013是年份，后面的20是第20个周的意思，最后2为是一周的第几天之意。请问如何得出是2013年的哪一天？ #include <stdio.h> #include <time.h> void YYYYWWWD2YYYY_MM_DD(char *s) {     int y,w,d,d1;     time_t t;     struct tm st;     struct tm *ts;      sscanf(s,"%4d%2d%2d",&y,&w,&d);     y-=1900;w--;d--;     st.tm_year=y;     st.tm_mon=0;     st.tm_mday=1;     st.tm_hour=0;     st.tm_min=0;     st.tm_sec=0;     t=mktime(&st);     ts=localtime(&t);     d1=ts->tm_wday;if (d1==0) d1=7;d1--;     t+=(w*7+d-d1)*24*60*60;     ts=localtime(&t);     printf("%4d-%02d-%02d\n",ts->tm_year+1900,ts->tm_mon+1,ts->tm_mday); } int main() {     YYYYWWWD2YYYY_MM_DD("20130101");     YYYYWWWD2YYYY_MM_DD("20130102");     YYYYWWWD2YYYY_MM_DD("20130201");     YYYYWWWD2YYYY_MM_DD("20132002");     YYYYWWWD2YYYY_MM_DD("20135302");     YYYYWWWD2YYYY_MM_DD("20135303");     return 0; } //2012-12-31 //2013-01-01 //2013-01-07 //2013-05-14 //2013-12-31 //2014-01-01 //

user: user-1
content: //如何根据周，计算具体的日期？比如20132002，其中前4位2013是年份，后面的20是第20个周的意思，最后2为是一周的第几天之意。请问如何得出是2013年的哪一天？ #include <stdio.h> #include <time.h> void YYYYWWWD2YYYY_MM_DD(char *s) {     int y,w,d,d1;     time_t t;     struct tm st;     struct tm *ts;      sscanf(s,"%4d%2d%2d",&y,&w,&d);     y-=1900;w--;d--;     st.tm_year=y;     st.tm_mon=0;     st.tm_mday=1;     st.tm_hour=0;     st.tm_min=0;     st.tm_sec=0;     t=mktime(&st);     ts=localtime(&t);     d1=ts->tm_wday;if (d1==0) d1=7;d1--;     t+=(w*7+d-d1)*24*60*60;     ts=localtime(&t);     printf("%4d-%02d-%02d\n",ts->tm_year+1900,ts->tm_mon+1,ts->tm_mday); } int main() {     YYYYWWWD2YYYY_MM_DD("20130102");     YYYYWWWD2YYYY_MM_DD("20130201");     YYYYWWWD2YYYY_MM_DD("20132002");     YYYYWWWD2YYYY_MM_DD("20135302");     return 0; } //2013-01-01 //2013-01-07 //2013-05-14 //2013-12-31 //

user: user-2
content: 参考http://linux.chinaunix.net/techdoc/develop/2007/06/03/959192.shtml  引用 楼主 s373785346 的回复:如何根据周，计算具体的日期？比如20132002，其中前4位2013是年份，后面的20是第20个周的意思，最后2为是一周的第几天之意。请问如何得出是2013年的哪一天？
user-0 提问: 头文件引用的讨论

回复:
user: user-1
content: 引用 8 楼 sec_hus 的回复:问题解决，这种情况，不需要在B.h里重新定义或者引入A.h。 想问一下是如何解决的呢？

user: user-0
content: 问题解决，这种情况，不需要在B.h里重新定义或者引入A.h。

user: user-0
content: 引用 5 楼 angel_su 的回复:简单的方式就把需要的那些A类型写入B.h，然后使用跟A.h一模一样的保护头包住这部分，也就是B在建库的时候，B.c先包含A.h，那么在B.h有关A的部分，因为条判断件不成立被略过，就不会重复定义；而用户使用B时不知有A，条件成立引入那些A类型...A.h的内容很多，包括A库中的功能函数，而如果在B.h里也用相同的保护头的话，A.h里的那些功能函数也会被过滤掉了。

user: user-0
content: 引用 4 楼 max_min_ 的回复:为什么不直接让 B.h 引用 A.h ，然后B的源文件直接引用B.h呢！因为B.h要跟接口一起提交给别人用，而A.h不能提交出去。

user: user-2
content: 简单的方式就把需要的那些A类型写入B.h，然后使用跟A.h一模一样的保护头包住这部分，也就是B在建库的时候，B.c先包含A.h，那么在B.h有关A的部分，因为条判断件不成立被略过，就不会重复定义；而用户使用B时不知有A，条件成立引入那些A类型...

user: user-3
content: 为什么不直接让 B.h 引用 A.h ，然后B的源文件直接引用B.h呢！

user: user-4
content: 头文件没加#ifdef保护吗？

user: user-5
content: "在B.h中需要用到A.h中的一些类型定义"，你什么都想用，脑子不会短路吗？ 把A.h里的类型定义剥离出来共享吧！

user: user-6
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。  重命名 使用命名空间
user-0 提问: malloc分配内存的问题。

回复:
user: user-1
content: malloc的实现，它会给的偏大！不过一定是整页数！

user: user-2
content: 引用 楼主 u012373530 的回复:我想分配20个内存页，代码如下： #include<stdio.h> #include<stdlib.h> int main() {     printf("pid=%d\n",getpid());     char* p=malloc(20*4096);     while(1); } 理论上系统应该会给我33个内存页。但是我查看发现堆区占用的内存是： 0994e000-09982000 也就是给了我52个内存页了。、 这是为什么？  还有个问题就是，假如我： char* p=malloc(20*4096); char* p1=malloc(20*4096); 系统应该是给了66个内存页吧 然后free(p1)，那么堆区还会占用多少内存？ 你还能确定人家分配多少啊？如5楼所说，有个策略问题，申请size大小，分配的可能大于size的，但是具体多少只有操作系统知道他能给多少！

user: user-0
content: 引用 8 楼 my_live_123 的回复:malloc的实现，它会给的偏大！不过一定是整页数！ malloc实现的都是33的倍数页吧  而brk和sbrk才是以整页数。

user: user-3
content: 不用4096，用一个计算内存页大小的函数代替试试，，（我还不懂什么是内存页，回答有误望体谅）

user: user-4
content: 堆区大小和你申请多少内存，有何关系？？？？？ 这是内存管理，策略问题，和你申请的多少，关系不大。 最多是你申请了，太大内存，堆内存太少，不够用而已。 其他没有太大关系。

user: user-0
content: 内存页是4096字节。你看，执行malloc(20*4096)后堆区照样分配了53页，真是奇怪。  引用 1 楼 focuslight 的回复:内存页设得太小，内存页会很多

user: user-5
content: VMMap 是进程虚拟和物理内存分析实用工具。http://technet.microsoft.com/zh-cn/sysinternals/dd535533

user: user-6
content: getpagesize获取内存页大小

user: user-7
content: 内存页设得太小，内存页会很多
user-0 提问: 新人求教一个简单的问题

回复:
user: user-1
content: 啥意思？ 是main函数吧？ man函数没用过，原型举例看看

user: user-2
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-3
content: 引用 2 楼 user-5 的回复:应该是main函数吧..只不过多了参数而已。标准C/C++只承认两种写法：int main(int argc,char *argv[]){} int main();//或者int main(void)argc是参数的数量，argv是参数的值，比如假设a.cpp编译后的程序为a，linux下你可以在命令行中这样写：./a -a -b那么此时main接收到的参数就是-a -b两个，argv[0]="-a",argv[1]="-b",而argc则是参数的个数，所以argc=2 你经常看到一些命令行的命令就是这样编写的。  如果是man函数 我还真不知道你在说什么，建议贴代码来看看 楼上说的有问题啊，argv[0]=函数的路径名，你所传递参数的地址是从argv[1]开始的

user: user-4
content: int main(void) int main() main() int main(int argc,char *argv[]){  } 因为C语言是写linux的 Unix的操作系统的，所以当时有一个东西叫做 交换式Shell 就相当于windows中的dos命令窗口  为了使命令的参数可以在交换式shell传入程序进行分析 所以main 函数需要这些参数 进行解析命令  毕竟程序越灵活越好 这样 有引出另一个问题 交互式shell解析器 它到底是怎么出来的貌似有个叫 busy_box 它把别人写的效率高的特殊功能的函数 集合到了一个程序  之后通过shell解析器 进行创建进程的方式 进行执行那些命令 所以就遗留下这个命令行参数的问题，正如main函数就是一部手机 你打电话的号码就是参数 难不成它只能给一个人打电话。 还有一个问题 就是这个好处是可以进行父进程 创建子进程的继承问题 有很大的作用 。

user: user-5
content: 应该是main函数吧..只不过多了参数而已。标准C/C++只承认两种写法：int main(int argc,char *argv[]){} int main();//或者int main(void)argc是参数的数量，argv是参数的值，比如假设a.cpp编译后的程序为a，linux下你可以在命令行中这样写：./a -a -b那么此时main接收到的参数就是-a -b两个，argv[0]="-a",argv[1]="-b",而argc则是参数的个数，所以argc=2 你经常看到一些命令行的命令就是这样编写的。  如果是man函数 我还真不知道你在说什么，建议贴代码来看看
user-0 提问: 请教个long 型的乘法在32位下计算结果比预期少1的问题

回复:
user: user-0
content: 谢谢大家，结贴了。 谢谢所有回帖讨论的朋友。  angel_su给指明了方向。  我自己尝试了一下，确实可以。 按下面的编译选项之后结果也正确了，虽然还是不是很明白各个指令集，CPU选项的选择方式和用途。 gcc -msse2 tt_1.c  查到的资料如下，感兴趣的同学可以研究研究，有心得的朋友记得指点指点我哦。 http://www.acejoy.com/thread-4438-1-1.html http://www.cnblogs.com/zyl910/archive/2012/10/22/simdsumfloat.html http://www.cnblogs.com/zyl910/archive/2012/04/23/simd_var_name.html

user: user-1
content: 64位int,long 也许是64位的

user: user-0
content: 顶起来， 顶起来

user: user-1
content: 浮点数计算，会有误差，但是什么情况下，误差多少和运算的数据有关，不是任何时候都是一样的。 误差，不是确定的，只能大概估计，何种情况，误差范围是多少，而不是每次计算的误差都一样。

user: user-2
content: -march=CPU[,+EXTENSION...]     generate code for CPU and EXTENSION, CPU is one of:      i8086, i186, i286, i386, i486, pentium, pentiumpro,      pentiumii, pentiumiii, pentium4, prescott, nocona,      core, core2, corei7, l1om, k6, k6_2, athlon, k8,      amdfam10, generic32, generic64     EXTENSION is combination of:      8087, 287, 387, no87, mmx, nommx, sse, sse2, sse3,      ssse3, sse4.1, sse4.2, sse4, nosse, avx, noavx,      vmx, smx, xsave, movbe, ept, aes, pclmul, fma,      clflush, syscall, rdtscp, 3dnow, 3dnowa, sse4a,      svme, abm, padlock, fma4

user: user-2
content: 引用 11 楼 angel_su 的回复:64位默认使用sse指令，32位不是，要加参数-march=pentium4(或更高)，结果就一样。 高手啊！

user: user-3
content: 64位默认使用sse指令，32位不是，要加参数-march=pentium4(或更高)，结果就一样。

user: user-0
content: 引用 1 楼 u011980246 的回复:不知道   应该是类型转换的问题，，，，或者浮点数精度问题，，它可能只是近似值，例如3749.99999， printf("--%lf\n",  (double)b * 0.075)；  这个是正确的 谢谢回答，我觉得也是类型准换和精度的原因，因为在64位下面就能出正确结果。 继续等待高人释疑~

user: user-0
content: 引用 2 楼 worldy 的回复:估计是按float类型进行转换计算  谢谢回答，开始也是这么以为的，但是下面这样也不行：     long b = 50000;     printf("--%ld\n", b);     long d = ((double)b) * ((double)0.075);     printf("--%ld\n", d);

user: user-4
content: 估计是按float类型进行转换计算

user: user-5
content: 不知道   应该是类型转换的问题，，，，或者浮点数精度问题，，它可能只是近似值，例如3749.99999， printf("--%lf\n",  (double)b * 0.075)；  这个是正确的

user: user-0
content: 可是为什么下面两种修改下能出正确结果呢  1） 吧程序放到64位的linux下 2） 把计算结果先付给一个double， 再把double值再付给一个long， 这个Long值也是正确的。

user: user-2
content: 用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10) 同理，用二进制小数也不能精确表示某些10进制小数。

user: user-6
content: 浮点数计算会有误差，但是如果是这样修改后也应该有误差啊？搞不清为什么，有知道gcc编译出来的怎么看汇编么？看下汇编大概就知道问题在哪里了 vs下测试没问题。。。。

user: user-0
content: 别沉了了。 高手现现身给解答解答吧~~~
user-0 提问: C 语言中一个诡异的现象

回复:
user: user-1
content: VC6.0没有见你的现象，运行正常！

user: user-2
content: 浮点数是无法精确的表示299.90 所以*100后是29989也没啥奇怪的。

user: user-3
content: 浮点数误差而已。  引用 楼主 RJGCSS 的回复:#include <stdio.h>  int main() { 	double t; 	scanf("%lf",&t); 	printf("%d\n",(int)(t * 100)); 	return 0; }  如果输入299.90，输出竟然是29989？ 这是如此哪般？

user: user-4
content: 可以去读下IEEE浮点规格，呵呵。

user: user-5
content: 我算了一下，如果用16Bit去盛放一个数的小数部分，则0.9这个10进制数的2进制表示是： 0.899693896484375（用百度搜索的计算器算的），肯定是存在误差的

user: user-6
content: 浮点数是有误差的。浮点数的等价判断，和整数的等价判断不是一回事

user: user-7
content: #include <stdio.h> int main() {     double t;     scanf("%lf",&t);     printf("%.0lf\n",t * 100.0);     printf("%d\n",(int)(t * 100.0+0.5));     return 0; }

user: user-7
content: 用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10) 同理，用二进制小数也不能精确表示某些10进制小数。

user: user-8
content: 引用 5 楼 akirya 的回复:浮点数是无法精确的表示299.90 所以*100后是29989也没啥奇怪的。+++

user: user-9
content: 有什么诡异的？ 只是我们看到有点诡异而已！机器中小数部分也是二进制存储的，所以有误差是应该的

user: user-10
content: 浮点精度以及整数运算 比如299.90可能只能表示成299.89999，乘以100得29989.999，取整得29989
user-0 提问: 新手提问：想把一个字符数组里的东西倒序的放进另一个数组，为啥错了呢

回复:
user: user-0
content: 引用 4 楼 u012071720 的回复:[quote=引用 3 楼 u012071720 的回复:] printf("%s\n",rev_a);打印字符串的时候，因为其并不知道字符串的长度，所以就是找\0的位置作为结束标识，之前两个字符串的字符分别为 char a[6] = "hello";//h e l l o 0x00 char rev_a[6] = "";//0x00 0x00 0x00 0x00 0x00 0x00 而你执行完后成了 char a[6] = "hello";//h e l l o 0x00 char rev_a[6] = "/0olleh";//0x00 o l l e h 所以在打印时，第一个就遇到了0x00以为是结尾了，所以就没有打印出来，你可以改一下程序 for(int i = 0; i < 6; i++) {     rev_a[4-i] = a[i]; } 希望对你有帮助，其实你可以用debug来跟踪解决这个问题不好意思，有个地方错了 for(int i = 0; i < 5; i++) {     rev_a[4-i] = a[i]; }[/quote] 谢谢，学到很多。

user: user-1
content: 引用 3 楼 u012071720 的回复:printf("%s\n",rev_a);打印字符串的时候，因为其并不知道字符串的长度，所以就是找\0的位置作为结束标识，之前两个字符串的字符分别为 char a[6] = "hello";//h e l l o 0x00 char rev_a[6] = "";//0x00 0x00 0x00 0x00 0x00 0x00 而你执行完后成了 char a[6] = "hello";//h e l l o 0x00 char rev_a[6] = "/0olleh";//0x00 o l l e h 所以在打印时，第一个就遇到了0x00以为是结尾了，所以就没有打印出来，你可以改一下程序 for(int i = 0; i < 6; i++) {     rev_a[4-i] = a[i]; } 希望对你有帮助，其实你可以用debug来跟踪解决这个问题不好意思，有个地方错了 for(int i = 0; i < 5; i++) {     rev_a[4-i] = a[i]; }

user: user-1
content: printf("%s\n",rev_a);打印字符串的时候，因为其并不知道字符串的长度，所以就是找\0的位置作为结束标识，之前两个字符串的字符分别为 char a[6] = "hello";//h e l l o 0x00 char rev_a[6] = "";//0x00 0x00 0x00 0x00 0x00 0x00 而你执行完后成了 char a[6] = "hello";//h e l l o 0x00 char rev_a[6] = "/0olleh";//0x00 o l l e h 所以在打印时，第一个就遇到了0x00以为是结尾了，所以就没有打印出来，你可以改一下程序 for(int i = 0; i < 6; i++) {     rev_a[4-i] = a[i]; } 希望对你有帮助，其实你可以用debug来跟踪解决这个问题

user: user-2
content: for(int i = 0; i < 5; i++)     rev_a[4-i] = a[i];

user: user-3
content: printf 错了
user-0 提问: 为什么虚拟XP系统下打不开BC呢

回复:
user: user-1
content: Borland C++ for DOS 还是 for Windows？ for DOS可能需要在DOSBOX下运行，for Windows可能版本太低不支持XP。 现在用这个很方便，XP或Win7都可以： 《C与C++程序设计学习与实验系统 2013.3》 只有几十M，集成了Turbo C/C++，VC 6.0和GCC的编译器。

user: user-2
content: DosBox也可以试试。

user: user-3
content: 1、安装VirtualBox虚拟机； 2、在虚拟机下安装DOS6.22操作系统； 3、在DOS下安装BC3.0/BC3.1； 4、在BC下编译你的代码； 5、在DOS下执行你的程序。  引用 楼主 u011905800 的回复:为什么虚拟XP系统下打不开BORLANDC呢,闪退了

user: user-2
content: 一下→以下

user: user-2
content: 一下内容仅供参考：要想在Windows环境下稳定运行bc.exe 建一个批处理bc.bat,内容为下面两行，放在bc.exe同目录下，再将bc.bat发送到桌面快捷方式： del tc*.swp >NUL start command /c bc.exe 如果想在IDE里面使用鼠标，还应将快捷方式属性中的快速编辑模式关掉。

user: user-4
content: 如果程序本身没有问题的话，可能就是虚拟机压力太多！
user-0 提问: url的编码问题(linux爬虫)

回复:
user: user-0
content: 应该时网站编码不同导致的。 举个例子：网站A为gb2312编码，下面包含一些中文链接a,b,c，这些中文链接应该时经过gb2312编码过的，获取a,b,c后通过creat写入到文件中， 然后在read到爬取队列中，然后通过socket发送 html请求（GET 中文链接a），这是发送过去的就是乱码了，请问是什么原因！

user: user-1
content: 抓包处理下！看发送出去的时候是否已经乱码还是网站解析编码不同导致乱码的！
user-0 提问: 小白路在何方- -

回复:
user: user-1
content: 从我的体会来看，对新手来说，学习语言，你能熟练地用它写代码，能看懂别人写的代码。那么，这么语言你就可以先学到这为止了，深入语言是以后的事情。  现在更重要的是掌握业务逻辑方面的知识，掌握常用的算法，图像处理，tcp/ip协议，socket编程等等，音视频压缩编码格式等等。因为公司需要的是这些，而不是个语言大师。掌握这些才能让你更好地找工作。  当你有学有余力时，要不要去深入语言就看你的兴趣了。  所以，我觉得你可以看看你想从事的工作方面的专业知识了。

user: user-2
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后，就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。  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-3
content: 算法数据结构为主，语言为辅，之后最好进行高级主题的研究。譬如数据挖掘，机器学习，模式识别等。

user: user-4
content: 在我脚下——走别人的路，让别人无路可走

user: user-5
content: 如果你是小白的话 想成为大师级别的 我有几个建议 第一 当然是泡网站了啊 看雪论坛 学习OD 天天看汇编这样你会发现你进步会很大的 第二 CSDN 你就在菜鸟区先开始  看每天有人回答菜鸟的问题  你每天拿个小本本 记下来 之后去试试 这样365 * 5 基本基础就有了 而且你以后就可以回答很多新手问题了 因为看过历史的 必然知道这个世界 是陷入无限循环的圈子。不必创新 无限循环懂了 你才能跳出去 第三 之后找一个地方实习 写上6个月代码 之后你的技巧也有了 之后弄6个月API 例如linux你就看UNIX环境 高级编程 windos 就是windos API 找特点方向的API实现一个项目。 第四 天天玩玩OD 这样你看汇编比看你女朋友还亲 你看就知道什么情况 大事何愁不成啊 第五 通信 串口 UDP TCP 无线通信 还有那个自己写协议的通信 你工作都会遇到 之后就是网络方向 搞搞wireshark  天天抓包看看。 第六 前面你已经搞定 遇到瓶颈 或者感觉可以了 之后再家待业，看半年数据结构。差不多了这就。

user: user-6
content: 你要知道自己学习语言是为了学习计算机还是想写软件，如果是后者，你可以暂停学习语言，接下来试试写个软件。不管是windows下的还是linux下的，都需要开始学习系统编程了。

user: user-7
content: 学学c++咯

user: user-8
content: 可以继续学习c语言啊！ 看c和指针，c专家编程！ 然后向Linux编程方向发展，前景还是比较可以的！  坚持就好！

user: user-9
content: 不好意思大多了一个字！是数据结构！

user: user-9
content: 学习一下数据结构体！或者算法与分析!
user-0 提问: 怎么在windows应用窗体里面编写c语言程序啊

回复:
user: user-1
content: 跟随MSDN里面的教程一步一步慢慢来。

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

user: user-2
content: 楼主可以了解一下Windows SDK，用C语言的API编程。

user: user-3
content: vs2008创建了一个windows应用窗体那是C++的 MFC吧 里面最好用C++写程序吧  你要写C代码的话 不是要用控制台程序的啊  你要用MFC写C做什么 你要说要MFC里面 用C封装成的类在在MFC里面用还行

user: user-4
content: 在界面资源上找到那个按钮，双击后，会自动添加响应函数，在那个函数里写入要执行的代码，当程序运行时，你单击按钮，填入的代码就会执行

user: user-5
content: 选win32程序。然后就看到WinMain了
user-0 提问: C语言出现 烫烫的乱码 求助求助！！！！

回复:
user: user-1
content: 使用前先ZeroMemory一下 或者是加个‘\0’

user: user-2
content: 请判断fscanf函数的返回值！

user: user-2
content: 对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A

user: user-3
content: ZeroMemory

user: user-4
content: while(! feof(fp)) { fscanf(fp,"%s%s%s%s%s",stu[i].name,stu[i].num,stu[i].donum,stu[i].qq,stu[i].telenum);	     	 i++; } fscanf是格式化读取文件，要根据你在文件里数据的存放方式，根据这个方式读取。比如，看到你下面的fprintf格式，那么你的读取也应该是： fscanf(fp,"%s  %s  %s  %s %s\n",stu[n].name, stu[n].num, stu[n].donum, stu[n].qq, stu[n].telenum); 一般出现乱码是因为字符串找不到'\0'。

user: user-5
content: fscanf(fp,"%s%s%s%s%s",stu[i].name,stu[i].num,stu[i].donum,stu[i].qq,stu[i].telenum);	  用gets/fgets 吧

user: user-6
content: 发错表情了别理解错了亲

user: user-6
content: 一般出现这种情况就是你引用了你没有初始化的内存空间的

user: user-7
content: 数组没能正确初始化内容（应该是读取的时候没能有正确的'\0'结束符），是VC堆栈的默认值 0xcc。 "烫"用UE二进制方式查看就是 cc cc，即VC对战默认值。

user: user-8
content: 肯定不是加取地址符号。你输入每一个字符串时是否输入过回车呢？

user: user-9
content: 使用前，对你的 数组 变量memset一下

user: user-10
content: fscanf(fp,"%s%s%s%s%s",&stu[i].name,&stu[i].num,&stu[i].donum,&stu[i].qq,&stu[i].telenum);    加上取地址符 你在试试

user: user-0
content: 谢谢你们了啊 我明白了。

user: user-11
content: 内存没有初始化嘛~ 方法1:二楼说的那样memset一下，例如：memset(a, 0, sizeof(a); 方法2:初始化一下结构体的值，例如struct student stu[100] = {NULL};
user-0 提问: 我的本科毕业设计是用VS开发，C语言编写基于无文本的说话人检索系统，不知道怎么做，求大神指导！

回复:
user: user-1
content: matlab可以看看音频处理

user: user-2
content: 可能要傅里叶变换转换成频谱方式，书店买一本专门的语音处理的书看一下，里面有原理和算法。

user: user-3
content: 推荐使用  Audition软件 和  NCTAudioStudio控件 处理音频。

user: user-4
content: 这个要是我做的话 就是用kinect XBOX 360 这个微软的体感器 把声音提取出来的API去搞  你的意思是声音已经录好了 不是实时甄别的 那么思路也就是声音的二进制文件 通过windows的API进行播放它 然而在处理过程中 这些API中的结构体应该是可以取出你想要的东西吧 具体也不是很懂。我大都是都在搞图像处理。
user-0 提问: 今天面试被问了个问题。

回复:
user: user-1
content: 看看unix网络编程或者windows网络编程等。具体方法比较多，看应用场景了。阻塞，非阻塞，io复用，信号驱动式以及异步io都是可以的。

user: user-2
content: lz 可以看看  Windows网络编程   的  Winsock 简介 和  Winsock IO 方法

user: user-3
content: 一个就够了，循环accept就好了（处理好阻塞问题）！ accept每次都会返回一个和客户端通信的套接字的 干嘛要建立多个！  网上搜下 网络编程！很基础的东西！
user-0 提问: 看深入理解计算机系统，关于移位负数乘法 

回复:
user: user-1
content: 引用 2 楼 cuisanzhang 的回复:汗一个>_<，我搞错了_，x*6 = x*2*2 + x*2 = (x<<2)+(x<<1);这个是对的。    x*-6 = -(x*6) = -( (x<<2) + (x<<1)) 不是我说，这么简单？？？就是把符号移到外边？？？  沒錯...

user: user-0
content: 汗一个>_<，我搞错了_，x*6 = x*2*2 + x*2 = (x<<2)+(x<<1);这个是对的。    x*-6 = -(x*6) = -( (x<<2) + (x<<1)) 不是我说，这么简单？？？就是把符号移到外边？？？

user: user-2
content: 你这个题本身都是错的.  比如 x * 6, 可以用移位 + 加法实现;(x << 3) + ( x << 2); 这个条件都是不成立的.  因为计算的原理都是一些逻辑运算, 与,或,非. 所以乘除都可以转换成基本运算.  原理是这样的: x每向左移动一位, 相当于乘以2. 所以你就要相办法把*N,使用分配律把算式分解, 比如你的例子: x*6 = x*4 + x*2 = x*2*2 + x*2  x*6 = x*2*2 + x*2 = (x<<2)+(x<<1);  同理, x*-6 = -(x*6) = -( (x<<2) + (x<<1))
user-0 提问: socket 自身有没有并包的属性？

回复:
user: user-1
content: 我也是只知道 分包协议会处理好，貌似没设置过这玩意

user: user-2
content: 可以确定的是有自动分包的特性

user: user-3
content: 记得貌似有取消并包优化的设置.不过做一个分包也不麻烦

user: user-4
content: 系统会定期从socket缓冲取出数据，如果数据过多自然就会并包，你说的并包属性并不存在，你可以自己接一个buffer，到达一定大小后send。
user-0 提问: 数字母出现个数

回复:
user: user-1
content: 你没有调试吧  #include<stdio.h> #include<string.h> int main() { 	int t,k=0,i,j,max,len,l[26]={0}; 	char s[1010]; 	scanf("%d",&t); 	getchar(); 	while(t--) 	{ 		memset (l,0,sizeof (l));//每次清0，或者改在这里定义int l[26]={0}; 		gets(s); 		len=strlen(s); 		for(i=0;i<len;i++) 		{ 			j=s[i]-'a'; 			l[j]++; 		} 		max=l[0]; 		for(i=0;i<26;i++) 		{ 			if(l[i]>max) 			{ 				max=l[i]; 				k=i; 			} 		} 		printf("%c\n",'a'+k); 	} 	return 0; }  代码逻辑是对的，不过数组重复使用，没有清0，上次的数据还都保留着。这是自己挖坑自己跳啊。 你把计算部分程序，写成函数。然后循环调用，就没有这个问题了。  #include<stdio.h> #include<string.h>  void alphacount(){ 	int k=0,i,j,max,len,l[26]={0}; 	char s[1010]; 	gets(s); 	len=strlen(s); 	for(i=0;i<len;i++) 	{ 		j=s[i]-'a'; 		l[j]++; 	} 	max=l[0]; 	for(i=0;i<26;i++) 	{ 		if(l[i]>max) 		{ 			max=l[i]; 			k=i; 		} 	} 	printf("%c\n",'a'+k); }  int main() { 	int t; 	scanf("%d",&t); 	getchar(); 	while(t--) 		alphacount(); 	return 0; }

user: user-2
content: #include<stdio.h> #include<string.h> int main() { int t,k=0,i,j,max,len; char s[1010]; scanf("%d",&t); getchar();     while(t--) { l[26]={0}//把这个数组初始化放在这里面貌似就好了 gets(s); len=strlen(s); for(i=0;i<len;i++) { j=s[i]-'a';     l[j]++; }          max=l[0]; for(i=0;i<26;i++)	 { if(l[i]>max) {	     	max=l[i];         k=i; }         } printf("%c\n",'a'+k); } return 0; }

user: user-2
content: 引用 5 楼 lm_whales 的回复:从文件读取数据，结果写入文件。 文件读写，比控制台读写快多了。 我觉得不是时间限制的问题，而是代码有点问题，试过几次有bug

user: user-1
content: 从文件读取数据，结果写入文件。 文件读写，比控制台读写快多了。

user: user-2
content: 但是我也不知道怎么做，坐等解释

user: user-2
content: 刚才运行了一下，貌似不能实现所说目的

user: user-3
content: 看样子没什么大问题，如果是时间因素过不了，可以把下面语句改一下 //len=strlen(s); //for(i=0;i<len;i++) for (i = 0; s[i] != '\0'; i++)
user-0 提问: Floating point exception (core dumped) 的问题

回复:
user: user-1
content: 有可能是溢出，然后sum =0；然后p(x)=0 或者p(y)=0; 然后除法错中断。。。。。。。。。。。

user: user-2
content: core dumped 一般是 fatal error，   换个小点的输入确认一下

user: user-3
content: 溢出应该不会core dumped吧。  引用 1 楼 user-4 的回复:unsigned long 溢出了， 试了下代码，把 x，y 都相对改小点是OK的！ 这里估计要特别作大数处理了，不能这么简单的用unsigned long long 了

user: user-4
content: unsigned long 溢出了， 试了下代码，把 x，y 都相对改小点是OK的！ 这里估计要特别作大数处理了，不能这么简单的用unsigned long long 了
user-0 提问: 顺序栈操作：可以从栈底向栈顶依次遍历元素么？

回复:
user: user-1
content: 栈是基于LIFO概念的一种表现形式，你的行为违反了LIFO思想

user: user-2
content: 你提出的问题是可以实现的，栈结构是你自己设置的，你当然可以从栈底到栈顶，但是这也不叫栈了? 栈的特点应该是先入后出

user: user-2
content: 这是做什么？你要输出S 中的data数组中小于top的值？

user: user-0
content: typedef struct{ 	elemtype data[maxsize]; 	int top; } seqstack;
user-0 提问: 这代码邪门了

回复:
user: user-0
content: 亲娘嘞，这句话发多少次了！！！！！！ 引用 9 楼 zhao4zhong1 的回复:计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  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对应的汇编并单步执行观察相应内存和寄存器变化。） 引用 9 楼 zhao4zhong1 的回复:计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  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-1
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  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-2
content: 楼主这是在android上用C开发？NDK？

user: user-0
content: 安卓的c4droid ，头文件没那么大，编译比VC 快，立马出结果，适合学习

user: user-0
content: 实际上，好像不是超范围的缘故，但是说是编译器原因更大

user: user-0
content: 不会的，读文件内容单引号内的内容，最长的也只有32个字符。

user: user-3
content: 换个编译器，看看是否结果还这样。

user: user-4
content: 楼主，你能告诉我你头像是什么图片吗，我很好奇哎

user: user-5
content: 楼主用的什么IDE啊

user: user-6
content: 文件指针p/pp和数组str都可能超出范围。  引用 楼主 u010211892 的回复:难道是内存出了问题吗？很明显bb,dd应该一样，但结果居然。。。 // awesome #include"stdio.h" #include"time.h" int main() { 	int cc = 0, bb = 0, aa = 0, dd = 0; 	long yy = 0; 	char t[7], str[40]; 	long t1 = 1; 	t[2] = 0; 	FILE *p = NULL, *pp = NULL; 	p = fopen("/sdcard/sqlN.txt", "r+"); 	pp = fopen("/sdcard/gottenN.txt", "w+"); 	while (1) 	{ 		aa++; 		cc++; 		while ((t[3] = fgetc(p)) != '\'') 		{ 		} 		while ((str[t[2]++] = fgetc(p)) != '\''); 		str[t[2] - 1] = 0, t[2] = 0; 		fprintf(pp, "%s", str); 		 		bb++; 		dd++; 		if (dd > 76212) 		{ 			printf("aa=%d,dd=%d,cc=%d,bb=%d\n", aa, dd, cc, bb); 			return (1); 		} 	}  } 结果：

user: user-7
content: (str[t[2]++] = fgetc(p) --》 str超过40， 把后面的内存（包括dd）给覆盖了吧。
user-0 提问: 填数字的问题

回复:
user: user-1
content: 我只是随便看一眼 要是我的话 我会观察 x + y + z = 1 那么也就是说 x小于1 y小于1 z小于1 这样会快些了多 还有当前俩个大于1的时候 也不满足 最后也是最重要的一点就是 你会发现最后竟然是等于1 而且他们都是几十分之几 竟然最后能通分等于1 你把他们分母统一一下 你会发现原来也不是很难 分子等于分母

user: user-2
content: 2楼基本正解。。。 按2楼思路写了个小程序，竟然唯一解（去除交换律）  #include <stdio.h> #include <algorithm> #include <functional> using namespace std ;  int main() { 	int a[] = {1,2,3,4,5,6,7,8,9}; 	do 	{ 		int ef = a[4]*10+a[5]; 		int bc =a[1]*10+a[2]; 		int hi =a[7]*10+a[8]; 		if (a[0]*ef*hi+a[3]*bc*hi+a[6]*bc * ef ==bc*ef*hi ) 		{ 			printf("%d/%d+%d/%d+%d/%d=1\n",a[0],bc,a[3],ef,a[6],hi); 		} 	}while (next_permutation(a,a+9)); 	getchar(); 	return 0; }

user: user-3
content: 全排列

user: user-4
content: 我这也是个笨办法 观察一下 a/(bc) +d/(ef) +g/(hi) =1 其中： bc = b*10+c ef = e*10 + f hi = h*10+i 于是： a/(bc) +d/(ef) +g/(hi) =1 <==> a*ef *hi +d *bc*hi + g* bc * ef = bc*ef*hi   先求组合，然后对每一个组合，检查 a*ef *hi +d *bc*hi + g* bc * ef == bc*ef*hi 是否成立  这里都是整数计算 2位*2位*2 位, 结果是6位数 ,不超过 32Bits.
user-0 提问: 两个char型数据比较大小的疑惑

回复:
user: user-0
content: sorry,其它地方有些异常导致这个问题出现异常.谢谢.

user: user-0
content: b 和c已经被设置为unsignd char 了,这个还需要吗?

user: user-1
content: if((unsigned char)a.b[1]>(unsigned char)a.c[1])

user: user-0
content: 试了解决不了问题

user: user-2
content: 根据需要 明确写成  signed char 类型  或者是 unsigned char 类型
user-0 提问: 请教 sscanf 的写法！

回复:
user: user-1
content: if (6!=sscanf(buf,"\"%[^\"]\",\"%[^\"]\",\"%[^\"]\",\"%[^\"]\",%d,\"%[^\"]",zd1,zd2,zd3,zd4,&zd5,zd6)) {  printf("[%s]格式错误!\n",buf);  exit(1); } else {  //格式正确 }

user: user-2
content: "\"%[^\"]\",\"%[^\"]\",\"%[^\"]\",\"%[^\"]\",%[^\,],\"%[^\"]"

user: user-0
content: 引用 1 楼 user-2 的回复:sscanf(buf,"\"%[^\"]\",\"%[^\"]\",\"%[^\"]\",\"%[^\"]\",%s\,\"%[^\"]",zd1,zd2,zd3,zd4,zd5,zd6);  你的%s 胃口好 把剩下的全部一口吃进去了 另外什么是 \, ??  请教 该怎么改呢

user: user-2
content: sscanf(buf,"\"%[^\"]\",\"%[^\"]\",\"%[^\"]\",\"%[^\"]\",%s\,\"%[^\"]",zd1,zd2,zd3,zd4,zd5,zd6);  你的%s 胃口好 把剩下的全部一口吃进去了 另外什么是 \, ??
user-0 提问: 赋值出现异常

回复:
user: user-1
content: 引用 4 楼 zhao4zhong1 的回复:scale_val = (double)(var1/var2); 似应改为 scale_val = (double)var1/(double)var2;  ++

user: user-2
content: 引用 1 楼 u012071720 的回复:temp_val = scale_val * i + avg2 - scale_val * avg1 + 0.5; 各个值得数据类型不相同，会发生类型转换，这些类型彼此之间有优先级，级别低的数和级别高的运算后，类型会转换成级别高的数据类型，从未会引起精度变化 这样结果就会变了。。。。。。。。。

user: user-3
content: scale_val = (double)(var1/var2); 似应改为 scale_val = (double)var1/(double)var2;

user: user-4
content: vc6里好像没问题.........

user: user-4
content: scale_val = (double)(var1/var2);  var1, var2没赋值

user: user-5
content: temp_val = scale_val * i + avg2 - scale_val * avg1 + 0.5; 各个值得数据类型不相同，会发生类型转换，这些类型彼此之间有优先级，级别低的数和级别高的运算后，类型会转换成级别高的数据类型，从未会引起精度变化
user-0 提问: 一道strlen（）笔试题

回复:
user: user-0
content: 感谢楼上 我知道了

user: user-1
content: 楼上都正解，你这样写char a[10] = {};//初始化一下 然后再执行看看。其实就你的代码，你可以把字符串a打印出来看看里面到底是什么。

user: user-2
content: 真正的核心问题是  没有字符串结尾的 '\0'  清空是解决这个问题的一个很拙略的做法  strlen 要求传入参数是 c风格字符串[以\0结尾]

user: user-3
content: 没有清空 ，不管是 5 还是15 都是错的！  man  下strlen的用法，

user: user-4
content: strlen（）测试字符串长度的原理是遇到\0即0x00才会认为字符串结束，从而得到长度，楼主char a[10]字符串并没有初始化，也就是里面放的什么数都可能，在gcc中也许a[5]=0x00,在vc中可能越界后第六个字节为0x00，这才导致了如上所述的结果，所以应该在使用字符串时要有初始化的好习惯，应该用memset(a,0x00,10)来将刚申请的字符串置0.。。。希望对您有帮助

user: user-5
content: for前面先memset一下。清下零，数组里面存的是随机数据，但是strlen要见到0才停止。
user-0 提问: 如何隐藏u盘部分空间

回复:
user: user-1
content: http://zhidao.baidu.com/link?url=Zv5H3EaXecvUUb5WFFy3HBf6mCIt4poR0vzFNxGfuPWDwk19iLjUW8a1yRKSpP7SXQoytthWKKrlmTZ7m1JcGq

user: user-2
content: U盘不像硬盘，U盘就算你分了多个区分，Windows还是只能识别最前面的一个分区，例如：4GU盘分为2G，2G，那么插上电脑后，它显示为2G盘，后面的2G盘发现不了，也写不进数据，分区工具可用DiskGenius即可，

user: user-3
content: 引用 3 楼 xiaokuiing 的回复:引用 1 楼 cwt8805 的回复:fdisk给u盘分区我试了下，没分区的空间是被隐藏了，但是我能往那里面写入数据么，c语言有对应的接口么 应该说没有格式化的分区是被隐藏了吧，或者你可以把一个分区格式化为windows无法识别的文件系统。比如ext。这个分区就可以在linux下正常读写，或者借助于软件在windows下读写。当然如果你想自己实现这个软件的话，就必须得研究下ext文件系统。

user: user-4
content: 奉劝楼主不要把有限的生命浪费在无限的加密解密死循环中！

user: user-0
content: 引用 1 楼 cwt8805 的回复:fdisk给u盘分区我试了下，没分区的空间是被隐藏了，但是我能往那里面写入数据么，c语言有对应的接口么

user: user-5
content: 这个可以学习下

user: user-3
content: fdisk给u盘分区
user-0 提问: 输出结果为什么是126

回复:
user: user-0
content: 引用 1 楼 Idle_Cloud 的回复:-130的整数二进制是0xffffff7e 把它赋值给char，且都是有符号类型。就剩下后面的了7e 打印出来就是126 谢谢

user: user-1
content: -130的整数二进制是0xffffff7e 把它赋值给char，且都是有符号类型。就剩下后面的了7e 打印出来就是126
user-0 提问: 建立链栈出现逻辑错误，希望大家帮我

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

user: user-2
content: 引用 5 楼 user-4 的回复:既然都使用二级指针了 建议统一的函数都使用二级指针 统一风格 同时能避免粗心的错误 这有些太极端了吧！

user: user-3
content: linkStack *top = NULL;//     InitStack(top)； 对应的操作栈的接口参数都改成传递指针的形式先 int InitStack(linkStack *S); void StackEmpty(linkStack *S);

user: user-4
content: 既然都使用二级指针了 建议统一的函数都使用二级指针 统一风格 同时能避免粗心的错误

user: user-0
content: 还得在加一级指针 否则的话 linkStack top;// InitStack(top);//建立 实参top赋值给形参S后 S改变了（也就是分配了内存），指向了新的地方 但是它并没有在最后把这个地址返回给实参 所以 实参最后还是没有被初始化[/quote] 这样的话也就是进栈和出栈需要用二级指针，其他的不用？

user: user-4
content: 引用 2 楼 u012282088 的回复:[quote=引用 1 楼 max_min_ 的回复:]   linkStack *top = NULL;//     InitStack(top)； 对应的操作栈的接口参数都改成传递指针的形式先 int InitStack(linkStack *S); void StackEmpty(linkStack *S); 我在定义函数的时候已经有传递指针，还有在弄一次么？  typedef struct sNode{//定义函数     ElemType data;//数据域     struct sNode *next;//指针 }sNode,*linkStack; [/quote] 还得在加一级指针 否则的话 linkStack top;// InitStack(top);//建立 实参top赋值给形参S后 S改变了（也就是分配了内存），指向了新的地方 但是它并没有在最后把这个地址返回给实参 所以 实参最后还是没有被初始化

user: user-0
content: 引用 1 楼 max_min_ 的回复:linkStack *top = NULL;//     InitStack(top)； 对应的操作栈的接口参数都改成传递指针的形式先 int InitStack(linkStack *S); void StackEmpty(linkStack *S); 我在定义函数的时候已经有传递指针，还有在弄一次么？  typedef struct sNode{//定义函数     ElemType data;//数据域     struct sNode *next;//指针 }sNode,*linkStack;
user-0 提问: C语言笔试的一道题

回复:
user: user-0
content: 多谢指点，明白了

user: user-1
content: long long 类型占据了两个%d的位置，你运行出的界面中并未显示出t.y的值。 你在printf第一个参数里面再加一个%d就能打印t.y变量的值了
user-0 提问: 一到数据结构问题 求改错

回复:
user: user-1
content: 1)Push,Pop做啥用的????? 2)分配的内存要释放  void DestroyStack(Stack &s){     delete[] s.base; } int main() {     Stack s;     InitStack (s,20);     char ch[50];       cout << "输入表达式"<<endl;     cin>>ch;         for(int i;i<strlen(ch);i++){           //简洁版，可能会出错。          if(ch[i]=='(')             Push(s,ch[i]);         else if (ch[i]==')')              Pop(s);                 }     if(s.top == s.base)      {         cout<<"表达式的括号是配对的。"<<endl;     }     else      {         cout<<"表达式的括号不是配对的。"<<endl;     }     DestroyStack(s);     return 0; }  //精细版 int main(){     Stack s;     InitStack (s,20);     char ch[50];     int error=0;       cout << "输入表达式"<<endl;     cin>>ch;         for(int i;i<strlen(ch);i++)       {               if(ch[i] != ')') Push(s,ch[i]);        else {               while(s.top !=s.base && *(s.top) !='(')               {                    Pop(s);               }               if(*s.top !='('){                      cout<<"表达式的括号不是配对的,丢失左括号 \'(\'。"<<endl;                       error++;                   }           }            }     if(error ==0 ){        if(s.top == s.base)         {            cout<<"表达式的括号是配对的。"<<endl;        }        else         {            cout<<"表达式的括号不是配对的。丢失右括号 \')\'"<<endl;         }     }      DestroyStack(s);     return 0; }

user: user-2
content: 第49行i需要初始化吧，int i=0；

user: user-0
user-0 提问: 关于双向循环链表运行Locate函数的一些问题

回复:
user: user-1
content: 你写的这个代码没有使用面向对象的设计思想，你这个还是面向过程的，看起来有点费劲，全局变量最好不要这么用，这么用很容易出错，也不便于阅读，malloc可以换成new可能会好点，和链表相关的操作可以放在类里面，这样容易理解，也不容易出错。

user: user-0
content: 对不起哦，换个算法，这个算法已经完善但是就是输出的时候可能会有指针指错的地方。。 #include <iostream> #include <malloc.h> #include <stdlib.h> #include <stdio.h> using namespace std;  typedef int ListData; typedef struct dnode  { 	int data;  	int freq;                             struct dnode * prior, * next;      } DblNode; typedef DblNode * DblList; DblList first;  void CreateDblList ( int n )  {   first = ( DblNode * ) malloc ( sizeof ( DblNode ) );   if ( first == NULL )   {  		printf ( "存储分配错!\n" );   		exit (1);    }   first->prior = first->next = first;   DblList c,l=first;   for(int i=1;i<=n;i++)   {         c=(DblNode *)malloc(sizeof(DblNode));         c->data=i;         c->prior=l; 	    c->next=first; 	    c->freq=0; 	    l->next=c; 	    first->prior=c; 	    l=l->next;   }     }  void locate(int &x) { 	DblNode *p = first->next; 	while ( p != first && p->data != x ) p = p->next; 	if ( p != first )  	{	 		 p->freq++; 		 DblNode *current=p;          current->prior->next=current->next;          current->next->prior=current->prior;          p=current->prior;          while(p!=first && current->freq>p->freq ) p=p->prior;          current->next= p->next ;          current->prior=p;          p->next->prior=current;          p->next= current ; 	} 		else	cout<<"Sorry. Not find!\n";					//没找到 }   	    	   int main() {     int n,x;     cout<<"please input the link list length: "<<endl;     cin>>n;     CreateDblList(n);     cout<<"The link list data are: " <<endl;     DblNode *k=first->next;     for(int i=1;i<=n;i++)     { 		cout<<"The   1 node is "<<k->data<<", its frequency is "<<"0."<<endl; 		k=k->next; 	} 	k=first->next; 	cout<<"Let's start to test the Locate Function.<-1 means stopping input number>"<<endl; 	cout<<"please input number:"; 	cin>>x; 	while(x>=0) 	{ 		locate(x); 		cout<<"please input number:"; 		cin>>x; 	} 	cout<<"After the test,the link list data are:"<<endl; 	for(int i=1;i<=n;i++)     { 		cout<<"The   1 node is "<<k->data<<", its frequency is "<<k->freq<<endl; 		k=k->next; 	} 	return 0; 	 }
user-0 提问: gerchar使用

回复:
user: user-1
content: getchar();接收前面输入的回车，这样后面的代码scanf("%c",&choice);就不会接收回车符，而是等待用户输入字符。其实通常在接收字符型数据前用fflush(stdin);清空输入缓冲区，确保不影响后面的数据读取.

user: user-2
content: 楼上两位说的很对，getchar()是吃掉回车，要不然后面scanf字符的时候会读入回车  其实也以不使用getchar()函数，在scanf("%c",&choice);函数中的%c前面加空格也是可以的  改为 scanf(" %c", &choice);

user: user-3
content: scanf(); 格式化输入函数的 如果员工的工资需要小数的话， 最好把wage定义float或者double， 如果是定义成的是int的话， 就得用scanf("%d", &wage);  getchar是取出输入缓冲区里的一个字节而已！当然这里是取出回车符了！

user: user-4
content: 一般scanf()后跟的getchar()是吃掉回车，使的下一次调用时scanf()不出错

user: user-5
content: 术语是scanf 属于‘行缓冲’的 你要了解 无缓冲 行缓冲 和全缓冲的区别和用法
user-0 提问: 急！！！！后天交！！！栈的后缀式求值，请大家帮忙！！！

回复:
user: user-0
content: 引用 1 楼 N_sev7 的回复:     InitStack(OPTR);   ///你传了一个类型，没有传参数     InitStack(OPND);  改为  typedef struct {     char *base;     char *top;     int stacksize; }OPTR;//运算符栈  typedef struct {     int *base;     int *top;     int stacksize; }OPND;//运算数栈 OPTR optr; OPND opnd;    ...    ... InitStack(optr);   ///你传了一个类型，没有传参数 InitStack(opnd);       太感谢你了，哈哈，谢谢

user: user-1
content: InitStack(OPTR);   ///你传了一个类型，没有传参数     InitStack(OPND);  改为  typedef struct {     char *base;     char *top;     int stacksize; }OPTR;//运算符栈  typedef struct {     int *base;     int *top;     int stacksize; }OPND;//运算数栈 OPTR optr; OPND opnd;    ...    ... InitStack(optr);   ///你传了一个类型，没有传参数 InitStack(opnd);
user-0 提问: 好久不写代码，最简单的c程序不知哪错了

回复:
user: user-1

user: user-0
content: 恩，我知道输入格式不对，有谁可以深入说一下为什么格式输入错误，b就是随机数吗？

user: user-2
content: #include<stdio.h>少了空格

user: user-3
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-4
content: 引用 11 楼 zwb8848happy 的回复:哦，我输入数据的时候是以空格分开的； 这样b就是一个随机数，这为什么？  输入用逗号隔开。

user: user-0
content: 哦，我输入数据的时候是以空格分开的； 这样b就是一个随机数，这为什么？

user: user-5
content: 一个问题并不是找到了问题的正确方式就是懂了  而是由这个问题引发的思考  这才是重要的  C标准库 scanf的实现为（主要理解变长变元表） /* _Scanf function */ #include <ctype.h> #include <limits.h> #include <stdlib.h> #include <string.h>  fscanf(fp,"%s%s%s%s%s",stu[i].name,stu[i].num,stu[i].donum,stu[i].qq,stu[i].telenum);    int _Scanf(int (*pfn)(void *,int),void *arg,const char *fmt,va_list ap) { 	const char *s; 	int nconv = 0; 	_Sft x; 	x.pfn = pfn; 	x.arg = arg; 	x.ap = ap; 	x.nchar = 0; 	for(s = fmt;;++s) 	{ 		int ch; 		int n; 		wchar_t wc; 		_Mbsave state = {0}; 		while(0 <(n = _Mbtowc(&wc,s,MB_CUR_MAX,&state))) 		{                       //check type of multibyte char  			s+= n; 			if(wc =='%') 				break; 		else if(wc <= UCHAR_MAX && isspace(wc))//判断是否为空格 如果是跳过 			{ 				while (isspace(*s)) 				++s;	/*match any white-space */ 				while(isspace(ch = GET(&x))); 				UNGET(&x,ch); 			} 			else {// 识别变量 			 ...       			}	/* match literal text */  			if(*s == '\0') 				return (nconv); 		} 此处略去300字

user: user-6
content: 代码没问题，应该是输入问题，楼上正解

user: user-7
content: 代码本身没有问题！输入格式注意下就好！楼上正解

user: user-8
content: 你得输入 1,2 注意逗号。

user: user-9
content: 这样写的scanf似乎会把逗号赋值给b

user: user-10
content: 感觉把SCANF语句里面的逗号删去就应该行了

user: user-4
content: 引用 楼主 zwb8848happy 的回复: #include<stdio.h>  int main() { 	int a,b;       scanf("%d,%d",&a,&b);      printf("%d\n",a+b);  	return 0; }  代码没看出什么问题，会不会分号是全角的！

user: user-11
content: #include "stdio.h" 看看。

user: user-12
content: 应该没错啊，你输入时候是以逗号隔开的吗
user-0 提问: 当有按键发生时，程序结束，不知道放的位置是不是很正确？

回复:
user: user-1
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

user: user-2
content: 只能执行哈看看是不是完成哦你想要的功能了！
user-0 提问: 如何成为一位成功的程序员

回复:
user: user-1
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后，就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。  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-1
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-0
content: 引用 8 楼 buyong 的回复:[quote=引用 楼主 u012222078 的回复:] 进了大学一年了，最初的梦想是当兵保卫国家，却阴差阳错进了大学学习计算机，初知计算机的我却爱上了这个以前相对陌生的东西，想要学好它，学习计算机远非想的那么简单，这一年来也沉沦过，认真学过，却总是感觉成绩平平，对于自己想成为一名优秀的程序员的目标还很远很远，今天就是怀着勇气与盼望，希望各位学成的大师们讲讲经，说点学习之道，学习技巧，都要学习什么东西，谢谢您们。                                                                 以为想学好计算机的初学者  你可以写小说[/quote]谢谢

user: user-0
content: 引用 6 楼 ForestDB 的回复:首先，没有捷径； 然后，什么是成功？ 个人片面的的感觉就是能写出一些自己引以为傲的东西得到别人的认可，有个喜欢的岗位这就是我希望的成功！

user: user-2
content: 引用 楼主 u012222078 的回复:进了大学一年了，最初的梦想是当兵保卫国家，却阴差阳错进了大学学习计算机，初知计算机的我却爱上了这个以前相对陌生的东西，想要学好它，学习计算机远非想的那么简单，这一年来也沉沦过，认真学过，却总是感觉成绩平平，对于自己想成为一名优秀的程序员的目标还很远很远，今天就是怀着勇气与盼望，希望各位学成的大师们讲讲经，说点学习之道，学习技巧，都要学习什么东西，谢谢您们。                                                                 以为想学好计算机的初学者  你可以写小说

user: user-3
content: 平时也多做一些笔记和总结性的笔记。把平时学习和写程序的问题都记下来，并且把答案也记下来。对于以后，遇到同样的问题好解决。 多思考、多练习；在困难的时候，不要灰心，要坚持努力和总结哦！！！

user: user-4
content: 首先，没有捷径； 然后，什么是成功？

user: user-5
content: 什么是好的程序员？同问

user: user-6
content: 只要你爱，你就能成功！！！如果不爱或者只是以为自己爱，那还是另寻新欢吧！ 学习不只是上课学的，你蹲厕所，走在路上，做梦时都可以思考可以想，然后写成代码看看！然后毕业的时候你就发现你与众不同

user: user-7
content: 更多的还是理解！以及平时的练习！多动脑，勤动手！这样效果更好

user: user-8
content: 语言学习，没有捷径！先从基础学起！ 多练敲代码多看书，不懂多问，多思考！慢慢来，不要急躁！

user: user-0
content: 如果您碰巧看见我的问题，谢谢您把它看完
user-0 提问: DFS深度优先搜索（非递归）求改错

回复:
user: user-1
content: void DFS_2(VNode G[],int v){     int S[VEXNUM];     int top=-1;     int w,k;     visited[v]=1;     S[++top]=v;//将第一个元素放入栈     printf("%d ",G[v].data);     while(top!=-1){         k=S[top];//得到栈顶元素         visited[k]=1;         if(FirstAdj(G,k)!=-1&&visited[FirstAdj(G,k)]!=1){//如果栈顶元素有未访问的邻接点，就将邻接点压入栈顶             w=FirstAdj(G,k);             printf("%d ",G[w].data);             S[++top]=w;         }         else{             int t;             if(NextAdj(G,S[top])!=-1&&visited[NextAdj(G,S[top])]!=1){                 t=NextAdj(G,S[top]);                 printf("%d ",G[t].data);                 S[top]=t;             }             else{                 top--;             }         }     } }

user: user-0
content: 请大神指点！

user: user-2
content: 坚决消灭零回复.

user: user-0
content: 大神说话呀！

user: user-0
content: 在线等大神！
user-0 提问: 在编译的时候出现了一个段错误，虽然知道是哪句，不过看不懂为什么

回复:
user: user-1
content: 在不确定操作符先后顺序的情况在最好用括号

user: user-2
content: #pragma comment(linker,"/SECTION:.rdata,RW") //加这句可以让常量区可写，后果自负！

user: user-0
content: 谢谢 ，晕啊， 好久没写代码了这个居然都忘了

user: user-3
content: 这样char* cStr = "asdfgh";定义的话，相当于cStr是常量指针，其指向的内容是不允许修改的，所以要改为char cStr[] = "asdfgh";数组的方式。  引用 楼主 xubuju 的回复:#include <stdio.h>  int del_substr (char* cStr, char const* cSubStr);  int main () { 	char* cStr = "asdfgh"; 	char* cSubStr = "df";  	if (1 == del_substr (cStr, cSubStr)) 	{ 		printf ("%s\n", cStr); 	} 	else 	{ 		printf ("NULL\n"); 	}  	return 0; }  int del_substr (char* cStr, char const* cSubStr) { 	int iLoop = 0; 	int ch; 	char* cTemp; 	char const* cSubTemp;  	while ('\0' != (ch = *cStr)) 	{ 		if (ch == *cSubStr) 		{ 			cTemp = cStr; 			cSubTemp = cSubStr;  			while ('\0' != *cSubTemp) 			{ 				if (*cSubTemp == *cTemp) 				{ 					cSubTemp++; 					cTemp++; 				} 				else 				{ 					break; 				} 			} 		}  		if ('\0' == *cSubTemp) 		{ 			while('\0' != *cTemp) 			{ 			printf ("%c %c\n", *cStr, *cTemp);／／这里打印d,g 				*cStr++ = *cTemp++;  ／／  这里出现段错误 			} 			*cStr = '\0';  			return 1; 		}  		cStr++; 	}  	return 0; }
user-0 提问: 整型数组为啥不能用字符串初始化

回复:
user: user-1
content: 智者的梦再美，也不如愚人实干的步伐！ 讲一千遍理论，不如写一行代码！  任何语言不落实到实际行动上都等于白说， 没读过MSDN例子代码的程序员实在让人感到可怕！  用C语言1000行源码能完成的工作千万不要用C++重写， 整天把高级技术放在嘴边那是一种浮夸！  少年啊，千万要重视单步调试和设置断点， 用VC调试时记得按下Alt+5、Alt+6、Alt+7和Alt+8。   对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和 寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时 候。  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文 字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针 的指针、二维数组、字符点阵、字符笔画的坐

user: user-2
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  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-3
content: 引用 楼主 fl260919784 的回复:字符串常量不也是一个const的地址吗，为嘛不能赋值给整型数组：int ss[100] = "0123456789";  楼主可以参考这篇 http://www.360doc.com/content/10/0929/11/1091158_57257411.shtml

user: user-4
content: 字符串常量也是一个const的地址，可以赋值给一个整数 至于赋值给一个整型数组——总有人以为他们可以写出他们自己都没想清楚的代码

user: user-3
content: 引用 楼主 fl260919784 的回复:字符串常量不也是一个const的地址吗，为嘛不能赋值给整型数组：int ss[100] = "0123456789";   这样写是有语法错误的。 #include <stdio.h>  int main(int argc,char *argv[]) {    int ss[100];  //声明一个整形数组。    int ss[100]="0123456789"; //这样写是错误的，相当于把字符串赋值给数组元素ss[100] 而不是整个数组    int ss ="0123456789"; //这样写也是不对的，因为ss是一个指针常量。      return 0;  }

user: user-5
content: char *ptr = "123456";  用字符串初始化一个指针是特例，c 语法中只允许 char* 如此

user: user-6
content: 语言规则，规则就是规则

user: user-7
content: 不符合语法，而且没有意义，到底要0123组成一个int，还是0123分别来，不太好去区别。  引用 楼主 fl260919784 的回复:字符串常量不也是一个const的地址吗，为嘛不能赋值给整型数组：int ss[100] = "0123456789";

user: user-0
content: 各路大神太给力了！

user: user-8
content: 这没啥好说的,编译器遇到这样的字符串,就把字符串放.rodata段,然后在对应的地方以该字符串的起始地址替换,这是语法规则

user: user-9
content: 1）int a[10]={(int)"1234567",(int)"4554657"};这是可以的 2）需要显式转换。 3）这样写有何意义？？？？？？？？
user-0 提问: 为什么这个程序运行到一半就自动停止了？

回复:
user: user-1
content: scanf("%d%d",&x,&y);这句话意思是让你输入两个值赋给x和y所以在这里你应该输入两个数字，程序就继续执行了。

user: user-2
content: 写代码前，要把自己的思路的目的弄清楚！ 即使调试别人代码，也要先弄清楚别人的目的，再看别人的思路！

user: user-3
content: lz 不知道自己写的程序吗？

user: user-4
content: scanf("%d%d",&x,&y); 这句是让你输入一个两个值，当然要中断一下
user-0 提问: switch里的break好像不能用了

回复:
user: user-1
content: break 只能退出一层  做个判断用return吧

user: user-2
content: 再次break、goto、return、exit、……随你挑。

user: user-3
content: 不知你的要求，好像很奇怪

user: user-4
content: switch中的break退出的是switch，不能退出while(1)循环的，若想退出while(1)循环，需要在while这一层在添加一个break.

user: user-5
content: void main() { int i,j; int s[N]; for(i=0;i<N;i++) { s[i]=rand()%20000; } while(1) {  printf("              各种排序算法的性能比较        \n\n"); printf("             1.冒泡排序                     \n"); printf("             2.选择排序                     \n"); printf("             3.直接插入排序                 \n"); printf("             4.退出                         \n\n"); printf("请输入选择(1~4):\n");     scanf("%d",&j);  switch(j) { case 1: sort_mp(s); break; case 2: sort_xz(s);break; case 3: sort_charu(s);break; case 4: exit(0);break; default: printf("输入的数字错误!\n"); } } } 你的代码也不能实现重复输入啊。。。scanf应该放在while里面吧

user: user-6
content: 增加变量：bool exitflag = false; case 4: flag = true;break; 在switch外判断flag == true条件是否满足，满足直接break

user: user-7
content: break 是在 while(1)  里面

user: user-8
content: goto比较好，但是一般不是很建议用

user: user-9
content: 引用 4 楼 u010659346 的回复:[quote=引用 3 楼 chenyegui 的回复:] [quote=引用 2 楼 u010659346 的回复:] [quote=引用 1 楼 chenyegui 的回复:] break只是退出了switch判断语句。。但是没有退出死循环啊！！！ 求改正？？？[/quote] 把break改为return0；[/quote] 你这样改就不能重复使用了，我以前都这样用，都可以，就这个程序老是不行。你那改法，是解决了，丹达不到要求了。[/quote]  什么要求？ break 退出最内层的switch 或 循环，如果要退出while(1), 在 switch 外在加 break.

user: user-10
content: 吧while 删除

user: user-0
content: 引用 5 楼 chenyegui 的回复:需要什么要求就写判断语句直接退出呗！！ 我知道怎么搞的了。

user: user-11
content: 需要什么要求就写判断语句直接退出呗！！

user: user-0
content: 引用 3 楼 chenyegui 的回复:[quote=引用 2 楼 u010659346 的回复:] [quote=引用 1 楼 chenyegui 的回复:] break只是退出了switch判断语句。。但是没有退出死循环啊！！！ 求改正？？？[/quote] 把break改为return0；[/quote] 你这样改就不能重复使用了，我以前都这样用，都可以，就这个程序老是不行。你那改法，是解决了，丹达不到要求了。

user: user-11
content: 引用 2 楼 u010659346 的回复:[quote=引用 1 楼 chenyegui 的回复:] break只是退出了switch判断语句。。但是没有退出死循环啊！！！ 求改正？？？[/quote] 把break改为return0；

user: user-0
content: 引用 1 楼 chenyegui 的回复:break只是退出了switch判断语句。。但是没有退出死循环啊！！！ 求改正？？？

user: user-11
content: break只是退出了switch判断语句。。但是没有退出死循环啊！！！
user-0 提问: 客户端socket connect建立成功但recv挂起

回复:
user: user-1
content: Windows下调用所有socket函数前请先调用WSAStartup

user: user-1
content: “发送方不send，接收方recv阻塞”再正常不过了。

user: user-2
content: 把能想到的防火墙先关了再试

user: user-0
content: 引用 1 楼 Idle_Cloud 的回复:可以用别人的客户端或服务端来测试，以确定你的软件问题在服务端还是客户端。也可以抓包看看吧。 引用 2 楼 wangdahu888 的回复:windows下用wireshark linux下用tcpdump 抓包看看吧 引用 3 楼 max_min_ 的回复:查查代码确保server端数据发送成功，client端接收处理是否正确  方法都用过了，没找到哪里有异常。有什么可能会导致这种现象大家说说。

user: user-3
content: 查查代码确保server端数据发送成功，client端接收处理是否正确

user: user-4
content: windows下用wireshark linux下用tcpdump 抓包看看吧

user: user-5
content: 可以用别人的客户端或服务端来测试，以确定你的软件问题在服务端还是客户端。也可以抓包看看吧。
user-0 提问: 小弟创建了一个win32 console application 应用程序出现错误windows.h也加了就是找不到错误求解啊

回复:
user: user-1
content: PROCESSENTRY32 Describes an entry from a list that enumerates the processes residing in the system address space when a snapshot was taken.   typedef struct tagPROCESSENTRY32 {      DWORD dwSize;      DWORD cntUsage;      DWORD th32ProcessID;      DWORD th32DefaultHeapID;      DWORD th32ModuleID;      DWORD cntThreads;      DWORD th32ParentProcessID;      LONG  pcPriClassBase;      DWORD dwFlags;      char szExeFile[MAX_PATH];  } PROCESSENTRY32;  typedef PROCESSENTRY32 *  PPROCESSENTRY32;  typedef PROCESSENTRY32 *  LPPROCESSENTRY32;    Members  dwSize  Specifies the length, in bytes, of the structure. Before calling the Process32First function, set this member to sizeof(PROCESSENTRY32). If you do not initialize dwSize, Process32First will fail.  cntUsage  Number of references to the process. A process exists as long as its usage count is nonzero. As soon as its usage count becomes zero, a process terminates.  th32ProcessID  Identifier of the process. The contents of this member can be used by Win32 API elements.  th32DefaultHeapID  Identifier of the default heap for the process. The contents of this member has meaning only to the tool help functions. It is not a handle, nor is it usable by Win32 API elements.  th32ModuleID  Module identifier of the process. The contents of this member has meaning only to the tool help functions. It is not a handle, nor is it usable by Win32 API elements.  cntThreads  Number of execution threads started by the process.  th32ParentProcessID  Identifier of the process that created the process being examined. The contents of this member can be used by Win32 API elements.  pcPriClassBase  Base priority of any threads created by this process.  dwFlags  Reserved; do not use.  szExeFile  Path and filename of the executable file for the process.  QuickInfo   Windows NT: Requires version 5.0 or later.   Windows: Requires Windows 95 or later.   Windows CE: Unsupported.   Header: Declared in tlhelp32.h.  See Also Tool Help Library Overview, Tool Help Structures

user: user-2
content: #include <TlHelp32.h>
user-0 提问: dll无法使用，求助，急！

回复:
user: user-1
content: 有用def文件吗，没有的话应该要extenr C下吧。

user: user-2
content: 把调用dll的文件中__declspec(dllexport) int add(int a,int b); 改成__declspec(dllimport) int add(int a,int b);

user: user-3
content: 引用 楼主 u010781369 的回复:首先是Dll文件的代码 #include <windows.h> BOOL APIENTRY DllMain( HANDLE hModule,                         DWORD  ul_reason_for_call,                         LPVOID lpReserved 					 ) {     return TRUE; }  __declspec(dllexport) int add(int a,int b){ 	return a+b; }  下面是调用dll的文件的代码 #include <stdio.h> #pragma comment(lib,"dll1")  __declspec(dllexport) int add(int a,int b);  int main() { 	printf("%d\n",add(1,2)); 	return 0; } 已经把LIB和DLL拷到文件目录下了 提示[Error] C:\Users\Documents\yu\main.c:8: undefined reference to `add'  __declspec(dllexport)  改成__declspec(dllimport)，由导出改为导入

user: user-4
content: 试试#pragma comment(lib,"dll1.lib")  引用 楼主 u010781369 的回复:首先是Dll文件的代码 #include <windows.h> BOOL APIENTRY DllMain( HANDLE hModule,                         DWORD  ul_reason_for_call,                         LPVOID lpReserved 					 ) {     return TRUE; }  __declspec(dllexport) int add(int a,int b){ 	return a+b; }  下面是调用dll的文件的代码 #include <stdio.h> #pragma comment(lib,"dll1")  __declspec(dllexport) int add(int a,int b);  int main() { 	printf("%d\n",add(1,2)); 	return 0; } 已经把LIB和DLL拷到文件目录下了 提示[Error] C:\Users\Documents\yu\main.c:8: undefined reference to `add'

user: user-5
content: __declspec(dllexport) int add(int a,int b); 这是定义动态库的导出函数用的。 __declspec(dllimport) int add(int a,int b); 这才是从动态库导入函数用的。  VC自己是这么做的 // defined with this macro as being exported. #ifdef XXX_EXPORTS #define XXX_API __declspec(dllexport) #else #define XXX_API __declspec(dllimport) #endif  // This class is exported from the Hello.dll class XXX_API CHello { public: 	CHello(void); 	// TODO: add your methods here. };  extern XXX_API int nHello;  XXX_API int fnHello(void);

user: user-6
content: 看信息你是用ld的，到构建选项里添加链接路径和库名，vc那套#pragma comment(lib,"dll1")不行的...

user: user-7
content: 把调用DLL文件中  __declspec(dllexport) int add(int a,int b); 改成__declspec(dllimport) int add(int a,int b); 看看  都是用同一个编译器编译的  不用extern C应该也没问题吧