Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 关于C语言printf的计算顺序问题？

回复:
user: user-1
content: 看见这个要晕了

user: user-2
content: 引用 11 楼 u013449715 的回复:好吧 ，= =其实是你第一个printf的\n前面多了一个逗号 不信你看？ 好吧 我傻逼了。用你的代码 在我机器上是正确的

user: user-2
content: 好吧 ，= =其实是你第一个printf的\n前面多了一个逗号 不信你看？

user: user-3
content: 这个真的没有意义，不同的编译器，不同的做法

user: user-0
content: 引用 8 楼 sholber 的回复:什么叫有意义，什么叫没有意义？ 能直接看出来不对叫没意义？不能直接看出来不对就有意义？ # include <stdio.h>  int main (void) {      int i = 2, * p = & i, * q = p, * r = p;      printf ("%d,%d,%d,%d,\n", p ++, ++ q, i, r ++);      printf ("%d\n", i);      return 0; } 这程序不对吧！声明好像有问题！

user: user-4
content: http://bbs.csdn.net/topics/370153775

user: user-5
content: 代码是错的  怎么错 请阅读置顶帖  ps 不要以为能运行就是对的 C语言没这么肤浅

user: user-6
content: 什么叫有意义，什么叫没有意义？ 能直接看出来不对叫没意义？不能直接看出来不对就有意义？ # include <stdio.h>  int main (void) {      int i = 2, * p = & i, * q = p, * r = p;      printf ("%d,%d,%d,%d,\n", p ++, ++ q, i, r ++);      printf ("%d\n", i);      return 0; }

user: user-4
content: 引用 6 楼 svgbdbdbd 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] http://bbs.csdn.net/topics/370153775 看完之后一时半会儿，还无法领悟，只是感到讨论这个好像没必要。[/quote] 只要看这个帖子中所有我的回复即可。

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:http://bbs.csdn.net/topics/370153775 看完之后一时半会儿，还无法领悟，只是感到讨论这个好像没必要。

user: user-0
content: 引用 1 楼 lin5161678 的回复:代码是错的  怎么错 请阅读置顶帖  ps 不要以为能运行就是对的 C语言没这么肤浅 看完后觉得，不能说错，只能说没意义，

user: user-0
content: 引用 3 楼 user-7 的回复:实际应该说的是：这种东西根本不该写，讨论其效果没有意义。 你说的很有道理，只是一时好奇。

user: user-7
content: 实际应该说的是：这种东西根本不该写，讨论其效果没有意义。
user-0 提问: 朕的目标是在积分上超过赵4老湿。

回复:
user: user-0
content: 既然君无戏言，那好，赵老湿，速速给朕汇10万美元真金白银来！不然，扒翎夺顶，发配南海，无诏不得回京！钦此！

user: user-1
content: 引用 56 楼 sholber 的回复:朕真是不理解，为什么竟然有人把这个帖子当真……**捉急呀。 那是因为“朕”说话通常都是一言九鼎，即君无戏言。

user: user-0
content: 朕真是不理解，为什么竟然有人把这个帖子当真……**捉急呀。

user: user-1

user: user-2
content: 希望楼主成熟起来，把分全给哥

user: user-3
content: 楼主把csdn数据库攻掉，给我也加几朵花 赶上赵四老师10年积累的分数还是挺难的哈

user: user-4
content: 不得不鄙视下楼主 居然以这个为目标

user: user-5
content: 有点意思，赵四老师这么有名啊

user: user-0
content: 引用 49 楼 zhao4zhong1 的回复:栈中的变量通常包括函数参数和函数里声明的临时变量。 栈中的基本变量退出其作用域时，没有谁执行一段代码去释放/销毁/析构它所占用的内存，仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。 而栈中的类变量退出其作用域时，会自动执行其析构函数，……  赵老湿旁征博引，果然高妙得紧。一番话既涵盖了硬件的术语，也涉及汇编和C、C++，真是包罗万象，虽千古之人不能及也！不过，这个栈是哪里来的，C标准中从未提及，如果我是大师，能否制造一款不用栈的处理器，届时，赵老湿又当何论？唵？

user: user-1
content: 栈中的变量通常包括函数参数和函数里声明的临时变量。 栈中的基本变量退出其作用域时，没有谁执行一段代码去释放/销毁/析构它所占用的内存，仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。 而栈中的类变量退出其作用域时，会自动执行其析构函数，……

user: user-1
content: 引用 47 楼 sholber 的回复:[quote=引用 45 楼 zhao4zhong1 的回复:] 法无定法。 赵老湿言辞高妙，但不知何意，尚祈明示。[/quote] 其实电脑开机后物理内存的每个字节都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

user: user-0
content: 引用 45 楼 zhao4zhong1 的回复:法无定法。 赵老湿言辞高妙，但不知何意，尚祈明示。

user: user-6

user: user-1
content: 法无定法。

user: user-0
content: int x; struct t {int i;} t;  int f (void) {     int y;     int a [22];      static int * p0 = & x;      //合法。     static int * p1 = & t.i;    //合法。     static int * p2 = & y;      //非法。     static int * p3 = & a [0];  //非法。 }

user: user-7
content: 找(zhao)死(4)中(zhong)医(1)老师的分辨率一直比较低,有一种这大神其实不存在于这个世界的感觉

user: user-8
content: 围观

user: user-9
content: 超四老师是CSDN C++版块的镇版之宝啊

user: user-10
content: 李和赵老师 都好拼啊

user: user-11
content: zhao4,的徽标：进士->探花->榜样->XX  状元--以名列第一为“元”，乡试第一为“解元”。举人进京参加礼部考试者，皆须投状。考试成绩居首者为状头，故有“状元”之称。考中状元者，号称“大魁天下”，为考试科名中最高荣誉。唐代起，如殿试一甲第一名，亦称“殿元”。 榜眼-殿试一甲第二名称为“榜眼”。宋代将第二、三名均称为榜眼，意指榜中之双眼。后专指第二名。 探花-科举考试中，殿试一甲第三名称为“探花”。唐代进士在杏化花园举行“探花宴”，以年少英俊的二、三人为“探花使”（又称“探花郎”）。南宋以后专指第三名为探花。 进士-意即贡举的人才。唐代科目考试中以进士科为最重要，参加礼部考试者均可称为进士。试毕合格者赐予“进士及第”，后又有赐“进士出身”、“同进士出身”之名义。明清时代均以举人经会试合格者为“贡士”。初始专指经殿试后合格的贡士为进士，后来泛指参加殿试者，赐出身者为进士。
user-0 提问: 北大OJ1001高精度乘幂，求诸位大神看看我写的到底哪里错了

回复:
user: user-1
content: 楼主你的 if((temp[i]=getchar())=='.') digit=0; 也接收了回车了吧

user: user-0
content: 求不沉啊T^T
user-0 提问: vc6.0++ 调试

回复:
user: user-1
content: 如果是在debug下：  1.检查工程配置是否设置正确。   •C++>General->Debug Information Format->Program Database (/Zi) •C++>Optimization->Optimization->Disabled (/Od) •Linker->Debugging->Generate Debug Info->Yes (/DEBUG) •Linker->Debugging->Generate Program Database File->$(TargetDir)$(TargetName).pdb  1.如果工程配置没问题，请打开：  　　Tools->Option->debugging->General  找到 Require source files to exactly match the original version 不要打勾  　　即：工具->选项->调试里->常规 找到  要求原文件与原始版本完全匹配 不要打勾

user: user-2
content: Debug模式 Release 选不优化 生成调试信息
user-0 提问: （SWU）对于一个什么都不懂的新手来学习C语言怎么搞

回复:
user: user-1
content: 引用 12 楼 my_live_123 的回复:把《K&R》读5遍，代码写至少一遍。然后回来你就会把这个帖子删了！believe me！ 10遍

user: user-2
content: 把《K&R》读5遍，代码写至少一遍。然后回来你就会把这个帖子删了！believe me！

user: user-3
content: 先下载Win-TC，然后参考C:\Win-TC\tcstudy.chm

user: user-1
content: 因为在C语言中i, j呀这些东西可以代表一个地址哇 你也可以直接使用地址不使用i,j呀这些东西，看看谁更方便撒

user: user-4
content: 别嚓，好好学习才是关键

user: user-5
content: 变量名称是可以随便起的。不用变量如何存储数据呢？程序过程中需要存储结果的。 i来自于index的首字母，j则是从字母表接着i的，然后是k。大家约定俗成就用这些字母来表示存储序数的变量了。

user: user-1
content: 抄书上一个程序到运行成功，再回去理解程序（）。

user: user-0
content: 为什么要用 i j这些量啊

user: user-5
content: C语言一直都是大一新生的入门编程语言，各个高校都是如此安排。历代高手都是这样走过来的。 我们选用的教材是《C Programming Language》，非常适合看书编程学习。跟着坚持下去，肯定学得会。

user: user-6
content: 就是基础差罢了。 这也难怪， 一个大学新生， 一边学计算机原理， 一边已经开始学C语言， 好像没有这么干的， 但大学就是如此。 填鸭教育 嘎嘎。

user: user-7
content: 一开始 学习编程我也是这样，慢慢来 就好了，但一定要去尝试着写代码

user: user-6
content: Good good study, day day up!嘎嘎

user: user-8
content: 好好学习，认真听课
user-0 提问: poj 1002

回复:
user: user-0
content: 还是WA呢?

user: user-1
content: 在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。  static char ph[100000][9];

user: user-0
content: 老是WA，运行原来的数据也没错，我用二维数组去存电话号码，将输入的字串转化为标准形式，然后放入ph数组里面，最后qsort排序，在用以上算法，运行结果没问题，但就是WA，这道题是我返回来做的，现在都还在WA，请问出了什么毛病，是最后那段算法出了问题吗？
user-0 提问: 关于伸展树内部路径长证明的疑问

回复:
user: user-1
content: 你看得是<<数据结构与算法分析 c语言描述>>吗? b.如果进行find操作（就是根据伸展树的伸展原理把目标节点提升到树根的那个操作),find(1),find(2),find(3),find(4),find(5),find(6) 操作后，分别计算内部路径长 你可以看看书中32个节点的例子, 跟这个类似,就可以求出内部路径长了.

user: user-0
content: 好像很多都是关于怎么操作的论述。。。。和证明这俩没什么联系。。。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:其实我真的真的在这个问题上知道的比楼主还少，只能帮顶。  赵老师谦虚了。。。。  我觉得我现在学的数据结构这本书。。。这类的证明题都好难

user: user-2
content: 其实我真的真的在这个问题上知道的比楼主还少，只能帮顶。

user: user-2
content: http://www.baigoogledu.com/s.php?hl=zh-CN&q=%C9%EC%D5%B9%CA%F7%C4%DA%B2%BF%C2%B7%BE%B6%B3%A4

user: user-2
content: 先别急着去看书，还是先用http://www.baigoogledu.com/搜搜看吧。

user: user-2
content: 看完了变成可别赖我啊！

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:[quote=引用 2 楼 Philipyexushen 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] 其实我真的真的在这个问题上知道的比楼主还少，只能帮顶。  赵老师谦虚了。。。。  我觉得我现在学的数据结构这本书。。。这类的证明题都好难[/quote] 《线性代数》 《概率论与数理统计》 《数论》 [/quote]  额，好的我去看一下

user: user-2
content: 引用 2 楼 Philipyexushen 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] 其实我真的真的在这个问题上知道的比楼主还少，只能帮顶。  赵老师谦虚了。。。。  我觉得我现在学的数据结构这本书。。。这类的证明题都好难[/quote] 《线性代数》 《概率论与数理统计》 《数论》
user-0 提问: poj 1007

回复:
user: user-1
content: 引用 8 楼 cdddfq 的回复:程序能够运行了，可是一直wa，又是什么原因？ 可能不让用qsort，改为冒泡排序试试。

user: user-2
content: 先把问题描述出来

user: user-0
content: WA,实在看不出什么问题了

user: user-0
content: 哦，对了，谢谢赵老师，我会练的

user: user-0
content: 程序能够运行了，可是一直wa，又是什么原因？

user: user-0
content: 恩，谢谢老师，我的指法确实存在问题，这也是我所清楚的，我会细心练习的！

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-1
content: int cmp(const void *a,const void *b)     {         if(((struct order *)a)->reverse!=((struct order *)b)->reverse)             return(((struct order *)a)->reverse>-((struct order *)b)->flagreverse);         else             return(((struct order *)a)->flag-((struct order *)b)->flag);     }

user: user-1
content: int cmp(const void *a,const void *b)     {         if(((struct order *)a)->reverse!=((struct order *)b)->reverse)             return(((struct order *)a)->reverse>((struct order *)b)->flagreverse);         else             return(((struct order *)a)->flag-((struct order *)b)->flag);     }

user: user-0
content: 这是一个求逆序数的问题，我用flag作为稳定qsort的标记，调试过后发现逆序数算法没问题，不过一断点到qsort就发现结构体数组没有排序，下面是我的代码，经过单步跟踪调试 发现qsort没有起到将reverse作为一级排序，flag作为二级排序的作用
user-0 提问: 我是小白 ，有大神可以解释下吗 为什么是 1,2 不是1,3

回复:
user: user-1
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-2
content: 是，a&&b当a为假的时候，后面的就不执行了，a||b为假的时候，再判断b，最后再输出结果！同为菜鸟！

user: user-3
content: 楼上的解答是对的！ 第一次循环条件是(a=-2)&&(b=1)，执行循环体（楼主的程序中没有）后，a=-1，b=1； 第二次循环条件是(a=-1)&&(b=2)，循环后a=0，b=2； 第三次循环条件a=0，&&运算为假，后面的b++不再执行，循环结束，所以b是第二次循环后的结果   #include<stdio.h> int main() { 	int a=-2; 	int b=0; 	while(a++&&++b) 		printf("%d %d\n",a,b); 	printf("%d %d\n",a,b); 	return 0; }

user: user-4
content: int a=-2; int b=0; while(a++&&++b);   第一次循环：a=-1;b=1; 第二次循环：a=0;b=2; 第三次循环：a++这个表达式的值是0，就表条件不成立，++b就不在运算了，而a加了一，变成1，故最后输出1,2。 这是运算符&&的”短路“现象。
user-0 提问: 下面这个程序时快速排序的实现，不知道哪儿出问题，求指教？

回复:
user: user-0
content: 引用 2 楼 fly_dragon_fly 的回复:while (low < high) low和high如果都不变，这个语句没法退出，既然是递归实现，这个while就没必要，你要while就不要递归。正解，多谢了！

user: user-1
content: int QSort(int *a, int low, int high) {     int pivot;     while (low < high)     {         pivot = Partition(a,low,high); //        QSort(a,low,pivot); //        low = pivot+1; /****如果按照上面两句就是对的，但如果换成下面两行代码就不对，这有什么区别呢？****/ /*答：上面两句每执行一次while循环，QSort函数只执行一次，low位置改变一次，下面两行要执行QSort函数两次，low位置改变一次*/          QSort(a,low,pivot);          QSort(a,pivot+1,high);     }     return 0; }

user: user-2
content: while (low < high) low和high如果都不变，这个语句没法退出，既然是递归实现，这个while就没必要，你要while就不要递归。

user: user-3
content: 具体的实现方法没看   while (low < high)     {         pivot = Partition(a,low,high); //        QSort(a,low,pivot); //        low = pivot+1; /****如果按照上面两句就是对的，但如果换成下面两行代码就不对，这有什么区别呢？****/          QSort(a,low,pivot);         QSort(a,pivot+1,high);   //使用下面这个不是在while(1) 中么？     }
user-0 提问: printf函数的参数压栈顺序问题

回复:
user: user-1
content: http://bbs.csdn.net/topics/370153775

user: user-0
content: 引用 2 楼 lin5161678 的回复:你被骗了  题目是错的  参数的压栈顺序是压栈顺序 和副作用没什么关系  你应该去看看本版的置顶帖 麻烦给个链接呗

user: user-0
content: 引用 1 楼 akirya 的回复:你被坑了。。 求解释啊

user: user-2
content: 你被骗了  题目是错的  参数的压栈顺序是压栈顺序 和副作用没什么关系  你应该去看看本版的置顶帖

user: user-3
content: 你被坑了。。
user-0 提问: 用puts输出数组中的字符串

回复:
user: user-1
content: w中存放小写字母 c中存放大写字母

user: user-1
content: 我猜你是想把大写字母和小写字母区分开来，对吗？ 如果是这样，有几处要改动：  int main() { 	char a[100], w[100], c[100]; 	int i = 0, k = 0, l = 0; 	gets(a); 	while (a[i] != '\0') 	{ 		if (a[i] >= 'a' && a[i] <= 'z') 		{ 			w[k] = a[i]; 			k++; 		} 		else 		{ 			c[l] = a[i]; 			l++; 		} 		i++; 	} 	//scanf("\0", &w[k]); 	//scanf("\0", &c[l]); 	w[k] = '\0'; 	c[l] = '\0';         printf("w="); 	puts(w);         printf("c="); 	puts(c); 	return 0; }  //alskdDSAasdWEFasd //w=alskdasdasd //c=DSAWEF

user: user-2
content: scanf("\0",&w[k]); scanf("\0",&c[l]);  改为： w[k] = '\0'; c[l] = '\0';   puts是对字符串进行处理，需要‘\0’来结束
user-0 提问: C语言调试时出现了unhandled exception...查资料说是用了非法内存，但是检查不出来啊，求大神指导，代码如下

回复:
user: user-1
content: char * ptr[LIM];。。。。 你这个。。。。 要么char *ptr 要么char ptr [ ]。。。。

user: user-2
content: 你这错得好凌乱呀~~ 基本上代码都是"废"代码  - -!!! 主要是指针搞错了 如输入函数  int input(char * str[], int num); char *str[]  跟  char (*str)[SIZE] 是两码事 .....  代码中处理二维表  char str[LIM][SIZE] 的指针可以是  int input( char str[LIM][SIZE], int num); 或者  int input( char (*str)[SIZE], int num); 等...... ...... 因为指针搞错了所以你代码中所有关于指针的操作都有问题,..为以才非法使用内存  把指针理一理重新写写就OK了  // ps :你用的是什么编译器呀..没给 错误/警告 ?? //// 你的 结帖率：0%     ....唉~~

user: user-0
content: 没人搭理么……

user: user-0
content: 不怎么会用论坛，也不知道发的对不对。。。见谅
user-0 提问: 求问个算法问题（正常的数我还可以试着写一写，可这这样大这样多应该怎么办）

回复:
user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:[quote=引用 6 楼 henuyx 的回复:] 要我出题，n个数应该是无序的！！ 要我出题,整数位数不限长度,只要硬盘能存下.[/quote] 这样的话要怎么定义啊 就算是动态分配的话 不也的是有个范围吗？

user: user-0
content: 引用 13 楼 mymtom 的回复:[quote=引用 12 楼 my_bkb 的回复:] [quote=引用 9 楼 zhao4zhong1 的回复:] [quote=引用 6 楼 henuyx 的回复:] 要我出题，n个数应该是无序的！！ 要我出题,整数位数不限长度,只要硬盘能存下.[/quote] 那个还是想问下 这里的n的数量是没有限制的 ，那要怎么定义啊[/quote] 根据n动态分配内存就可以啊[/quote] 怎么个分配法？

user: user-1
content: 引用 12 楼 my_bkb 的回复:[quote=引用 9 楼 zhao4zhong1 的回复:] [quote=引用 6 楼 henuyx 的回复:] 要我出题，n个数应该是无序的！！ 要我出题,整数位数不限长度,只要硬盘能存下.[/quote] 那个还是想问下 这里的n的数量是没有限制的 ，那要怎么定义啊[/quote] 根据n动态分配内存就可以啊

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:[quote=引用 6 楼 henuyx 的回复:] 要我出题，n个数应该是无序的！！ 要我出题,整数位数不限长度,只要硬盘能存下.[/quote] 那个还是想问下 这里的n的数量是没有限制的 ，那要怎么定义啊

user: user-1
content: bsearch函数就能解决的问题呀  #include <stdio.h> #include <string.h> #include <stdlib.h>  #define SIZE    12  char * format(char buf[SIZE + 1]) {     int len;      len = strlen(buf);     memmove(buf + (SIZE - len), buf, len + 1);     memset(buf, '0', SIZE - len);      return buf; }  int compare(const void *v1, const void *v2) {     return memcmp(v1, v2, SIZE); }  int main(int argc, char *argv[]) {     int ret;     int m, n;     int i, j;     char *mp;     char *np;      if (scanf("%d %d", &n, &m) != 2)         exit(1);      mp = malloc((SIZE + 1) * m);     np = malloc((SIZE + 1) * n);      for (i = 0; i < n; i++) {         scanf("%12s", &np[(SIZE + 1) * i]);         format(&np[(SIZE + 1) * i]);     }      for (j = 0; j < m; j++) {         scanf("%12s", &mp[(SIZE + 1) * j]);         format(&mp[(SIZE + 1) * j]);     }      for (j = 0; j < m; j++) {         if (bsearch(&mp[(SIZE + 1) * j], np, n, SIZE + 1, compare)) {             printf("%s: yes\n", &mp[(SIZE + 1) * j]);         } else {             printf("%s: no\n", &mp[(SIZE + 1) * j]);         }     }      free(mp);     free(np);      return 0; }

user: user-2
content: static char[1000000][13];

user: user-2
content: 引用 6 楼 henuyx 的回复:要我出题，n个数应该是无序的！！ 要我出题,整数位数不限长度,只要硬盘能存下.

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:用字符串比较的话，注意比较前将宽度不够12个数字的数左边补0 还有这个我用数字数组行吗 ，可我怕数字数组太大编译不通过

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:[quote=引用 3 楼 gqjjqg 的回复:] 别怕，数值范围是1 - 10^12，可以int64(long)保存。 查询用二分搜索，或者做个hash表查询。 int64通常是long long而非long，此题如果改为10的21次方，int64就不够了。[/quote] 这里面这个n怎么办啊，你n>=1,没有最大范围啊  还有这个数组 由于数组里面的数太大了 我这样定义数组可以吗 unsigned long long a[1000000000000000];

user: user-3
content: 要我出题，n个数应该是无序的！！

user: user-2
content: 引用 3 楼 gqjjqg 的回复:别怕，数值范围是1 - 10^12，可以int64(long)保存。 查询用二分搜索，或者做个hash表查询。 int64通常是long long而非long，此题如果改为10的21次方，int64就不够了。

user: user-2
content: 用字符串比较的话，注意比较前将宽度不够12个数字的数左边补0

user: user-4
content: 别怕，数值范围是1 - 10^12，可以int64(long)保存。 查询用二分搜索，或者做个hash表查询。

user: user-2
content: 字符串比较＋二分查找。

user: user-5
content: 转成字符对比查找的方式……
user-0 提问: CString 对象Format遇到的内存读取问题

回复:
user: user-1
content: 四楼说的是对的！或者你把vs编译环境换成debug也行

user: user-2
content: 引用 8 楼 henanwansui 的回复:7楼的方法都试了，str.Format(L"%.2f",a);这种会出现无法参数转化的错误，加T的话，没有用，还是指向atlsimpstr.h文件， 唉，这个问题折磨好几天了  你把代码垃圾文件删掉, 传到网盘. 如果不需要保密的话

user: user-0
content: 7楼的方法都试了，str.Format(L"%.2f",a);这种会出现无法参数转化的错误，加T的话，没有用，还是指向atlsimpstr.h文件， 唉，这个问题折磨好几天了

user: user-3
content: vc6.0里面，CString 默认情况下代表的是ascii字符集，而VC2010里，默认情况下，CString代表的是unicode字符集，所以，赵4老师说的是对的  str.Format(_T("%.2f"),a);  要加一个_T()，或者  str.Format(L"%.2f",a);  因为在VC2010下CString的Format函数的原型是:  Format(const wchar_t* ,...)  所以你的第一个参数，必须使用wchar的字符串常量

user: user-0
content: 不是a是否初始化的问题，问题出在Format函数处，断点停在这，然后转到 CStringData *GetData() const throw() { return (reinterpret cast<CStringData *>(m_pszData)-1); ｝这个位置，会显示Unhandled exception at 0x5a20fe3c(mfc100d.dll ) in 76p.exe :0xC0000005:Access violation reading location 0x00006644, 而且程序中的CString 类的对象在vc6.0中是可以编译的，但在VS2010环境下就出现问题，

user: user-4
content: a需要初始化

user: user-5
content: str.Format("%.2f",a); 和 str.Format(_T("%.2f"),a); 不是一回事！

user: user-2
content: 引用 2 楼 henanwansui 的回复:其实，我已经试过这种可能了，还是错误。我看了程序，出现错误的都是CString类，而且最后的断点都指向 CStringData *GetData() const throw() { return (reinterpret cast<CStringData *>(m_pszData)-1); ｝这个位置  我就vs2010, 为什么我能跑过呢  #include <StdAfx.h> #include<iostream> #include <afxwin.h> using namespace std;  int main(int argc, char* argv[]) { 	CString str; 	float a = 0; 	str.Format(_T("%.2f"),a); 	cout << a << endl; 	system("pause"); }

user: user-0
content: 其实，我已经试过这种可能了，还是错误。我看了程序，出现错误的都是CString类，而且最后的断点都指向 CStringData *GetData() const throw() { return (reinterpret cast<CStringData *>(m_pszData)-1); ｝这个位置

user: user-2
content: float a = 0;  永远记住要初始化变量. 所有有时候不是必须的, 但是省的麻烦.
user-0 提问: 求大神指教。帮忙运行一下看看错误在哪，怎么改正 

回复:
user: user-1
content: 引用 4 楼 qq_18888869 的回复:谢谢 ，你的程序确实正确！能告诉一下我 我的那个程序错误在哪吗。。。十分感谢 嘿嘿，根据你贴的代码，首先有一些编译错误，比方说main函数声明错误、变量重复定义等等 但这些都是很简单的，编译期间的错误你根据编译器的提示来解决的话很方便的 至于如何解决运行期间的错误无非就是各种调式啦

user: user-0
content: 谢谢 ，你的程序确实正确！能告诉一下我 我的那个程序错误在哪吗。。。十分感谢

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

user: user-1
content: 简单测试结果

user: user-1
content: //仅供参考 //简单的按照楼主的思路修改了下，希望有所帮助(楼主想用的是单向链表吧) #include<stdio.h> #include<string.h> #include<malloc.h>  struct node { 	char name[20]; 	int num; 	char sex[10];//考虑到中文字符男女性，所以改为数组 	int age; 	float score[10]; 	struct node *pNext; };  struct node *g_pHead,*g_pTail;//全局指针类型变量，加了个g_p前缀，个人习惯，嘿嘿  void init_ht() { 	g_pHead=NULL; 	g_pTail=NULL; }  void destory_ht()//添加与init_ht()对应的销毁函数，释放资源,避免内存泄露 { 	struct node* pTemp1=g_pHead; 	while(pTemp1) 	{ 		struct node* pTemp2=pTemp1->pNext; 		free(pTemp1); 		pTemp1=pTemp2; 	} 	g_pHead=NULL; 	g_pTail=NULL; }  void put(struct node *p) { 	if(p!=NULL) 	{ 		if(g_pHead==NULL) 		{ 			g_pHead=p; 		} 		if(g_pTail!=NULL) 		{ 			g_pTail->pNext=p;//将上个尾节点的next指针指向当前节点 		} 		g_pTail=p;//更新尾节点 	} }  void print_node(struct node* p)//打印节点的函数 { 	printf("\n%s\n","=========begin==========");//加个分割线 	printf("name=%s\n",p->name); 	printf("num=%d\n",p->num); 	printf("sex=%s\n",p->sex); 	printf("age=%d\n",p->age); 	printf("scores="); 	for(int i=0;i<10;i++) 	{ 		printf("%f\t",p->score[i]); 	} 	printf("\n%s\n","=========end==========");//加个分割线 }  void input_data() { 	int i; 	char ch; 	struct node *p=NULL; 	while(1) 	{ 		fflush(stdin); 		printf("input data(Y/N):"); 		scanf("%c",&ch);//这里将getch()改为scanf();不然会出问题 		if(ch=='y'||ch=='Y') 		{ 			p=(struct node *)(malloc(sizeof(struct node))); 			memset(p,0,sizeof(struct node));//初始化p中属性，避免未知值 			printf("input name:"); 			scanf("%s",&p->name); 			printf("input num:"); 			scanf("%d",&p->num); 			printf("input sex:"); 			scanf("%s",&p->sex); 			printf("input age:"); 			scanf("%d",&p->age); 			printf("input 10 score:"); 			for(i=0;i<10;i++) 			{ 				scanf("%f",&p->score[i]); 			} 			put(p); 		} 		else 			break; 	} }  void FDname() { 	char name[20]; 	struct node *p; 	printf("input name:"); 	scanf("%s",name); 	p=g_pHead; 	int iCount=0;//统计计数 	while(p!=NULL) 	{ 		if(strcmp(name,p->name)==0) 		{ 			++iCount; 			print_node(p); 		} 		p=p->pNext; 	} 	if(iCount==0) 	{ 		printf("没有该记录！\n"); 	} }  void FDnum() { 	int i,num; 	struct node *p; 	printf("input num:"); 	scanf("%d",&num); 	p=g_pHead; 	int iCount=0;//统计计数 	while(p!=NULL) 	{ 		if(num==p->num) 		{ 			++iCount; 			print_node(p); 		} 		p=p->pNext; 	} 	if(iCount==0) 	{ 		printf("没有该记录！\n"); 	} }  void find_data() { 	char ch; 	while(1) 	{ 		fflush(stdin);//刷新输入缓冲，避免后续输入错误 		printf("1:Find by name\n"); 		printf("2:Find by num\n"); 		printf("3:Exit\n"); 		scanf("%c",&ch); 		switch(ch) 		{ 		case '1': 			FDname(); 			break; 		case '2': 			FDnum(); 			break; 		case '3': 			return; 		} 	} }  void main() { 	init_ht(); 	input_data(); 	find_data(); 	destory_ht(); }
user-0 提问: 一道递归函数，把我搞糊涂了

回复:
user: user-1
content: 仔细的画图理解就可以了

user: user-2
content: 递归调用与一般调用是不一样的。 函数在调用另一个函数时，会开辟空间生成调用函数栈帧和被调用函数栈帧，调用函数会push保存寄存器如eax，edx，ecx，被调用函数也会push保存寄存器到栈中，比如edi，ebx，esi，ebp，esp，所有的中间值都保存在每一个调用所对应的栈帧中。在调用结束时pop恢复这些寄存器，同时返回到之前保存的调用函数地址，这样一步步逆着原来的顺序返回。 如果是一般的函数调用，就只需恢复寄存器然后执行ret指令返回；但是在递归调用时，除了要恢复寄存器，还要执行一些含有递归意义的指令，否则只是把中间的值保存，而没有利用， 这里  printf("%d", n);         e(--n); 的作用就是把每个保存在栈帧中的值打印出来，然后把这个值减1（n--），再次利用递归把比它小的值按同样的递归方法打印出来此处e(--n)是纯粹的重复递归，似乎意义不大。这两句其实就是你利用递归需要达成的目的。

user: user-3
content: 用笔画画图就能看懂了

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

user: user-5
content: 问题是什么了？

user: user-6
content: void e(int , int, char*);    int main() { 	int a; 	int count = 0; 	a=3; 	e(a, count, "fist time"); 	system("pause"); } void printFormat(int count) { 	for (int i = 0; i < count; i++) 	{ 		printf("\t"); 	} } void e(int n, int count, char * p) { 	printFormat(count); 	printf("%s第%d层入口\n", p, count); 	if(n>0) 	{ 		count++; 		e(--n, count, "before print"); 		printFormat(count - 1); 		printf("printing第%d层值%d\n", count-1, n); 		e(--n, count, "after print"); 		count--; 	} 	printFormat(count); 	printf("%s第%d层出口\n", p, count); 	count--; }
user-0 提问: c语言for语句与if语句的嵌套使用

回复:
user: user-1
content: 这种问题太低端了，大神都不愿意解决

user: user-2
content: 这跟一下不就知道了?

user: user-3
content: 单步调试就知道了。

user: user-4
content: 单步调试吧...

user: user-5
content: 这种问题不是走一下编译器 调试一下就OK的么....

user: user-1
content: 我大概看懂了，不是只循环了一遍，而是每次循环都是在给a[i][j]，i=n-1,j=n-1,赋值，但是n 的值没变，所以你的数组就只有一个值其他的都是0

user: user-1
content: 楼主代码的目的是什么

user: user-6
content: 你猜~~~~~~~~~~~~

user: user-7
content: 循环的次数由你输入的n的大小决定的啊~~~向赵四老师致敬，多单步试试。。。

user: user-8
content: VC6不象后来的VS，总是无端地臃肿、无端地保留或封装功能、无端地升级、……

user: user-9
content: 输入的n是多少？

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

user: user-10
content: VS编译器，何其强大，会用工具，是一个程序员的基本功

user: user-11
content: 引用 2 楼 zhao4zhong1 的回复:代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  赵老湿， C发展到今天， VS已经无法应对。 不， 不是无法应对， 是Microsoft公司不愿应对， MOFT公司自己都说从VC6之后， 不再支持新的C语言标准， 为什么您老 向学生们推荐VS 这里是C语言版块 你个老家伙居心何在？ 唵？ 嘎嘎~~~~~~
user-0 提问: 函数 传指方式，得不到相应的值，咋回事？

回复:
user: user-1
content: 看代码没看出问题来，会不会别的地方内存溢出了。检测下没贴出来的代码。

user: user-2
content: recv_data[i]=*(volatile unsigned int *)FPGA_READ;   把volatile 去掉试试看。

user: user-0
content: 引用 1 楼 user-4 的回复:recv_data[i]=*(volatile unsigned int *)FPGA_READ;     函数中指针类型改变，操作的内存空间也变了  不是这个原因

user: user-3
content: 单步调试一下吧

user: user-4
content: recv_data[i]=*(volatile unsigned int *)FPGA_READ;     函数中指针类型改变，操作的内存空间也变了
user-0 提问: 为什么用pow函数计算结果有误？少了一个水仙花数，费解

回复:
user: user-1
content: 运行时库的pow()的精度有问题？基本上该换掉了…… 不换的话，本题中可将所有pow()的返回值或者它们的总和手动四舍五入到整数后再与n比较。

user: user-2
content: pow()函数的第一个参数好像不能是int型的，你把它强制转换成double型再把返回值强制转换成int型试试。

user: user-3
content: 引用 6 楼 zhao4zhong1 的回复:if(n==pow(n/100,3)+pow(n%100/10,3)+pow(n%10,3)) 改为 if(1E-6<fabs(n-(pow(n/100,3)+pow(n%100/10,3)+pow(n%10,3))) 纠正楼上 if(1E-6>fabs(n-(pow(n/100,3)+pow(n%100/10,3)+pow(n%10,3)))

user: user-3
content: if(n==pow(n/100,3)+pow(n%100/10,3)+pow(n%10,3)) 改为 if(1E-6<fabs(n-(pow(n/100,3)+pow(n%100/10,3)+pow(n%10,3)))

user: user-3
content: double pow( double x, double y );  http://bbs.csdn.net/topics/390676437

user: user-4
content: he pow(int, int) overload is no longer available. If you use this overload, the compiler may emit C2668. To avoid this problem, cast the first parameter to double, float, or long double.

user: user-5
content: 这个算法还是不要用浮点运算吧  int main(int argc, char *argv[]) {     int i, n;     int d1, d2, d3;      i = 0;     for (n = 100; n < 1000; n++) {         d1 = n % 10;         d2 = n % 100 / 10;         d3 = n / 100;         if (n == d1*d1*d1 + d2*d2*d2 + d3*d3*d3) {             i++;             printf("%d\n", n);         }     }     printf("%d\n", i);      return 0; }
user-0 提问: #define的一点问题

回复:
user: user-1
content: 楼主的问题，归根结底是不懂得预处理。学一下预处理即可。 楼上还有人说用const限定的类型，其对象位于.rdata 实际上位于哪里并不重要。这样的理解已经本末倒置。 引入const，只是一种优化提示， 是你用const告诉编译器，你并不准备修改一个对象的值。这是你对编译器的保证，编译器接受你的保证，优化代码。 现在的情况是， 有些人并不了解const的语义，在他们那里const变成了一种攻防关系。于是，他自己声明了一个const限定类型的对象，然后又想着能不能修改它，这不是很荒谬吗？？

user: user-2
content: 你打印的是C啊，写错了！

user: user-3
content: const 是在编译时确定的内存大小，定义一个const ，编译时内存中是要为这个变量分配存储位置的，一般的exe文件多半是在 .rdata节，并将初始值赋给这块区域。 define是一个字符串替换，打个比方 ：   # define x  class x y {  int m;  int n; };  则编译时x 会被替换成class字符串，源代码就变成了：  class y {  int m;  int n; };  define 只是个编译器命令，不分配内存的，你宏定义出来的2 是直接硬编码进二进制文件，不进行内存操作。 看看这篇博客就知道了： http://blog.csdn.net/u012842205/article/details/40452799

user: user-4
content: const     effective C++不是说了吗，跟编译时提示有关，define在预处理时已经换成具体值了，如果有问题没有任何提示。

user: user-5
content: 哥哥，c的值一直是0……你看你打印那里，define定义的还是可以加减啊！

user: user-6
content: 打印错误，你打印的一直都是c的值，所以一直都是0！

user: user-7
content: VC编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898

user: user-8
content: printf_s("二维数组的平均值为%f\n",c);这里打印的是c的值，c的值没有变过当然为0啊。你是想打印b的值吧：printf_s("二维数组的平均值为%f\n",b); #define是宏定义，在预处理阶段就进行宏替换了，比如你这个程序在预处理阶段时就把这个源文件中所有NUM1都替换成了2.0，NUM2都替换成3.0，之后才进行编译。而const是声明常量，被const声明的变量占用内存空间，而#define没有，const有类型检查，而#define仅仅做了替换没有类型检查

user: user-9
content: 你的c的值不是一直是0么    没赋其他值啊
user-0 提问: Matlab中的结果显示位数更改

回复:
user: user-1
content: 百度随便搜一下，应该能找到答案。

user: user-0
content: 我已经找到了，谢谢您的回答，还望以后多多帮助。

user: user-1
content: 试试在你窗口的右上角“搜索文档”输入框中输入“数据格式”，回车，在弹出的联机帮助中寻找答案。

user: user-0
content: 百度上都是这个答案'file-> preference->command window->text display->numeric format，我知道这个没错，可是我的matlab不是这个版本的，而是这个
user-0 提问: c语言

回复:
user: user-0
content: 谢谢大家

user: user-1
content: 写完这个程序，朕要觉觉了。明天还要上班，嘎嘎~~ # include <stdio.h>  int main (int argc, char * argv []) {     while (argc --)         printf ("argv [%d] is '%s'\n", argc, argv [argc]); }

user: user-2
content: 程序的运行参数 argc参数个数 argv[0]指向程序绝对路径名，argv[1...argc - 1]是传递的参数，argv[argc] = NULL

user: user-3
content: 同意楼上的。

user: user-4
content: main函数的第一个参数argc就是命令行参数个数，也就是第二个参数argv数组元素个数。而argv[0]是命令行的程序名。
user-0 提问: 菜鸟

回复:
user: user-1
content: 处女贴留给你了，我也是新手，多多学习。

user: user-2
content: 单片机如果自学的话就单片机原理及应用吧， 感觉随便一个都可以，讲的差不多。不过首先你要看微机原理及应用 ，这个是基础。还有c语言当然编程要会。没有基础就从基础开始学就行了 ，书多的是。

user: user-3
content: 到底是学单片机还是C语言啊

user: user-4
content: 主要看楼主将来用什么芯片了 51看这本可以 其他芯片的话就要找和芯片对应的书了
user-0 提问: 菜鸟求问C语言命令行参数?

回复:
user: user-1
content: return之前加上system("pause");

user: user-2
content: http://bbs.csdn.net/topics/390469280

user: user-3
content: 引用 3 楼 likfeng 的回复:[quote=引用 1 楼 user-6 的回复:] return前一句加上:getchar(); 需要带参数运行，比如 xxx.exe help[/quote]  应该就是这么回事。。

user: user-4
content: 引用 1 楼 user-6 的回复:return前一句加上:getchar(); 需要带参数运行，比如 xxx.exe help

user: user-5
content: 你传了几个参数啊， 在启动应用程序的瞬间传参数。

user: user-6
content: return前一句加上:getchar();
user-0 提问: C程序：写字符至磁盘文件出现内存越界，实在检查不出问题所在，望有心人提点一下

回复:
user: user-0
content: 多谢，问题解决了。原来就是这里的问题

user: user-0
content: 多谢一根烂笔头，我再去检查下。写此程序初衷是针对某个特定的问题，故严格控制了fp1文件的大小。

user: user-1
content: while(EOF!=(current=getc(fp1))) { if(current=='\n') { buffer[i][j] = '\0'; i++; j = 0; } else { buffer[i][j] = current; j++; } }  此循环可能导致数组越界
user-0 提问: 是fscanf的问题还是我的编译器的问题！

回复:
user: user-1
content: http://bbs.csdn.net/topics/360055953

user: user-0
content: 引用 7 楼 gqjjqg 的回复:输入文件里的内容超过缓冲区大小了吧。  不知道啊，，反复注释了几次后来成功了，如果是缓冲区的问题是用setvbuf这个函数吗，，这个函数一直不知道用在什么地方啊。。

user: user-2
content: 输入文件里的内容超过缓冲区大小了吧。

user: user-0
content: 引用 5 楼 hnwyllmm 的回复:测试了一下，运行的挺好，不过我没有VC6，用的GCC编译器，在Linux上执行的 int main(void) {     typedef struct word     {         char word[20];         int count;     }Item;//将这个结构体的名字换成Item     Item item;//定义个结构体变量     FILE * fp;     if ((fp = fopen("1.txt", "r")) == NULL)     {         fprintf(stderr, "Can't open the file.\n");         exit(1);     }     while(fscanf(fp, "%s", item.word) != EOF)     {         printf("%s\n", item.word) ; // 这里打印出来都是正确的     }     return 0 ; }  对啊，，，我一直觉得我fscanf写的根本没问题，但是一运行读取就出错，，反复试了好几次，感觉是不是编译器的原因。。。另外想问下，，我想学linux的话，，是最好装个linux呢还是用VMware模拟也行呢。。

user: user-3
content: 测试了一下，运行的挺好，不过我没有VC6，用的GCC编译器，在Linux上执行的 int main(void) {     typedef struct word     {         char word[20];         int count;     }Item;//将这个结构体的名字换成Item     Item item;//定义个结构体变量     FILE * fp;     if ((fp = fopen("1.txt", "r")) == NULL)     {         fprintf(stderr, "Can't open the file.\n");         exit(1);     }     while(fscanf(fp, "%s", item.word) != EOF)     {         printf("%s\n", item.word) ; // 这里打印出来都是正确的     }     return 0 ; }

user: user-0
content: 引用 2 楼 user-4 的回复:fscanf函数一般用来读取文本文件中的数据，难道楼主的文件是二进制的？  读单词，，肯定是文本文件啊。。。

user: user-0
content: 引用 1 楼 hnwyllmm 的回复:楼主的代码还真的贴出来，要把怎么读取字符串的代码贴出来 验证这个读取是否正确的方法很简单，把读取出来的内容打印出来不就好了  typedef struct word  { char word[20]; int count; }Item;//将这个结构体的名字换成Item Item item;//定义个结构体变量 FILE * fp; if ((fp = fopen("1.txt", "r")) == NULL) { fprintf(stderr, "Can't open the file.\n"); exit(1); } while(fscanf(fp, "%s", item.word) != EOF) //将文件里的单词临时保存在item.word里，然后在循环里进行添加到树的操作 ......  贴个大概，当时是一运行程序就停止工作，VC6上看的很明显是读取的问题，然后反复注释这行，最后一次消掉注释的时候，才运行成功了。

user: user-4
content: fscanf函数一般用来读取文本文件中的数据，难道楼主的文件是二进制的？

user: user-3
content: 楼主的代码还真的贴出来，要把怎么读取字符串的代码贴出来 验证这个读取是否正确的方法很简单，把读取出来的内容打印出来不就好了

user: user-3
content: 引用 6 楼 guicaisa 的回复:[quote=引用 5 楼 hnwyllmm 的回复:] 测试了一下，运行的挺好，不过我没有VC6，用的GCC编译器，在Linux上执行的 }[/code]  对啊，，，我一直觉得我fscanf写的根本没问题，但是一运行读取就出错，，反复试了好几次，感觉是不是编译器的原因。。。另外想问下，，我想学linux的话，，是最好装个linux呢还是用VMware模拟也行呢。。[/quote] 你感觉自己的电脑配置还可以，装个虚拟机不会卡，就用虚拟机好了 要是虚拟机卡，装双系统，Windows系统还是有必要用的，很多办公软件还是Windows系统好用
user-0 提问: 函数疑问

回复:
user: user-0
content: 这个没啥问题，这个程序if的执行语句都是赋值，既然都是赋值只需要包括所有情况就行了，作者为什么不一个if或者2个if就解决问题？还是因为n_search变量在后面3个if语句初始值不是0，而是前面if里面for语句自加后的n_search?

user: user-1
content: int main() { 	int a =10,b=0; 	 	if(a > 3) 		b++; //执行 	if(a > 5) 		b++; //执行 	if(a > 9) 		b++; //也执行  	//所以进不进前面的if和后面的if条件判断是没有关系的只和if语句的条件有关 	 }

user: user-2
content: void make_search_table(int i1,int j1,int k, int data_w, int data_h) {   int i,j;   n_search=0;   if(k==0) return;   if((j1-k)>= -1)     for(i=i1-k;i<i1+k;i++)       if((i>= -1)&&(i<data_w))         {si[n_search]=i; sj[n_search++]=j1-k;}    if((i1+k)<data_w)     for(j=j1-k;j<j1+k;j++)       if((j>= -1)&&(j<data_h))            {si[n_search]=i1+k; sj[n_search++]=j;}    if((j1+k)<data_h)     for(i=i1+k;i>i1-k;i--)       if((i>= -1)&&(i<data_w))              {si[n_search]=i; sj[n_search++]=j1+k;}    if((i1-k)>= -1)     for(j=j1+k;j>j1-k;j--)       if((j>= -1)&&(j<data_h))                 {si[n_search]=i1-k; sj[n_search++]=j;} } 帮你排下。。
user-0 提问:   Win7环境下基于Eclipse的STM32F4x GCC 开发环境调试问题

回复:
user: user-1
content: 楼主你到底是解决了还是没解决啊？我把jlink_path和server的名字改成jinkgdbserver，能启动gdbserver但是报错 Error in services launch sequence Starting J-Link GDB Server timed out.

user: user-0
content: 解决了，就这样。

user: user-2
content: 楼主解决了吗？小弟也遇到类似问题，若解决能否给小弟发一个工程例子，学习一下配置方法。991353018@qq.com不胜感激
user-0 提问: POJ1001在VC上能正确运行，提交到POJ就说编译错误。

回复:
user: user-1
content: 自己没有测试吗？VC6下也不行吧？

user: user-2
content: VC下一般编译CPP文件用的是C++编译器，编译C文件用的是C编译器。 所以即使你是VC下的CPP编译通过，也只能说明你的代码 符合VC的C++标准，挂在OJ的标准C编译器上通不过，非常正常。  选用OJ的C++编译 会有较大概率通过。

user: user-3
content: windows下想做oj题目就用dev c++吧，只要是dev c++能够编译过。提交后肯定没问题。

user: user-4
content: 不要用vc6.0  for(int i=0; i<6; i++) {}正常的C++, i的范围是在大括号里面的
user-0 提问: C-链表元素通过指针循环赋值  出现segment fault

回复:
user: user-0
content: 已解决..pq双方面指针问题..

user: user-0
content: 引用 1 楼 user-1 的回复:错误太多.写完一个函数, 用printf测试好了再写下一个.   			q=(DuLinkList)malloc(sizeof(DuLNode));//这里q指向了新分配的地址, 新的!所以q的data,pre,next都没赋值 			p=(*q).prev;//q的prev是未知地址, 这句后p就是未知地址 			q=p;//这句之后, q和p一样, 指向了未知地址 //终于成功的把p和q都弄的不可用了  那把p=(*q).prev;调到malloc前还是出现错误啊

user: user-0
content: 那把p=(*q).prev;调到malloc前还是出现错误啊

user: user-1
content: 错误太多.写完一个函数, 用printf测试好了再写下一个.   			q=(DuLinkList)malloc(sizeof(DuLNode));//这里q指向了新分配的地址, 新的!所以q的data,pre,next都没赋值 			p=(*q).prev;//q的prev是未知地址, 这句后p就是未知地址 			q=p;//这句之后, q和p一样, 指向了未知地址 //终于成功的把p和q都弄的不可用了
user-0 提问: 新人求教 如何用visual studio 编写选座软件。

回复:
user: user-1
content: 商业的东西要给钱 如果你是在研究过程中需要解决问题那有大把人教你 但你直接是在伸手问人拿商业的东西，你说有这可能吗
user-0 提问: 矩阵转置算法，整个程序单步调试通过但是直接运行报错，网上看了看这种问题貌似是多线程问题，请问怎么解决呀？

回复:
user: user-0
content: 是我搞错了，现在搞懂了这个的确没用到，还是程序写错了，谢谢了，我已经解决了，

user: user-1
content: 哥们，你这没有使用多线程，哪来的多线程错误？ 什么运行错误？截个图或者详细介绍一下
user-0 提问: 这个是怎么回事呢？、每回开始编译都出现这个问题

回复:
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-2
content: 高，实在是高。你们C语言老师是体育老师出身吧。

user: user-3
content: 你是零基础自学的吧！照着书一一对比哪里不同！ { } 和[ ] 是不同的！

user: user-4
content: 改成 int main () ??<     printf ("1234,\n"); ??> 就好了。嘎嘎~

user: user-5
content: [] 自动生成的？ 还是手写？ 这个~~~【】~~~

user: user-6
content: 函数体用 { } 包含住语句块

user: user-7
content: int main() {      ......      return 0; }

user: user-8
content: 我瞅了半天才发现原来是中括号。笑尿了（开始很容易犯这样的错误的，希望你坚持下来，一起加油）

user: user-4
content: 高，实在是高！

user: user-9
content: #include <stdio.h> int main() {         printf("hello world!\n");         return 0; }  把这个赋值上去。。。。 main() 后面是 { } 。 不是 [ ]

user: user-10
content: 大括号写成中括号。。
user-0 提问: malloc指针返回NULL（求大神指教）

回复:
user: user-0
content: 引用 6 楼 QIULANZHU 的回复:sizeof(struct SUBASSYPART)这个结构你在哪里定义了。。  =============================== typedef struct         {                 int n_parts;                 struct SUBASSYPART                 {                         char partno[10];                         short quan;                 }*part;         }Subassyinfo;struct SUBASSYPART{...}*part不是定义了吗？

user: user-1
content: 需要把  struct SUBASSYPART                 {                         char partno[10];                         short quan;                 } 拿出来定义，不能放在结构体里定义，作用域不对

user: user-2
content: 是结构体里面定义一个结构体吗？这个联合结构不能被识别。

user: user-0
content: 返回一直是0 就是内存没有分配成功

user: user-3
content: sizeof(struct SUBASSYPART)这个结构你在哪里定义了。。  =============================== typedef struct         {                 int n_parts;                 struct SUBASSYPART                 {                         char partno[10];                         short quan;                 }*part;         }Subassyinfo;

user: user-4
content: 引用 3 楼 hlqhayq 的回复:返回一直是0 就是内存没有分配成功  sizeof(struct SUBASSYPART)这个结构你在哪里定义了。。

user: user-3
content: struct SUBASSYPART                 {                         char partno[10];                         short quan;                 }*part;   前面是不是少了typedef？

user: user-5
content: 单步调试+测试输出

user: user-6
content: sizeof(struct SUBASSYPART)；  这个结构在哪里， 编译器访问不到这个结构体。。
user-0 提问: poj 1003 我觉得逻辑没问题，为什么，会粗问题？time exceed？

回复:
user: user-0
content: 感谢各位，明白了

user: user-1
content: sum=sum+(1.0f/i); 把其中1改成1.0f就行了

user: user-2
content: 保研之后尝试坚持把POJ一直刷下去，很遗憾的是，没想到保研之后更忙。。。不过这道题刚好做了。。。 代码： #include <iostream> using namespace std; int main() { 	double num; 	cin>>num; 	double i; 	while(num!=0.00) 	{ 		double result=0.0; 		for(i=2;;i++) 		{ 			result+=double(1/i); 			if(result>=num) 				break; 		} 		cout<<i-1<<" card(s)"<<endl; 		cin>>num; 	} }

user: user-3
content: 目测 (float)(1/i) = 0，死循环。
user-0 提问: C语言中的强制转换，急！

回复:
user: user-1
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-2
content: int右移的规则比较复杂，尽量用unsigned int 参考第6章6.8节的说明

user: user-3
content: 1、a右移应该是a>>1 2、不加强制转换会不会导致结果错误，楼主试一下就知道了，我在VS2010上试，加与不加结果是一样的~~~  #include <iostream> using namespace std; void main() { 	int a=100,b=5,c=0; 	a=100; 	cout<<(a>>1)<<endl; 	c = (_int16)((_int16)(a>>1) + b); 	cout<<c<<endl; 	c = ((a>>1) + b); 	cout<<c<<endl; }

user: user-0
content: 感谢各位答复，我电脑上并没用VC之类的工具，公司电脑安装软件还需要向IT部门申请，所以比较麻烦。我是做自动代码生成的，正在比较不同版本的自动代码生成工具的差异，发现了这个问题，百度了很久也没有找到相关资料。  另外关于有符号整型相加会溢出我是否能这样理解？比如有以下代码： int8 a,b,c,d; （1） c = a + b;   即使发生溢出也不会影响结果，因为计算的2进制值和把a,b强制转换成uint8，所计算出来的值是一样的，所以不需要在a和b之前加强制转换uint8。 （2） c = a + b + d，如果a+b会发生溢出，那么再和d相加会影响到最终的2进制值，所以需要把a,b,d前面强制转换成uint8?
user-0 提问: 关于define预定义的问题？

回复:
user: user-1
content: 关于2进制，8进制，10进制，16进制，36进制请看 http://blog.csdn.net/iamshaofa/article/details/44274751  收录在本书附录14里了， 《C/C++学习指南》 引用 2 楼 adusuccessfully 的回复:是不是把常量写成16进制，10进制，2进制没啥区别呢~~~

user: user-2
content: 这个因开发中需要或者开发者习惯而定吧，没有什么必然的意义。

user: user-0
content: 嗦嘎 明白一点了

user: user-3
content: 16进制, 心算就可以转成2进制.  如果需要 &|>><<操作时, 容易懂  感觉写成2进制数也挺好  说白了就是程序怎么方便怎么写. 如果你能心算十进制数的&操作, 就都写成十进制也行.

user: user-4
content: 是不是把常量写成16进制，10进制，2进制没啥区别呢~~~

user: user-5
content: #define 的作用是将一些值或操作命名成有意义且易记的名字 如果值为16进制的，那这些值一般用于按位“与、或”操作 否则为直接比对或赋值的内容
user-0 提问: 函数问题

回复:
user: user-1
content: 用面象对象的思路来设计最好，当然内部加一个static int也是可以的  引用 2 楼 user-3 的回复:函数体内加一个 static int 的变量 初始化为零，每次调用函数的时候变量值+1 然后你去判断这个值是多少就是了

user: user-2
content: 是不是可以设置一个全局变量，判断函数list调用是不是第一次呢？（我猜的，不一定说的对……）

user: user-3
content: 函数体内加一个 static int 的变量 初始化为零，每次调用函数的时候变量值+1 然后你去判断这个值是多少就是了

user: user-0
content: 请问应如判断?
user-0 提问: 关于字典的一点疑惑 ，在线等！

回复:
user: user-1
content: 貌似没有特别高效的方法，只是发现了这个： http://quke.org/log-213.html 我能想到的也是将需要删除的键值复制出来，然后遍历删除，比如： >>> a = {1:0, 2:0, 3:1, 4:1} >>> del_keys = [] >>> for i in a.keys(): ... 	if a[i] == 0: ... 		del_keys.append(i) ... 		 >>> for i in del_keys: ... 	del a[i] ... 	 >>> a {3: 1, 4: 1}
user-0 提问: 求问个关于文件读取的问题

回复:
user: user-1
content: 楼上的说的都很好

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

user: user-2
content: 仅供参考：#include <mem.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <graphics.h> const unsigned char bit[8]={128,64,32,16,8,4,2,1}; //-------------------------------------------------------- void dis(xoff,code)     unsigned int xoff,code; {     unsigned char *buffer;     FILE *hzk;     unsigned long offset;     unsigned int q,w;     int x,y,width;      buffer=calloc(32,1);     if ((code&0xFF00)!=0) {         w=(code&0x00FF)-0xA1;         q=((code>>8)&0x00FF)-0xA1;         offset=q*0x5E+w;         offset*=32;         if ((hzk=fopen("HZK16","rb"))==NULL) {             closegraph();             printf("Can not open HZK16\r\n");             exit(1);         }         fseek(hzk,offset,SEEK_SET);         fread(buffer,1,32,hzk);         fclose(hzk);         width=2;     }     else {         if ((hzk=fopen("ASC16","rb"))==NULL) {             closegraph();             printf("Can not open ASC16\r\n");             exit(1);         }         offset=code*16;         fseek(hzk,offset,SEEK_SET);         fread(buffer,1,16,hzk);         fclose(hzk);         width=1;     }     for (y=0;y<16;y++) for (x=0;x<8*width;x++) {         if (buffer[y*width+x/8]&bit[x%8]) putpixel(xoff+x,y,15);     }     free(buffer); } //-------------------------------------------------------- void display(p)     unsigned char *p; {    int i;   unsigned int qw;    i=0;   while (1) {     if (p[i]==0x0D||p[i]==0x1A) break; 	if (p[i]>0xA0) { 		qw=((unsigned int)p[i]<<8)|((unsigned int)p[i+1]&0x00FF); 		dis(8*i,qw); 		i+=2; 	} 	else { 		qw=(unsigned int)p[i]&0x00FF; 		dis(8*i,qw); 		i++; 	}   }  } //-------------------------------------------------------- void main() { 	int gdriver = DETECT, gmode, errorcode; 	long fl; 	FILE *hz; 	unsigned char *p;  	initgraph(&gdriver, &gmode, "c:\\borlandc\\bgi"); 	errorcode = graphresult(); 	if (errorcode != grOk) { 	   printf("Graphics error: %s\n", grapherrormsg(errorcode)); 	   exit(1); 	} 	hz=fopen("hz","rb"); 	fseek(hz,0,SEEK_END); 	fl=ftell(hz); 	p=calloc((int)fl,sizeof(unsigned char)); 	rewind(hz); 	fread(p,1,(int)fl,hz); 	fclose(hz); 	display(p); 	free(p); 	getch(); 	closegraph(); }

user: user-2
content: 你可以先使用你字库中的第一个字来调试。

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  要么你汉字的前后两个字节的顺序反了 要么你从0开始还是从1开始混了 要么你GBK编码还是Unicode编码亦或UTF8编码没弄清：对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A ……

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:不要把 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-1
content: 其它也不多说了，把VC6扔掉再来试试

user: user-2
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。

user: user-3
content: 不贴代码妄图找问题的都是耍流氓

user: user-4
content: 是STL里面的 list吗？  #include <list> using namespace std::list;  int main() { list<int> arr; arr.push_back(10); return 0; }
user-0 提问: c语言两个结构体互相干扰

回复:
user: user-1
content: Queue *guodao; 	Init(guodao);  指针没有指向具体实例，换言之，没有Queue 数据对象可用来初始化。

user: user-2
content: 1、楼主定义的这两个结构体没有任何关系，是不会互相干扰的； 2、楼主初始化结构体的程序不对，因为指针没有指向，1楼的解答对对的。  #include<stdio.h> #define Max 100 typedef struct _messege { 	char name; 	int chepai; 	int time; }message; typedef struct _Queue { 	int base[Max]; 	int front,rear; }Queue; void Init(Queue *Q) { 	Q->rear=0; 	Q->front=0; } void main() { 	Queue guodao; 	Init(&guodao); 	printf("%d%d",guodao.front,guodao.rear);  	message a; 	Queue *p = new Queue(); 	Init(p); 	printf("%d%d",p->front,p->rear); }

user: user-3
content: 2个都不对      Queue guodao;     Init(&guodao);     printf("%d%d",guodao.front,guodao.rear);      Queue *guodao = new Queue();     Init(guodao);     printf("%d%d",guodao->front,guodao->rear);
user-0 提问: 含有结构体的程序

回复:
user: user-0
content: 引用 4 楼 tianzhenseu 的回复:[quote=引用 2 楼 mxway 的回复:] linklist point相当于lnode *point，你的point是一个指针，指向的内存地址为0。point->data=5，还没有指向任何有意义的地址就赋值。当然会运行出错了。已经按照你们说的解决了。  #include <stdio.h>  #include<stdlib.h>  typedef int datatype; typedef struct stacknode { 	datatype data; 	struct stacknode *next; }stacknode,*linkstack;  void InitStack(linkstack top) {   	top=NULL; }  int EmptyStack(linkstack top) { 	if(top==NULL)  		return 1; 	else         return 0; }  void Push(linkstack top,datatype x) { 	struct stacknode *p; 	p=(struct stacknode*)malloc(sizeof(struct stacknode)); 	p->data=x; 	p->next=top; 	top=p; }   void main() {     	linkstack top; 	InitStack(top); 	Push(top,3); 	Push(top,4); 	printf("%c\n",top->data); 	 } 这个链式堆栈的程序，为什么也会出现刚才那个问题呢？[/quote]写错了，是printf("%d\n",top->data);

user: user-0
content: 引用 2 楼 mxway 的回复:linklist point相当于lnode *point，你的point是一个指针，指向的内存地址为0。point->data=5，还没有指向任何有意义的地址就赋值。当然会运行出错了。已经按照你们说的解决了。  #include <stdio.h>  #include<stdlib.h>  typedef int datatype; typedef struct stacknode { 	datatype data; 	struct stacknode *next; }stacknode,*linkstack;  void InitStack(linkstack top) {   	top=NULL; }  int EmptyStack(linkstack top) { 	if(top==NULL)  		return 1; 	else         return 0; }  void Push(linkstack top,datatype x) { 	struct stacknode *p; 	p=(struct stacknode*)malloc(sizeof(struct stacknode)); 	p->data=x; 	p->next=top; 	top=p; }   void main() {     	linkstack top; 	InitStack(top); 	Push(top,3); 	Push(top,4); 	printf("%c\n",top->data); 	 } 这个链式堆栈的程序，为什么也会出现刚才那个问题呢？

user: user-0
content: 引用 1 楼 user-2 的回复:point 是指针，指针初始化为空所以出错太感谢了，终于解决了

user: user-1
content: linklist point相当于lnode *point，你的point是一个指针，指向的内存地址为0。point->data=5，还没有指向任何有意义的地址就赋值。当然会运行出错了。

user: user-2
content: point 是指针，指针初始化为空所以出错
user-0 提问: 菜鸟练习，求找错~

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

user: user-2
content: 楼上说的是对的：  for(j=0;j<n;j++) 		printf("%lf\n",p[j]);

user: user-3
content: 粗心： printf("%lf\n", p[j]);   //读取数据 误把j写成i

user: user-4
content: printf("%lf\n",p[j]);   //读取数据
user-0 提问: 快速排序算法出问题，求大神解释错在哪儿？

回复:
user: user-1
content: int m = low + (low + high)/2; 其中low=2,high=4，算一下m是多少

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:先 http://www.microsoft.com/visualstudio/chs/downloads#d-2010-express 点开Visual C++ 2010 Express下面的语言选‘简体中文’，再点立即安装  再参考C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\qsort.c我主要是想知道，这个排序程序为什么会出错？

user: user-2
content: // 快速排序 void quick_sort (int data[], 	size_t left, size_t right) { 		size_t p = (left + right) / 2; 		int pivot = data[p]; 		size_t i = left, j = right; 		while (i < j) { 			for (; ! (i >= p || 				pivot < data[i]); ++i); 				if (i < p) { 					data[p] = data[i]; 					p = i; 				} 				for (; ! (j <= p || 					data[j] < pivot); --j); 					if (j > p) { 						data[p] = data[j]; 						p = j; 					} 		} 		data[p] = pivot; 		if (p - left > 1) 			quick_sort (data, left, p - 1); 		if (right - p > 1) 			quick_sort (data, p + 1, right); }

user: user-3
content: 先 http://www.microsoft.com/visualstudio/chs/downloads#d-2010-express 点开Visual C++ 2010 Express下面的语言选‘简体中文’，再点立即安装  再参考C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\qsort.c

user: user-4
content: 参考代码段 http://pan.baidu.com/s/17yIcQ

user: user-5
content: void qicksort(int a[],int left,int right)   {       int i,j;       if(left<right)       {           i=left;           j=right;           int temp=a[left];           do            {               while(a[j]>temp&&i<j)                   j--;               if(i<j)               {                   a[i]=a[j];                   i++;               }               while(a[i]<temp&&i<j)                   i++;               if(i<j)               {                   a[j]=a[i];                   j--;               }           } while (i<j);           a[i]=temp;           qicksort(a,left,i-1);           qicksort(a,i+1,right);       }   }

user: user-0
content: 引用 5 楼 user-6 的回复:稍微读了一下代码： int m = low + (low + high)/2; 你确定m是这么计算的？是这样的，这一句只是为了选取中间位置的一个值而已，然后再在选出来的三个数中选择一个中间值。现在问题是在找三数中的中间值时，如果顺便交换下就会出现问题，如果不交换就正常。程序中注释的部分。不知道为什么？

user: user-6
content: 稍微读了一下代码： int m = low + (low + high)/2; 你确定m是这么计算的？

user: user-3
content: 引用 3 楼 xinsuixiaofeiyu 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] 先 http://www.microsoft.com/visualstudio/chs/downloads#d-2010-express 点开Visual C++ 2010 Express下面的语言选‘简体中文’，再点立即安装  再参考C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\qsort.c我主要是想知道，这个排序程序为什么会出错？[/quote] 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDEi中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。
user-0 提问: 第十五章的课后题~~运行成功的程序有糊涂的地方

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:if((01&num) == 01)抱歉~~弄错了~~分没给你~~真是抱歉~~非常非常抱歉~~点错了~~

user: user-0
content: 引用 1 楼 user-1 的回复:if((01&num) == 01)thank u~~

user: user-1
content: if((01&num) == 01)
user-0 提问: 关于LOWORD和HIWORD的使用

回复:
user: user-1
content: LOWORD The LOWORD macro retrieves the low-order word from the given 32-bit value.   WORD LOWORD(   DWORD dwValue  // value from which low-order word is retrieved );   Parameters dwValue  Specifies the value to be converted.  Return Values The return value is the low-order word of the specified value.   Remarks The LOWORD macro is defined as follows:   #define LOWORD(l)   ((WORD) (l))    QuickInfo   Windows NT: Requires version 3.1 or later.   Windows: Requires Windows 95 or later.   Windows CE: Unsupported.   Header: Declared in windef.h.  See Also Windows Overview, Window Macros, HIWORD, LOBYTE

user: user-2
content: 我看介绍是在windef.h中定义的，加上windows.h头文件应该就可以了吧

user: user-0
content: 引用 1 楼 hnwyllmm 的回复:明显没加头文件 网上搜一下头文件是哪个 加了显示重复定义

user: user-2
content: 明显没加头文件 网上搜一下头文件是哪个