Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: netinet/in.h是什么头文件？

回复:
user: user-1
content: android源代码包

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:C:\Android\Mydroid\bionic\libc\include\netinet\in.h  VC6： 工程、设置、C/C++、分类：Preprocessor、附加包含路径：填写附加头文件所在目录 逗号间隔多项 工程、设置、Link、分类：Input、附加库路径：填写附加依赖库所在目录 分号间隔多项 工程、设置、Link、分类：Input、对象/库模块：填写附加依赖库的名字.lib 空格间隔多项 感谢，还一个问题在哪里能下载到netinet\in.h文件啊？就是LZ77的压缩头文件

user: user-1
content: C:\Android\Mydroid\bionic\libc\include\netinet\in.h  VC6： 工程、设置、C/C++、分类：Preprocessor、附加包含路径：填写附加头文件所在目录 逗号间隔多项 工程、设置、Link、分类：Input、附加库路径：填写附加依赖库所在目录 分号间隔多项 工程、设置、Link、分类：Input、对象/库模块：填写附加依赖库的名字.lib 空格间隔多项
user-0 提问:    参数辨识   曲线拟合程序已给出    如何减少计算量 ？？？  求大神帮助！！！

回复:
user: user-1
content: 自己动手，丰衣足食。

user: user-0
content: 您能帮我改一下吗？程序已给出，谢谢。100分给您了。

user: user-1
content: 如果怕循环内没有printf无法区分死循环还是正在干活，可以每隔比如10000次printf一次。

user: user-1
content: 提醒：在循环内避免使用printf输出到屏幕（屏幕上卷一行很慢的），可以使用fprintf输出到文件（快得多）

user: user-1
content: 掌握一个大的原则： 再循环内多用几个临时变量保存外层循环已经计算出的中间值，避免或减少在循环内重复计算。

user: user-0
content: 您好，谢谢您回答我的问题。。。这个帖子的内容是 我们老师  布置的 作业   。要求就是减少计算量。

user: user-1
content: 一般情况下没必要减小计算量。
user-0 提问: 工作调动新书贱卖

回复:
user: user-1
content: 好书很多啊，买

user: user-2
content: 我也欠了好多书债

user: user-3
content: 楼主要去什么城市呀?

user: user-4
content: 顶起，支持。

user: user-5
content: 引用 26 楼 sholber 的回复:赵四老师？ 乡村爱情里的赵四？

user: user-6

user: user-7
content: 给楼主顶一顶

user: user-0
content: 上面已经有很多书被卖了，如果有需要，请移步新帖子 http://bbs.csdn.net/topics/390944085

user: user-8
content: 楼主真土豪， 这么多书

user: user-9
content: 赵四老师？ 乡村爱情里的赵四？

user: user-0
content: 引用 24 楼 zhousitiaoda 的回复:看了下没有目前想要的，C++方面的大部分都有了，其他方面的暂时没太大兴趣,还是留给更需要的人吧，不想买来垫桌子 好吧，看需要了。

user: user-10
content: 看了下没有目前想要的，C++方面的大部分都有了，其他方面的暂时没太大兴趣,还是留给更需要的人吧，不想买来垫桌子

user: user-0
content: 引用 18 楼 gigglesun 的回复:楼主在南山科技园附近？ 在宝安坪洲地铁口，离科技园20分钟

user: user-0
content: 引用 21 楼 zhousitiaoda 的回复:看到的晚了点，昨晚刚买了本C++ template 70多  额，我都是半价。书基本全新。 兄弟可以看看其他的。。。 比如，还有 tcp/ip详解 3卷 tcp/ip协议族第4版 java语言程序设计 java编程思想

user: user-10
content: 看到的晚了点，昨晚刚买了本C++ template 70多

user: user-0
content: 引用 19 楼 baiwei12 的回复:怎么加啊？？？ 加QQ啊，上面有QQ号

user: user-11
content: 怎么加啊？？？

user: user-12
content: 楼主在南山科技园附近？

user: user-0
content: up up一下

user: user-0
content: up up up
user-0 提问: 枚举类型的新手问题？？

回复:
user: user-1
content: enum color i;    ===> int i;

user: user-2
content: #include<stdio.h> void main() {     enum color{red,yellow,blue,white,black};     int i;     for(i=red;i<=black;i++)     {         switch(i)         {case red: printf("red  ");break;         case yellow: printf("yellow  ");break;         case blue: printf("blue  ");break;         case white: printf("white  ");break;         case black: printf("black  ");break;         default: break;}         printf("/n");     } }
user-0 提问: 为什么第二个字符串输入后依旧是等待输入的状态？

回复:
user: user-1
content: 你设个断点调试下，看看 get_next(T, next); int i = Index_KMP(S, T, next, 0);能不能执行过去？

user: user-2
content: 你说的等待输入状态有两种情况：1、确实需要输入，2、程序在运行，未退出。 你可以继续输入看看有没有显示你键入的字符，没有的话就是一楼所说的了额，要不就是输入的问题，用cin、cout之类

user: user-3
content: 代码不完整吧 应该不是输入等待的问题 将int next[STRING_MAX_SIZE];//next数组           get_next(T, next);     int i = Index_KMP(S, T, next, 0);           printf("匹配得到的位置为%d", i);注释了，没发现输入等待

user: user-4
content: 可能你实现的算法有问题，进入死循环了

user: user-5
content: 在每个scanf语句后去随便打印一些打印信息，就知道程序是停在哪里了
user-0 提问: 一个简单的问题：像这样的16进制数如何转换得到？

回复:
user: user-1
content: 我哪里高高在上了？我自己写的例子就是用的 unsigned long long 你都没看见，然后又问用什么存储比较好。转成 float 是否可行我不敢确认，但如果第一个位是 F 的话，你确定能放得下？还不如用 long long。float 占 8 个字节，unsigned long long 也是 8 个字节，float 还要用来保存你根本用不着的小数位 0，小数存储也不如整数效率高。

user: user-0
content: 引用 8 楼 SXJIAKE 的回复:方法很簡單，可是你連函數都不會獨立出來。基礎都不會，實在無語。 用 unsigned long long，如果你用 VS 也可以用 unsigned __int64。  什么函数不会独立出来？ 好像这个我还是会的，还有数据类型问题，我自己也弄清了，其实强转成实数(float)就可以了。不用什么long long了、这样就不怕溢出装不下了。  还是要感谢你的回帖，但是不要高高在上，谁都不是天生都是高手，菜鸟变身需要时间！

user: user-2
content: __int64

user: user-3
content: long long型可以，32位取值范围4294967296  先取出N=0X1212BE72>>8 然后取出其余的M=（0X1212BE72<<1）>>1

user: user-4
content: unsigned int a = 0X1212BE72; unsigned int b = ( a & 0xF0000000 ) >> 7; int c [100]; memset( c, 0, sizeof(c) ); int i = b; unsigned int d = a & 0x0FFFFFFF; while( d%10 > 0 ) {    c[b] = d%10;    d = d/10;   b++; } for( int i=b-1; i>0; i-- )     printf( "%d", c[i] );

user: user-5
content: 移位啊  #include <stdio.h>  unsigned int conv(unsigned int x) {     unsigned int i, a, m, n;      a = x & 0x0FFFFFFF;     n = x >> 28;      m = 1;     for (i = 0; i < n; i++)     {         m = m * 10;     }      printf("0X%08X===>0X%08X*%u\n", x, a, m);      return (a * m); }  int main(int argc, char *argv[]) {     unsigned int x;      x = 0X1212BE72;     conv(x);     x = 0X2312BE8D;     conv(x);     x = 0X3511DDEC;;     conv(x);      return 0; }

user: user-1
content: 方法很簡單，可是你連函數都不會獨立出來。基礎都不會，實在無語。 用 unsigned long long，如果你用 VS 也可以用 unsigned __int64。

user: user-0
content: 引用 2 楼 user-5 的回复:移位啊  #include <stdio.h>  unsigned int conv(unsigned int x) {     unsigned int i, a, m, n;      a = x & 0x0FFFFFFF;     n = x >> 28;      m = 1;     for (i = 0; i < n; i++)     {         m = m * 10;     }      printf("0X%08X===>0X%08X*%u\n", x, a, m);      return (a * m); }  int main(int argc, char *argv[]) {     unsigned int x;      x = 0X1212BE72;     conv(x);     x = 0X2312BE8D;     conv(x);     x = 0X3511DDEC;;     conv(x);      return 0; }  你的程序是我想要的，可是还有一点，如果这个数这么转换后超过了unsigned int的范围了怎么输出呢？

user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <math.h>  #ifndef _countof #define _countof(a) (sizeof(a)/sizeof(*(a))) #endif  int main(int argc, char *argv[]) {     unsigned long ularr[] = {         0x1212BE72,         0X2312BE8D,         0X3511DDEC     };     for (int i = 0; i < _countof(ularr); i++) {         unsigned long a = ularr[i] & 0x0FFFFFFFULL;         unsigned long n = pow(10, (ularr[i] >> 28) & 0xF);         unsigned long long ull = (unsigned long long)a * n;         printf("0x%08X => 0x%08X * %u (0x%016llX)\n", ularr[i], a, n, ull);     }     return 0; }
user-0 提问: 迷宫问题

回复:
user: user-1
content: 这是我们高中时的计算机竞赛题。

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

回复:
user: user-1
content: 多看多练，没有什么捷径

user: user-2
content: 看书的话可以看c++ primer。多动手敲代码，书上的例子和习题别看它简单，都要自己敲一遍。觉得看书无聊的话，可以用MFC做点小东西，培养自己的兴趣。

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: 静下心来，踏踏实实动手、学习！！！

user: user-5
content: 首先看自己是不是真的聪明，如果真的聪明直接看《C++程序设计语言（特别版）》

user: user-3
content: 引用 5 楼 u012372684 的回复:眼过千遍不如手过一遍！ 书看千行不如手敲一行！  其实我还是很想知道赵四老师说的多用小脑是什么意思，和大脑有什么区别吗？  共勉，加油~！ 我感觉上OJ去AC题目也很不错啊~！ 小脑管动作，大脑管思维。

user: user-6
content: 楼主现在这里问问题，就已经是在自学了

user: user-6
content: 从<c primer plus>开始 眼过千遍不如手过一遍！ 书看千行不如手敲一行！

user: user-3
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后，就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的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-7
content: 我不是成功人士 坐等成功人士的看法

user: user-8
content: 我在看c primer plus英文版，第五版，推荐

user: user-9
content: 共勉，现在在看c++ primer plus。

user: user-10
content: 眼过千遍不如手过一遍！ 书看千行不如手敲一行！  其实我还是很想知道赵四老师说的多用小脑是什么意思，和大脑有什么区别吗？  共勉，加油~！ 我感觉上OJ去AC题目也很不错啊~！

user: user-11
content: 同为菜鸟，与君共勉。。。。 最怕的是问题无法解决，分数快用完了。。。
user-0 提问: C读取.mat数据程序出现链接错误，跪求解决！！！

回复:
user: user-0
content: 分享个链接吧，我是按照这个帖子上的方法配置的 http://www.jb51.net/article/34727.htm

user: user-0
content: 已经解决了，还是有些配置没有搞定

user: user-1
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……

user: user-2
content: 包含这几个函数的声明的头文件呢， 是不是声明有问题，不是c调用规则?
user-0 提问: 关于指定密码位数然后根据每位可能的字符来列举出所有组合，求交流求指点

回复:
user: user-0
content: 这样的笨方法for,密码有多少位数，就有多少重for，越写越没效率了，求大神指点  #include <stdio.h>  void perm(char*,int,int);  int main() {     char codeArray[] = "0123456789abcdefghijklmnopqrstuvwxyz";     int inputDigits = 0;          printf("键入密码位数：");     scanf("%d",&inputDigits);          perm(codeArray, inputDigits, sizeof(codeArray));          return 0; }  void perm(char* num, int digits,int iMax) {     if (1 == digits) {                  for (int i = 0; i < iMax; i++) {             printf("%c",num[i]);         }              }          if (2 == digits) {         for (int i = 0; i < iMax; i++)             for (int j = 0; j < iMax; j++) {                 printf("%c%c    ",num[i],num[j]);                          }              }           }
user-0 提问: 关于windows编程中，字符转化成double问题，求答，谢

回复:
user: user-1
content: WCHAR   对应wtof  TCHAR.H routine     _UNICODE & _MBCS not defined      _MBCS defined      _UNICODE defined   _tstof                          atof                                                            atof                            _wtof   _ttof                            atof                                                             atof                           _wtof

user: user-2
content: 转为char[] 然后 atof

user: user-3
content: 宽字符可以用wcstod / wcstof。使用这些函数时，请确保正确设置了code page

user: user-4
content: 要先把 宽字符 转换为一般的char， 才可以用atof
user-0 提问: 套接字创建错误求解

回复:
user: user-1
content: 如果你要用 SOCK_RAW，就必须有 root 权限。  如果你要在普通用户权限下运行，需要 以 root 身份执行：  chmod 4755 program ,给 程序增加一个 s 属性.

user: user-2
content: 使用超级管理员运行 $su password

user: user-3
content: 权限不够，个人认为如果是学习的话，还是使用root权限……

user: user-4
content: sudo ??
user-0 提问: 求用C语言在VC++6.0环境下编一段低级钩子DLL程序屏蔽Alt键

回复:
user: user-1
content: http://www.autohotkey.com

user: user-0
content: 引用 1 楼 crow6313077 的回复:我觉得你原来写的钩子中没有处理win键和菜单键的相关处理吧？ 在MSDN中简单查了以下Virtual-Key中有VK_RWIN等。对于如何向notepad中输入文字，查看一下相关的API吧，在获取到Alt的消息时，不直接return true，先使用API在Notepad中输入a。这样就行了吧。 楼主加油。 你说的”相关处理“，是不是指”打一个“a”？ 我是在编一个汉字输入法的程序。要用到这4个键位。原来的程序非常复杂有2000行左右。我在1楼提到的那段程序是一个简化程序，只要求屏蔽右边的Alt、CTRL、win键和菜单键，左边的不屏蔽。那个问题只要求屏蔽，不要求打一个“a”。 因为打一个“a”的问题比较容易实现。我的输入法程序中是打出一个汉字的。但问题在于：打出汉字之后仍然要跳出菜单。这个“跳出菜单”的功能我无法屏蔽掉。 我的输入法程序，往notepad.exe窗口里打字比较复杂。看到你说可以“使用API在Notepad中输入a”，很高兴，不知具体如何操作？能给出教材或资料的链接吗？

user: user-0
content: 楼上的根据啥说我”原来写的钩子中没有处理win键和菜单键的相关处理“？ 我不是用wParam提供的虚拟键码来判断win键和菜单键的，是用lParam的第24位是否=1来判断是否扩展键的。所谓扩展键就是空格键右边的4个键位：Alt、CTRL、win键和菜单键。空格的左边也有Alt、CTRL、win键，但是它们的lParam的第24位=0。 你所说的”相关的API“是哪些？具体如何找？如何”使用API在Notepad中输入a“？

user: user-2
content: 我觉得你原来写的钩子中没有处理win键和菜单键的相关处理吧？ 在MSDN中简单查了以下Virtual-Key中有VK_RWIN等。对于如何向notepad中输入文字，查看一下相关的API吧，在获取到Alt的消息时，不直接return true，先使用API在Notepad中输入a。这样就行了吧。 楼主加油。
user-0 提问: linux调整分区大小

回复:
user: user-1
content: 你干嘛不去刻录张光碟呢，我当时装环境的时候一直是装了卸，卸了装的 直到后来我用了虚拟机 fdisk正常用没问题的

user: user-0
content: 引用 1 楼 Richardicy 的回复:百度下fdisk命令修改主分区会不会破坏操作系统啊,开不了机就跪了,我没有u盘和光碟.

user: user-0
content: 引用 2 楼 user-2 的回复:图形界面有 GParted我安装不了啊

user: user-2
content: 图形界面有 GParted

user: user-1
content: 百度下fdisk命令
user-0 提问: C语言谭浩强链表题目求解？

回复:
user: user-0
content: 引用 3 楼 u010030181 的回复:少年，不要试图去返回局部变量的地址…… struct student *cha(struct student *head,struct student* p0)里面的相应改下，main函数中改成如下struct student *p0 = (struct student*)malloc(sizeof(struct student)); scanf("%d",&x); p0->number=x; p0->next=NULL; 非常感谢！！

user: user-0
content: 引用 4 楼 I_better 的回复:[quote=引用 1 楼 user-2 的回复:] cha()函数第二个参数实际运行时只是个复本，函数结束时丢失。用指针吧 你是对的[/quote] 非常感谢！！

user: user-0
content: 引用 1 楼 user-2 的回复:cha()函数第二个参数实际运行时只是个复本，函数结束时丢失。用指针吧 你是对的

user: user-1
content: 少年，不要试图去返回局部变量的地址…… struct student *cha(struct student *head,struct student* p0)里面的相应改下，main函数中改成如下struct student *p0 = (struct student*)malloc(sizeof(struct student)); scanf("%d",&x); p0->number=x; p0->next=NULL;

user: user-0
content: 引用 1 楼 user-2 的回复:cha()函数第二个参数实际运行时只是个复本，函数结束时丢失。用指针吧 不是这个问题哈。。。。就是用的指针。函数结束后，链表的number是正确的。。。

user: user-2
content: cha()函数第二个参数实际运行时只是个复本，函数结束时丢失。用指针吧
user-0 提问: 求C或C++写的求非对称矩阵的特征值特征向量源码

回复:
user: user-1
content: 老大哥，最后怎么样了，4年后的我也想找用C++写的求矩阵的代码

user: user-2
content: zgjx0802@sina.com  matlab的源码可以发下我吗，我可以转成C++的  谢谢了

user: user-0
content: 找了好几天，没有找到一个合适的代码，有高手能帮忙吗？
user-0 提问: 怎么在一堆散乱的点中找到一个X轴最大的点？UG二次开发，针对STL模型文件

回复:
user: user-0
content: 各位大神帮帮忙啊！

user: user-0
content: 就是说：一个stl格式的人体三维模型，竖直方向为Z轴，侧面投影在XZ平面，如果要找到他的头部X轴最大点，可能是脑门儿上一点或者是鼻尖或者是下巴点，怎么找啊？关键是：构成模型的点云是散乱的，不是一层一层的规律点云。我想是先通过Z轴坐标确定头部位置，然后从Z轴最小坐标开始，Z值每加0.01就遍历所有的点云一次，通过比较找到X轴的最大点。调试的时候找到了X轴最大点，可当我让这个点生成小球的时候却怎么也看不到小球。尝试过调整Z轴每次增加值的精度，还是不行。难道是我生成小球有问题吗？请问各位有什么好方法吗?或者我的逻辑有什么错误？

user: user-1
content: 能说的详细点么？

user: user-0
content: 求代码啊！各位大神帮帮忙！
user-0 提问: PCI BIOS中断如何去写PCI中的内容？

回复:
user: user-0
content: 谢谢，非常有用！

user: user-1
content: 上网搜 PCI BIOS Specification 中断其实很简单，就那么几个寄存器，设置寄存器、调用中断、读返回值 如果你不知道那些值是啥意思，那可能要先去看 PCI 规范了
user-0 提问: 求第七位以水仙花数的时候，运行超时

回复:
user: user-1
content: #include <stdio.h>  int mypow(int a, int ae) //不要用math的pow函数，因为是浮点运算，太慢了 { 	int powret; 	if (a == 0 || a == 1) //对于0和1的情况，没有必要计算 		powret = a; 	else { 		powret = 1; 		while (ae > 0) 		{ 			powret = powret * a; 			ae--; 		} 	}  	return powret; }  int split_and_sum(int i, int e) { 	int ret = 0; 	while (i > 0) { 		ret += mypow(i % 10, e); 		i /= 10; 	}  	return ret; }  int main(void) { 	int N; 	scanf("%d", &N); 	int min = 10, max;  	min = mypow(min, N - 1);//注意，3位数只有2个0 	max = min * 10;  	for (int i = min; i < max; ++i) 	{ 		int sum = split_and_sum(i, N); 		if (sum == i) 			printf("%d\n", i); 	}  	return 0; }

user: user-2
content: 引用 2 楼 u012836877 的回复:[quote=引用 1 楼 user-3 的回复:] http://blog.csdn.net/user-3/article/details/6427287  刚学不久。这个看不太懂[/quote]  #include<stdio.h> int aa(int a,int n) { 	int aaa = 1; 	for (int i=0;i<n;i++) 	{ 		aaa = aaa*a; 	} 	return aaa; } void main() {  	int k = aa(5,0); 	printf("::%d\n",k); 	int n = 0, nn = 0; 	for (int a=1;a<10;a++) 	{ 		for (int b=0;b<10;b++) 		{ 			for (int c=0;c<10;c++) 			{ 				n = aa(a,3)+aa(b,3)+aa(c,3); 				nn = a*100+b*10+c; 				if (n == nn) 				{ 					printf("水仙花数为:%d\n",n); 				} 				for (int d=0;d<10;d++) 				{ 					n = aa(a,4)+aa(b,4)+aa(c,4)+aa(d,4); 					nn = a*1000+b*100+c*10+d; 					if (n == nn) 					{ 						printf("四叶玫瑰数为:%d\n",n); 					} 					for (int e=0;e<10;e++) 					{ 						n = aa(a,5)+aa(b,5)+aa(c,5)+aa(d,5)+aa(e,5); 						nn = a*10000+b*1000+c*100+d*10+e; 						if (n == nn) 						{ 							printf("五角星数为:%d\n",n); 						} 						for (int f=0;f<10;f++) 						{ 							n = aa(a,6)+aa(b,6)+aa(c,6)+aa(d,6)+aa(e,6)+aa(f,6); 							nn = a*100000+b*10000+c*1000+d*100+e*10+f; 							if (n == nn) 							{ 								printf("六合数为:%d\n",n); 							} 							for (int g=0;g<10;g++) 							{ 								n = aa(a,7)+aa(b,7)+aa(c,7)+aa(d,7)+aa(e,7)+aa(f,7)+aa(g,7); 								nn = a*1000000+b*100000+c*10000+d*1000+e*100+f*10+g; 								if (n == nn) 								{ 									printf("北斗七星数为:%d\n",n); 								} 							} 						} 					} 				} 			} 		} 	} }

user: user-0
content: 引用 1 楼 user-3 的回复:http://blog.csdn.net/user-3/article/details/6427287  刚学不久。这个看不太懂

user: user-3
content: http://blog.csdn.net/user-3/article/details/6427287
user-0 提问: 结构体定义中遇到的问题

回复:
user: user-1
content: typedef typedef type-declaration synonym;  The typedef keyword defines a synonym for the specified type-declaration. The identifier in the type-declaration becomes another name for the type, instead of naming an instance of the type. You cannot use the typedef specifier inside a function definition.  A typedef declaration introduces a name that, within its scope, becomes a synonym for the type given by the decl-specifiers portion of the declaration. In contrast to the class, struct, union, and enum declarations, typedef declarations do not introduce new types — they introduce new names for existing types.  Example  // Example of the typedef keyword typedef unsigned long ulong;  ulong ul;     // Equivalent to "unsigned long ul;"  typedef struct mystructtag {    int   i;    float f;    char  c; } mystruct;  mystruct ms;   // Equivalent to "struct mystructtag ms;"  typedef int (*funcptr)();  // funcptr is synonym for "pointer                            //    to function returning int"  funcptr table[10];   // Equivalent to "int (*table[10])();"

user: user-2
content: typedef struct {   uint16 Addr;  // linked target's short address   uint16 profileID;   uint16 deviceID;   uint8 deviceVersion;   uint8 EP;     // linked target's end-point } zllRemoteLinkedTarget_t; 这是声明了一种结构体类型是吧？类型名是zllRemoteLinkedTarget_t，每一个这种类型的对象呢包括那么一堆东西（Addr, profileID, blablabla）。好了，现在我想再声明一种结构体类型，这个类型的对象是一个数组，每个元素的类型是zllRemoteLinkedTarget_t，所以就 typedef struct {   zllRemoteLinkedTarget_t arr[MAX_LINKED_TARGETS]; } zllRemoteLinkedTargetList_t; 这样喽。 你试着将zllRemoteLinkedTarget_t类比成int，就很好理解了

user: user-3
content: 引用 7 楼 xiaoxiaobaibaicai 的回复:[quote=引用 5 楼 starytx 的回复:] 就是把第一个结构体的一个数组定义为一个新类型zllRemoteLinkedTargetList_t; 那个数组里面的内容是不是zllRemoteLinkedTarget_t结构体里面的各项的值？[/quote]是的。如果你需要多处定义第一个结构体的那种数组，就可以使用第二个那种来定义。比如： zllRemoteLinkedTargetList_t X; X.arr[0].Addr = 123;

user: user-0
content: 引用 5 楼 starytx 的回复:就是把第一个结构体的一个数组定义为一个新类型zllRemoteLinkedTargetList_t; 那个数组里面的内容是不是zllRemoteLinkedTarget_t结构体里面的各项的值？

user: user-4
content: 就是只定义一个数组嘛，可以独立出来

user: user-3
content: 就是把第一个结构体的一个数组定义为一个新类型zllRemoteLinkedTargetList_t;

user: user-5
content: 引用 3 楼 luo_miao 的回复:zllRemoteLinkedTargetList_t 起始就是一个 zllRemoteLinkedTarget_t 结构体的数组，有什么不理解的地方？  其实

user: user-5
content: zllRemoteLinkedTargetList_t 起始就是一个 zllRemoteLinkedTarget_t 结构体的数组，有什么不理解的地方？

user: user-0
content: 引用 1 楼 focuslight 的回复:typedef struct {   zllRemoteLinkedTarget_t arr[MAX_LINKED_TARGETS]; } zllRemoteLinkedTargetList_t;  这个没写全， 少指针 这个是ti给的程序，木有问题啊

user: user-6
content: typedef struct {   zllRemoteLinkedTarget_t arr[MAX_LINKED_TARGETS]; } zllRemoteLinkedTargetList_t;  这个没写全， 少指针
user-0 提问: 见鬼的printf函数！

回复:
user: user-0
content: 谢谢各位，问题已经解决了。  我这数据是从串口接收来的，是串口发来的数据格式引起的。（尝试出来的）

user: user-1
content: #10正解

user: user-2
content: 没太看明白，是换行输出的原因？

user: user-3
content: printf ("%s\n", str_GNGGA);

user: user-4
content: 目测楼主只是需要加一个fflush(stdout);

user: user-5
content: 我看不到图啊

user: user-6
content: 你要爬先确定buff中的字符串  是否是只有一组数据？ 把buff 打印出来就知道怎么回事了

user: user-7
content: 看下msgstr_add每次的值是什么？是不是没有结束符或者有时候是空串

user: user-8
content: 还有其他线程在运行吧

user: user-9
content: msgstr_add 没有'\0'结束符，导致printf越界了？

user: user-10
content: 查下是不是有什么地方内存溢出

user: user-5
content: 没看懂楼主的意思

user: user-0
content: 原本是想执行 strncpy(str_GNGGA,msgstr_add,8); 这一句。 结果printf ("%s", str_GNGGA);就出现上述结果，也就是不是第一个PRINTF语句同步。  才用PRINTF("====")测试。结果同样。  在MAC下，用gcc  main.c -o kk  编译。

user: user-11
content: printf函数它是把数据先放到输出缓冲区的，当缓冲区满或者是遇到换行符(\n)或者是强制刷新(fflush)才会真正输出到设备上。  引用 楼主 mini_peng 的回复:如图所示，两个printf函数相临紧挨一起； 一个执行，另一个不执行；  图片左边是代码，右边是GCC后执行结果。 第一个printf打印字符串执行完后， 第二个printf("==========Flag==========\n")  居然不是同步有结果输出。呈现有时执行有时不执行的效果。  何故？  (补充一下：花括号的位置和数量，都正确。第二个printf下就是右花括号，else  { } 的)
user-0 提问: 求大神帮忙，数据结构中   飞机场起飞降落问题。本人新手，不太懂。多谢啦

回复:
user: user-0
content: 好的，多谢！

user: user-1
content: 引用 2 楼 qq_23624255 的回复:是这样的，有代码吗？如果有发我一份可以吗    多谢 没有代码，自己写写看，哪里调试不出来就贴出来。

user: user-0
content: 是这样的，有代码吗？如果有发我一份可以吗    多谢

user: user-1
content: 引用 楼主 qq_23624255 的回复:模拟一个飞机场起飞降落过程。要求只有一条跑道，输出   每条队列的内容，平均起飞等待时间，平均降落等待的时间 把这条跑道想象成一个队列。设定好队列的大小（一共可以存放多少飞机），每个元素出队列需要多长时间（飞机起飞时间），每个元素入队时间（飞机在跑道降落时间），一架飞机飞走了你处理队头指针的时间（待飞的下一架飞机从当前位置运送到起飞点的时间——假如需要的话。） 然后：  每条队列的内容（遍历一下嘛）；平均起飞等待时间（你把队满到队空所花费的时间统计出来/飞机总数）；平均降落等待的时间（你把队空到队慢所花费的时间统计出来/飞机总数）。 我想这样基本可以了。
user-0 提问: 求助，链表的删除操作，看不太懂，求教

回复:
user: user-0
content: 非常感谢，希望以后多多关注哈

user: user-1
content: void deletef(slink *head) {     slink *p,*q;     char str[20];     p=head->next;	// 第一个元素     q=head;			// q始终指向目标元素节点的上一个节点     if(head->next==NULL)		// 空链表         printf("链表为空，无元素可删除。\n");     else     {         printf("请输入要删除人的姓名或者学号：\n");         gets(str);		// 取得输入的姓名或学号         while(p!=NULL)         {             if(strcmp(p->name,str)!=0&&strcmp(p->num,str)!=0)	// 姓名和学号都和节点p的信息不匹配             {                 q=p;		// 用q保存节点p                 p=p->next;	// p指向下一个节点，继续循环             }             else			// 找到匹配的节点p了就退出循环                 break;         }     }	         if(p==NULL)		// p为NULL说明找到链表尾了             printf("未找到要删除的结点\n");         else         {             q->next=p->next;		// p上上一个节点q的next下接p的next,从而将p从链表中踢出去了             free(p);			// 释放p分配的空间             printf("删除成功\n");         } }
user-0 提问: 求教把一个复杂问题用代码实现的步骤。

回复:
user: user-0
content: 谢谢大家的回复，受教了

user: user-1
content: 自顶向下，逐步细化。

user: user-2
content: 具体问题抽象化，复杂问题模块化

user: user-3
content: 很简单，其实是因为问题难度增加了

user: user-4
content: 拿到一个题目，先把题目的意思理解清楚，有了思路在写，不要看一句写一句，有个大致的流程图在心里，当然如果你能先把伪代码写出来再实现那就基本不是问题了……

user: user-5
content: 大家都是这样的.所以程序员在写代码的时候很讨厌别人打扰他.
user-0 提问: 编写一个随机点名系统

回复:
user: user-1
content: 主要功能已实现，思路就是利用随机函数，交换int数组中的值，已达到“洗牌”效果，然后利用打乱的索引值来访问字符串数组。仅供参考 // 交换两个int值 void change(int *a, int *b) { 	int n = *a; 	*a = *b; 	*b = n; }  #define STUDENT_NUM 7		// 定义学生总数 int main() {  	const char * name[STUDENT_NUM] =  	{ 		"张三", 		"李四", 		"王五", 		"赵六", 		"路人甲", 		"路人乙", 		"无名氏" 	};  	int nIndex[STUDENT_NUM] ={0}; 	srand((UINT)time(0));	// 设置随机种子 	for (int i =0; i != STUDENT_NUM; i++)		 // 初始化索引数组 	{ 		nIndex[i] = i; 	} 	for (int i =0; i != STUDENT_NUM; i++)	// 打乱索引数组中的值 	{ 		change(&(nIndex[i]) , &(nIndex[rand()%STUDENT_NUM])); 	} 	for (int i = 0; i != STUDENT_NUM; i++)		// 打印打乱值的索引对应的字符串 	{ 		printf("%s\n" ,name[nIndex[i]]); 	} 	 	return 0; }

user: user-2
content: 随机必然有重复。 所谓“不重复的随机”实际上是洗牌。 洗牌算法参考下面： #include <stdio.h> #include <stdlib.h> #include <time.h> int d[6]; int i,n,a,b,t; int c,j; void main() {     srand(time(NULL));     printf("shuffle 0..n-1 demo\n");     for (n=1;n<=5;n++) {/* 测试1～5个元素 */         printf("_____n=%d_____\n",n);         j=1;         for (c=1;c<=n;c++) j=j*c;/* j为n! */         j*=n*2;         for (c=1;c<=j;c++) {/* 测试n*2*n!次 */             for (i=0;i<n;i++) d[i]=i;/* 填写0～n-1 */             for (i=n;i>0;i--) {/* 打乱0～n-1 */                 a=i-1;b=rand()%i;                 if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}             }             printf("%04d:",c);             for (i=0;i<n;i++) printf("%d",d[i]);             printf("\n");         }     }     printf("shuffle 1..n demo\n");     for (n=1;n<=5;n++) {/* 测试1～5个元素 */         printf("_____n=%d_____\n",n);         j=1;         for (c=1;c<=n;c++) j=j*c;/* j为n! */         j*=n*2;         for (c=1;c<=j;c++) {/* 测试n*2*n!次 */             for (i=1;i<=n;i++) d[i]=i;/* 填写1～n */             for (i=n;i>1;i--) {/* 打乱1～n */                 a=i;b=rand()%i+1;                 if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}             }             printf("%04d:",c);             for (i=1;i<=n;i++) printf("%d",d[i]);             printf("\n");         }     } }
user-0 提问: C语言的system函数问题

回复:
user: user-1
content: 在PATH环境变量里的命令都可以的啊。

user: user-2
content: 总是发现Path环境变量被某些软件安装时错误修改。比如带空格的目录名未加引号、带汉字的目录引起目录查找混乱等问题，严重影响系统查找可执行文件和dll。 编译此源代码，生成PathShortener.exe，然后在cmd窗口里面运行PathShortener.exe>path.txt，打开path.txt，手动将其内容拷贝粘贴覆盖修改‘我的电脑、属性、高级、环境变量、系统变量、Path、编辑、变量值’即可纠正设置错误的Path http://download.csdn.net/detail/zhao4zhong1/2652343

user: user-3
content: 引用 8 楼 zhao4zhong1 的回复:[quote=引用 7 楼 SXJIAKE 的回复:] [quote=引用 6 楼 wyf156470292 的回复:] [quote=引用 3 楼 SXJIAKE 的回复:] 调用命令行内置命令的，不是外部 exe。比如： copy、ren 等由 cmd.exe 原生提供，可以调用。 xcopy、reg 等由位于 system32 中的 xcopy.exe、reg.exe 提供，不能调用。 notepad在system32中也有exe程序呀，不太懂……可以再详细点吗？[/quote] 經測試： system("notepad.exe"); 根本無法執行，打出來： 'notepad.exe' 不是内部或外部命令，也不是可运行的程序或批处理文件。[/quote] 需要提示你path环境变量中没有指向notepad.exe所在目录c:\windows\system32吗？ 需要提示你Linux下没有notepad.exe吗？ 需要提示你可能notepad.exe文件被谁删掉了吗？ 需要吗？ [/quote] 不需要，我如果连这些常识不知道还来这里搞什么？不过原因我找到了，并非不支持，而是我用的编译器的“编译运行”调起来程序就不行，而单独运行或在 cmd 里运行是可以的。不知道这个编译器做了什么操作，使我的环境变量发生了变化。

user: user-2
content: 引用 7 楼 SXJIAKE 的回复:[quote=引用 6 楼 wyf156470292 的回复:] [quote=引用 3 楼 SXJIAKE 的回复:] 调用命令行内置命令的，不是外部 exe。比如： copy、ren 等由 cmd.exe 原生提供，可以调用。 xcopy、reg 等由位于 system32 中的 xcopy.exe、reg.exe 提供，不能调用。 notepad在system32中也有exe程序呀，不太懂……可以再详细点吗？[/quote] 經測試： system("notepad.exe"); 根本無法執行，打出來： 'notepad.exe' 不是内部或外部命令，也不是可运行的程序或批处理文件。[/quote] 需要提示你path环境变量中没有指向notepad.exe所在目录c:\windows\system32吗？ 需要提示你Linux下没有notepad.exe吗？ 需要提示你可能notepad.exe文件被谁删掉了吗？ 需要吗？

user: user-3
content: 引用 6 楼 wyf156470292 的回复:[quote=引用 3 楼 SXJIAKE 的回复:] 调用命令行内置命令的，不是外部 exe。比如： copy、ren 等由 cmd.exe 原生提供，可以调用。 xcopy、reg 等由位于 system32 中的 xcopy.exe、reg.exe 提供，不能调用。 notepad在system32中也有exe程序呀，不太懂……可以再详细点吗？[/quote] 經測試： system("notepad.exe"); 根本無法執行，打出來： 'notepad.exe' 不是内部或外部命令，也不是可运行的程序或批处理文件。

user: user-0
content: 引用 3 楼 SXJIAKE 的回复:调用命令行内置命令的，不是外部 exe。比如： copy、ren 等由 cmd.exe 原生提供，可以调用。 xcopy、reg 等由位于 system32 中的 xcopy.exe、reg.exe 提供，不能调用。 notepad在system32中也有exe程序呀，不太懂……可以再详细点吗？

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:将要调用的命令写到一个临时批处理文件比如tmp.bat中，然后system之。 敢问大师如何system这个批处理文件

user: user-2
content: 将要调用的命令写到一个临时批处理文件比如tmp.bat中，然后system之。

user: user-3
content: 调用命令行内置命令的，不是外部 exe。比如： copy、ren 等由 cmd.exe 原生提供，可以调用。 xcopy、reg 等由位于 system32 中的 xcopy.exe、reg.exe 提供，不能调用。

user: user-4
content: 这个函数支持的函数有限

user: user-5
content: 权限问题，猜测
user-0 提问: 小弟我实在是找不出是哪错了，求帮忙

回复:
user: user-0
content: 引用 10 楼 michael2988 的回复:[quote=引用 8 楼 changhongyuan 的回复:] [quote=引用 7 楼 xionggch 的回复:] int StrAss(HStr & T) //新建 {     printf("请输入：");     char c;int i=0;     T.ch=(char *)malloc(sizeof(char));   //这里只分配了一个字节的空间     for(i=0;(c=getchar())!='#';i++)     {         T.ch[i]=c;    //要是输入多个字节就会溢出        T.ch = (char*)realloc( sizeof(char) * (i+2) );     }     T.ch[i] = '\0';     T.length=i;     printf("输入的字符为：");     ViewStr(T);     return OK; }   您看看。我已经把malloc开辟的空间调成100了[/quote]  当程序调用getchar时，程序就等着用户按键，用户输入的字符被存放在键盘缓冲区中，直到用户按回车为止（回车字符也放在缓冲区中）。当用户键入回车之后，getchar才开始从stdio流中每次读入一个字符。 所以你的情况是，输入#后，还有一个换行符存在于键盘缓冲区中。      for(i=0;(c=getchar())!='#';i++)     {         T.ch[i]=c;     }     // 消耗掉换行符     int ent = getchar(); [/quote]谢谢您   我明白了。

user: user-1
content: int StrAss(HStr & T) //新建 {     printf("请输入：");     char c;int i=0;     T.ch=(char *)malloc(sizeof(char));   //这里只分配了一个字节的空间     for(i=0;(c=getchar())!='#';i++)     {         T.ch[i]=c;    //要是输入多个字节就会溢出        T.ch = (char*)realloc( sizeof(char) * (i+2) );     }     T.ch[i] = '\0';     T.length=i;     printf("输入的字符为：");     ViewStr(T);     return OK; }

user: user-1
content: int StrAss(HStr & T) //新建 {     printf("请输入：");     char c;int i=0;     T.ch=(char *)malloc(sizeof(char));   //这里只分配了一个字节的空间     for(i=0;(c=getchar())!='#';i++)     {         T.ch[i]=c;    //要是输入多个字节就会溢出       }     T.length=i;     printf("输入的字符为：");     ViewStr(T);     return OK; }

user: user-2
content: 引用 8 楼 changhongyuan 的回复:[quote=引用 7 楼 xionggch 的回复:] int StrAss(HStr & T) //新建 {     printf("请输入：");     char c;int i=0;     T.ch=(char *)malloc(sizeof(char));   //这里只分配了一个字节的空间     for(i=0;(c=getchar())!='#';i++)     {         T.ch[i]=c;    //要是输入多个字节就会溢出        T.ch = (char*)realloc( sizeof(char) * (i+2) );     }     T.ch[i] = '\0';     T.length=i;     printf("输入的字符为：");     ViewStr(T);     return OK; }   您看看。我已经把malloc开辟的空间调成100了[/quote]  当程序调用getchar时，程序就等着用户按键，用户输入的字符被存放在键盘缓冲区中，直到用户按回车为止（回车字符也放在缓冲区中）。当用户键入回车之后，getchar才开始从stdio流中每次读入一个字符。 所以你的情况是，输入#后，还有一个换行符存在于键盘缓冲区中。      for(i=0;(c=getchar())!='#';i++)     {         T.ch[i]=c;     }     // 消耗掉换行符     int ent = getchar();

user: user-3
content: 先不说别的，这句好像就有点问题吧 if(a=0) printf("一样大\n");

user: user-0
content: 引用 7 楼 xionggch 的回复:int StrAss(HStr & T) //新建 {     printf("请输入：");     char c;int i=0;     T.ch=(char *)malloc(sizeof(char));   //这里只分配了一个字节的空间     for(i=0;(c=getchar())!='#';i++)     {         T.ch[i]=c;    //要是输入多个字节就会溢出        T.ch = (char*)realloc( sizeof(char) * (i+2) );     }     T.ch[i] = '\0';     T.length=i;     printf("输入的字符为：");     ViewStr(T);     return OK; }   您看看。我已经把malloc开辟的空间调成100了

user: user-0
content: 引用 4 楼 rozniak 的回复:我刚才又看了一下，你的问题是 1.主函数中 a=StrCompare(T).  = 的意思是赋值。 ==才是比较。 2.函数int StrAss有问题。我就是不知道 int StrAss()函数的错在哪  找了半个多小时了  找不到

user: user-4
content: 我刚才又看了一下，你的问题是 1.主函数中 a=StrCompare(T).  = 的意思是赋值。 ==才是比较。 2.函数int StrAss有问题。

user: user-0
content: 就是，程序运行提示输入字符，当运行到连接两个串函数时，再输入另一个串，连接完成后显示结果就出问题了

user: user-4
content: 你能说说代码有什么问题吗？我这边可以运行啊？

user: user-5
content: 你首先应该学会怎么提问题
user-0 提问: C语言 关于在头文件中定义变量的问题？

回复:
user: user-1
content: 一般情况下防止重定义   #ifndef xxx #define  xxx #endif

user: user-0
content: 引用 11 楼 adusuccessfully 的回复:[quote=引用 9 楼 mymtom 的回复:] C语言基本要求 不要在头文件中定义变量或者函数。  楼主为啥要在头文件中定义个a呢，有什么意义呢？  引用 10 楼 xionggch 的回复:a是全局变量，也就是说所有包含头文件"module1.h"中用的变量a是同一个变量a 所以main函数中a=50后，变量a值就变成50了 main函数中的a赋值就将头文件中a的赋值覆盖了  [/quote]我只是实验一下，存在两个副本这个说法是在网上看到的，所以就试一下看看了

user: user-1
content: 是啊，a是全局 然后  初始化的时候给了5  然后执行的时候是先用50覆盖了5,最后加的5     a是整个程序的全局，是共用的

user: user-2
content: 引用 9 楼 mymtom 的回复:C语言基本要求 不要在头文件中定义变量或者函数。  楼主为啥要在头文件中定义个a呢，有什么意义呢？  引用 10 楼 xionggch 的回复:a是全局变量，也就是说所有包含头文件"module1.h"中用的变量a是同一个变量a 所以main函数中a=50后，变量a值就变成50了 main函数中的a赋值就将头文件中a的赋值覆盖了

user: user-3
content: a是全局变量，也就是说所有包含头文件"module1.h"中用的变量a是同一个变量a 所以main函数中a=50后，变量a值就变成50了

user: user-4
content: C语言基本要求 不要在头文件中定义变量或者函数。

user: user-5
content: 这种奇葩编译能通过？？？？是地球人开发的编译器吗？  两个副本？？？谁教你的？拉出来枪毙五百次！

user: user-6
content: 不是说头文件中定义变量，在各个包含了头文件的模块中都对应着不同地址单元么？ ------------------------- 这句话哪里说的？  如果你的h文件没有 防止多次include保护机制， 编译会不通过吧，多重定义。 如果是 头文件有 防止多次include保护机制， 这个头文件不会实际上不会被包含2次的， 所以不存在你说的两个副本。

user: user-0
content: @nwcfafniw 在vc中有时候能通过，不知道是不是bug，但是正常情况下还是会报重定义的错。

user: user-7
content: 引用 4 楼 haigegee1988 的回复:他们不是两个副本吗？赋值应该不受影响才对啊 首先，千万不要在头文件中定义变量，只能在头文件中声明变量。你这种情况，在linux下就直接报“变量重复定义”的错误了。至于VC我不了解它怎么处理这种情况，但应该不是当成两个副本来处理。

user: user-0
content: 他们不是两个副本吗？赋值应该不受影响才对啊

user: user-8
content: 如果没记错，头文件会在编译的时候链接a等于5。  10或者55 就是取决于 a的附值顺序的问题。 头文件先附值，主函数后。建议不这么用，程序会有歧义

user: user-8
content: a定义的时候是5 附值后是50 50➕5 55。你可以单步调试看一看

user: user-0
content: 奇怪的是 有时候能编译通过，有时候又不能。。。。
user-0 提问: 刚学完C语言的同学有福了，有个视频，教大家怎么从C语言跨入Windows编程的大门

回复:
user: user-1
content: 这个要收费，只有第一个视频能免费观看~~~

user: user-0
content: 现在前六节可以免费观看了！

user: user-0
content: 不会吧，我该下。

user: user-2
content: 引用 1 楼 u013163178 的回复:还是跨入linux/unix吧 同

user: user-3
content: 还是跨入linux/unix吧
user-0 提问: 大家看看我的代码有没有啥问题

回复:
user: user-1
content: 引用 4 楼 dennes1988 的回复:[quote=引用 3 楼 zxhuser-2 的回复:] c99标准。。。 看样子我的错误已经明显到大家不屑于指出的程度了 好想知道到底咋回事啊[/quote] 错不错，我就不知道了，我没有这样的环境测试，数组这样使用确实很爽，但好多编译器并不支持这样的使用，还有函数的声明没特别要求的话，放到最外层，放main()里面是想干嘛？

user: user-0
content: 引用 3 楼 zxhuser-2 的回复:c99标准。。。 看样子我的错误已经明显到大家不屑于指出的程度了 好想知道到底咋回事啊

user: user-2
content: c99标准。。。

user: user-0
content: 引用 1 楼 u010030181 的回复:编译通过？运行正常？ 好牛逼的编译器……  我用的xcode啊 听起来问题很严重的样子，求指点，哪里有问题？

user: user-1
content: 编译通过？运行正常？ 好牛逼的编译器……
user-0 提问: C语言 自动关机程序 求解

回复:
user: user-1
content: system("at n:m shutdown -s -t 0");  你这个 m n 在字符串中代表的不是变量对应的值 而是 字母m和n

user: user-2
content: 引用 4 楼 wency935486 的回复:[quote=引用 1 楼 u010030181 的回复:] 先声明一个char数组char buffer [50] = {0};	sprintf (buffer, "at %d:%d shutdown -s -t 0",n,m);	 	system(buffer); 为什么要定义数组？能讲一下不？ system(buffer);的作用是什么？[/quote] 定不定义数组，不是一定的，你也可以malloc申请内存，存储这个字符串的。system(buffer)有什么用的？那就翻书看看基础知识吧……

user: user-3
content: 引用 4 楼 wency935486 的回复:[quote=引用 1 楼 u010030181 的回复:] 先声明一个char数组char buffer [50] = {0};	sprintf (buffer, "at %d:%d shutdown -s -t 0",n,m);	 	system(buffer); 为什么要定义数组？能讲一下不？ system(buffer);的作用是什么？[/quote]  3楼不是说的很清楚么 system("at n:m shutdown -s -t 0");  你这个 m n 在字符串中代表的不是变量对应的值 而是 字母m和n

user: user-0
content: 引用 1 楼 u010030181 的回复:先声明一个char数组char buffer [50] = {0};	sprintf (buffer, "at %d:%d shutdown -s -t 0",n,m);	 	system(buffer); 为什么要定义数组？能讲一下不？ system(buffer);的作用是什么？

user: user-4
content: 引用 1 楼 u010030181 的回复:先声明一个char数组char buffer [50] = {0};	sprintf (buffer, "at %d:%d shutdown -s -t 0",n,m);	 	system(buffer);+1

user: user-2
content: 先声明一个char数组char buffer [50] = {0};	sprintf (buffer, "at %d:%d shutdown -s -t 0",n,m);	 	system(buffer);
user-0 提问: 提问一个数据结构中清空与销毁的问题

回复:
user: user-1
content: 就是那么搞的啊 你说的清空指的是删除节点还是删除节点数据？ 1楼的代码就是清空（销毁）啊~！！ 不知道你说清空和销毁指的是啥

user: user-2
content: 你这个清空跟销毁怎么感觉没什么多大的区别？

user: user-3
content: 如果你有一个头节点head,你free(head)的话,只会删除第一个节点,你要删除所有节点,就这么干 struct node *tmp; if(head != NULL) do{     tmp = head ->next;     free(head);     head = tmp; }while(tmp != NULL);
user-0 提问: 为什么这个程序不能运行

回复:
user: user-1
content: 可以设置一个特殊字符作为结束标记，只要不是循环中要统计的字符就行了。

user: user-2
content: scanf("%c",&c);  这样好像没法给c得到EOF吧，建议改成类似这样的 while (c!= 'q') 或者这样也行 while (scanf("%c",&c)!=EOF)  输入Ctrl+Z(windows)或者Ctrl+D(linux)可以结束循环。循环里面的scanf可以删掉了。
user-0 提问: 运行这个程序时输入“input”为什么输出语句中只有一个“i"，而没有整个”input“

回复:
user: user-1
content: #include<iostream> using namespace std;

user: user-2
content: 仅供参考	char c[20] = {0}; 	printf("Please input a character:\n"); 	scanf("%s",&c);			// 字符串要用 %s 	char * p = c; 	while (*p != '\0') 	{ 		printf("The ASCII of %c is %d\n",*p,*p); 		p++; 	}  汉子无法用原先的ascll码表示，一个汉字需要2个字节来表示

user: user-2
content: 你scanf里边是%c就是接收一个字符，怎么能输出后边的呢？

user: user-3
content: scanf函数会将多余的字符留在缓冲区，下去调用scanf不等待键盘输出，直接重缓冲区读取数据。 以下内容，仅供参考。 /*************************************************************************     > File Name: scanf_1.c     > Author: 傻李     > Mail: hellojukay@gmail.com      > Created Time: 2014年11月22日 星期六 12时07分00秒  ************************************************************************/  #include<stdio.h> int main() { 	char ch; 	printf("Please input a character:\n"); 	scanf("%c",&ch); 	while(ch != '\n') 	{ 		printf("The ASCII of %c is %d\n",ch,ch); 		scanf("%c",&ch); 	} 	return 0; }

user: user-4
content: 引用 2 楼 starytx 的回复:你scanf里边是%c就是接收一个字符，怎么能输出后边的呢？+1

user: user-5
content: 3楼正解，char只有一个字节哈， 汉字是2个字节， 所有你打印的只是汉字中国中的中字的前1个字节........

user: user-0
content: 什么意思，不清楚，可否详细说明一下
user-0 提问: 不借助任何工具用c语言打开bmp图像，将其转换为JPEG格式并存储

回复:
user: user-1
content: 好复杂的一个问题,显示图片都不是很难,难就在还要换格式

user: user-2
content: 首先解析bitmap文件，bitmap文件有两个部分，一个是头，一个是体。头和体都是固定的结构，“体”要注意调色板。  头的结构在windows的一个头里有，网上也有资料。 体由三部分组成：  1. 基本info 2. 调色板 3. 像素信息  其中调色板可选，超过256色没有调色板。而256色以下的，必须有调色板。这部分细节还是要看网上资料。  jpeg的编码用libjpeg库。

user: user-3
content: 就是查bmp和jpg的文件格式。 如果不能用库，jpg文件生成也就是3个步骤：DCT变换，量化，游程编码。

user: user-4
content: bmp格式比较简单，自己写。编码成jpeg可以用libjpeg库。

user: user-5
content: http://www.imagemagick.org

user: user-6
content: 上网上找bmp文件的结构体，将文件中的数据读到结构体中，然后在找jpeg结构体 根据需要填充即可

user: user-7
content: 哥们，你在上多媒体的课么
user-0 提问: 求解答？？

回复:
user: user-1
content: unsigned long long 有取值范围的，存不了1000位的十进制数，大数一般用字符串存储

user: user-2
content: 高精度数字可以用整数数组来模拟,需要定义相关的运算函数,如+-*/

user: user-3
content: 你的问题本身就不对

user: user-4
content: 引用 3 楼 useruser1 的回复:如果定义不超100位10进制应该怎么定义？ 表示很大的数据就用 char a[100];

user: user-0
content: 如果定义不超100位10进制应该怎么定义？

user: user-0
content: 其实不确定，但肯定是不超100位，十进制应该不行，那就是二进制的，是吗？

user: user-4
content: 楼主说的100位是指二进制位还是十进制为？
user-0 提问: 问几个问题

回复:
user: user-0
content: 人呢?自顶~~~~

user: user-0
content: 不知道怎么改才可以,比如我把key改成apt+m；然后return i，m不知道为什么会报错

user: user-0
content: 我对问题2编写了一个函数,不过只能输出一个值,而不能输出自己本身的下标 #include <stdio.h> #include <stdlib.h> int search(int *apt,int n,int key) { 	int *p,i=0;     for(p=apt;p<apt+n-1;p=apt+i) 	{	if(*p==key) 			return i; 		i++;     } 	return -1; } int b[]={90,80,90}; int main() {	int d; 	d=search(b,sizeof(b)/sizeof(b[0]),b[2]); 	if(d!=-1) 		printf("%d",d); 	else 		printf("No the same"); 	system("pause"); 	return 0; }

user: user-1
content: 仅供参考 /*************************************************************************     > File Name: qsort_3.c     > Author: 傻李     > Mail: hellojukay@gmail.com      > Created Time: 2014年11月22日 星期六 12时55分56秒  ************************************************************************/  #include<stdio.h> struct node { 	int data; 	int No;//编号 }; int comp(void *a,void *b) { 	return (*(struct node *)a).data - (*(struct node *)b).data; }  int main() { 	int a[] = {5,1,2,5,8,6,85,5,8,5,8,5,8,6,8,2,5,8,2,0,2,99,5}; 	int len = sizeof(a)/sizeof(int); 	int i,j; 	struct node arry[len]; 	for(i =0; i < len; ++i ) 	{ 		arry[i].No = i; 		arry[i].data = a[i];  	} 	//排序数组 	qsort(arry,len,sizeof(struct node),comp); 	for(i = 0, j = 1; j < len; ) 	{ 		if(arry[i].data == arry[j].data) 		{     //区间[arry[i], arry[j]]内的值相等 			++j; 		} 		else if(j -i >1) 		{ 			for(;i <j ;++i) 			printf("( 编号:%2d ,  数值:%2d )\n",arry[i].No ,arry[i].data); 		} 		else 		{ 			i = j; 			++j; 		} 	} 	return 0; }

user: user-2
content: return只能返回一个值，不能像你写的都返回两个值了，所以报错了啊。如果需要返回多个值，可以考虑使用传引用进去。
user-0 提问: fscanf()文件读入的问题

回复:
user: user-0
content: 引用 1 楼 user-3 的回复:建议楼主检查fscanf的返回值，如果返回EOF就跳出循环。         if (fscanf(fp, "%s%s%s", p->Name, p->IdNum, p->PassWord) == EOF) {             free(p);             break;         } 这个方法我也试过，的确可行，不过我想知道的是为什么会出这种错....我觉着问题可能出在最后一个字符串末尾的\n上，不过不知道除了检查返回值以外，有没有什么能针对这个问题的解决办法...求指教

user: user-0
content: 引用 2 楼 cutail 的回复:feof是根据FILE中的结束标记位是否被标记来判断是否结束的。当读完最后一条记录时（读取成功），结束标记位没有置1，所以循环中feof判断没有达到文件尾，继续进入循环，这就多进入了一次。 那怎么解决呢？除了检查fscanf返回值的方法以外有没有什么办法？我调试的时候感觉问题出在了最后一条字符串末尾的\n上，只是还没想出什么好的解决方法

user: user-0
content: 引用 5 楼 michael2988 的回复:“C”语言的“feof()”函数和数据库中“eof()”函数的运作是完全不同的。数据库中“eof()”函数读取当前指针的位置，“C”语言的“feof()”函数返回的是最后一次“读操作的内容”。   [quote=引用 4 楼 u013805360 的回复:] [quote=引用 1 楼 user-3 的回复:] 建议楼主检查fscanf的返回值，如果返回EOF就跳出循环。         if (fscanf(fp, "%s%s%s", p->Name, p->IdNum, p->PassWord) == EOF) {             free(p);             break;         } 这个方法我也试过，的确可行，不过我想知道的是为什么会出这种错....我觉着问题可能出在最后一个字符串末尾的\n上，不过不知道除了检查返回值以外，有没有什么能针对这个问题的解决办法...求指教[/quote][/quote] 最后一次读操作之后文件的位置指针不是指向了最后一个字符串后面吗？而且如果最后一个字符串末尾没有\n的话就不会多执行一次while循环了，为什么呐...

user: user-1
content: “C”语言的“feof()”函数和数据库中“eof()”函数的运作是完全不同的。数据库中“eof()”函数读取当前指针的位置，“C”语言的“feof()”函数返回的是最后一次“读操作的内容”。   引用 4 楼 u013805360 的回复:[quote=引用 1 楼 user-3 的回复:] 建议楼主检查fscanf的返回值，如果返回EOF就跳出循环。         if (fscanf(fp, "%s%s%s", p->Name, p->IdNum, p->PassWord) == EOF) {             free(p);             break;         } 这个方法我也试过，的确可行，不过我想知道的是为什么会出这种错....我觉着问题可能出在最后一个字符串末尾的\n上，不过不知道除了检查返回值以外，有没有什么能针对这个问题的解决办法...求指教[/quote]

user: user-0
content: 非常感谢，弄明白了 引用 7 楼 michael2988 的回复:eof() 才是返回指针位置，而feof() 返回最后一次读取的内容。  http://baike.baidu.com/view/656648.htm?fr=aladdin

user: user-1
content: eof() 才是返回指针位置，而feof() 返回最后一次读取的内容。  http://baike.baidu.com/view/656648.htm?fr=aladdin

user: user-2
content: feof是根据FILE中的结束标记位是否被标记来判断是否结束的。当读完最后一条记录时（读取成功），结束标记位没有置1，所以循环中feof判断没有达到文件尾，继续进入循环，这就多进入了一次。

user: user-3
content: 建议楼主检查fscanf的返回值，如果返回EOF就跳出循环。         if (fscanf(fp, "%s%s%s", p->Name, p->IdNum, p->PassWord) == EOF) {             free(p);             break;         }
user-0 提问: 看不懂代码 求助已知 abc+cba=1333，其中a、b、c均为一位数，编程序求出a、b、c的值。

回复:
user: user-1
content: 它的思路就是简单的穷举，把所有可能的组合都验证一遍。 y=100*c+10*b+a; printf("a = %d, b = %d, c = %d, x=%d, y = %d\n", a, b, c, x, y);  // 加上这一行，运行一下看看输出就明白了。  if(x+y==1333)

user: user-2
content: 这3个for循环在一起连着，{}可以省略不写，你可以把{}加上慢慢算呗

user: user-0
content: 求帮助 我就是不知道他是按照什么顺序执行的
user-0 提问: vs2010   预编译  结果错误

回复:
user: user-0
content: 引用 1 楼 user-2 的回复:不要把printf放到else同一行里面。 #else printf("abc\n"); 这样分成两行才是正确的写法。 我不知道为什么VC能输出abc，也不想知道，没有意义。 一楼方法解决了问题,是不是因为预编译一定要单独占据一行呢

user: user-1
content: 引用 1 楼 user-2 的回复:不要把printf放到else同一行里面。 #else printf("abc\n"); 这样分成两行才是正确的写法。 我不知道为什么VC能输出abc，也不想知道，没有意义。  谢谢，请问，if  else  endif 前面加上#有什么意义，和不加有啥区别？？？@user-2

user: user-2
content: 不要把printf放到else同一行里面。 #else printf("abc\n"); 这样分成两行才是正确的写法。 我不知道为什么VC能输出abc，也不想知道，没有意义。
user-0 提问: 关于函数

回复:
user: user-0
content: thank you very much

user: user-1
content: 引用 2 楼 user-2 的回复:仅供参考 long fun(long nNum) { 	static long nTmp = 0; 	if (nNum > 0) 	{ 		nTmp = nTmp*10+nNum%10; 		nNum = nNum/10; 		fun(nNum); 	} 	return nTmp; }

user: user-2
content: 仅供参考 long fun(long nNum) { 	static long nTmp = 0; 	if (nNum > 0) 	{ 		nTmp = nTmp*10+nNum%10; 		nNum = nNum/10; 		fun(nNum); 	} 	return nTmp; }

user: user-1
content: long num_rev(long l) {     char str[100] = {0};     sprintf(str, "%ld", l);      // 字符串反向     char *p1 = str;                     // 指向首字符     char *p2 = str + strlen(str) - 1;   // 指向最后一个有效字符     while (p2 > p1)     {         char c = *p1;         *p1 = *p2;         *p2 = c;         p1++;         p2--;     }      sscanf(str, "%ld", &l);      return l; }
user-0 提问: 字符串逆序

回复:
user: user-1
content: 我是在楼主的基础上修改的。函数可以不需要那么多参数，也可以不需要返回值：  #include<stdio.h> #include<string.h> #define MAX_STR_LEN 100 void str_rev(char * s) { 	int i,d; 	char c; 	d=strlen(s); 	for(i=0;i<d/2;i++) 	{ 		c=s[i]; 		s[i]=s[d-i-1]; 		s[d-i-1]=c; 	} 	s[d] = '\0'; }  int main() { 	char s[MAX_STR_LEN]; 	gets(s); 	str_rev(s); 	puts(s); 	return 0; }

user: user-2
content: 或者使用strrev()函数，不过这不是标准库函数

user: user-2
content: #include<stdio.h> #include<string.h>  void swap(char *, char *); //逆序 void reverse(char *str) {     int i = 0, j = strlen(str) - 1;     for(; i <( j/2) ; ++i) 	swap(&str[i], &str[j-i]); } //交换值 void swap(char *a , char *b) {     char tmp;     tmp = *a;     *a = *b;     *b = tmp; }  int main() {     char str[] = "hello world";     reverse(str);     printf("%s",str);     return 0; }

user: user-3
content: 函数无需那么多参数，就一个char*参数就行了，直接修改实参数组的值，仅供参考 void str_rev(char * s) { 	char *p1 = s;		// 指向首字符 	char *p2 = s + strlen(s) - 1;		// 指向最后一个有效字符 	while (p2 > p1) 	{ 		char c = *p1; 		*p1 = *p2; 		*p2 = c; 		p1++; 		p2--; 	} }  int main(） { 	char str[100] = {0}; 	gets(str); 	str_rev(str); 	puts(str);  	return 0; }

user: user-4
content: str_rev 没有返回值，而且不明白你要实现什么？
user-0 提问: 今天笔试遇到一个题，求助！！

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

user: user-1
content: 耶稣的叛徒。。。

user: user-2
content: #include <stdio.h> #define SIZE 50  int main() { 	int ath[SIZE] = {0}; 	int odd, i; 	int flag; 	int count = SIZE; 	printf("请选择：0-单数出列\t1-双数出列"); 	scanf("%d", &odd); 	 	while(count >= 1) { 		flag = 0; 		for(i=0; i<SIZE; i++){ 			if(ath[i] == 0){ 				if(count == 1) { 					printf("最后剩下的是%d\n", i + 1); 					return 0; 				} 				if(flag == odd){ 					ath[i] = 1; 					count--; 				}  				flag = 1 - flag; 			} 		} 	}     return 0; }  或者 #include <stdio.h> #include <math.h>  int main() { 	int n, odd; 	printf("请输入运动员人数："); 	scanf("%d", &n); 	printf("请选择：0-单数出列\t1-双数出列"); 	scanf("%d", &odd); 	switch(odd){ 	case 0: printf("最后剩下的是%d\n", (int)(pow(2, (int)(log(n)/log(2))))); break; 	case 1: printf("最后剩下的是1\n"); break; 	}     return 0; }

user: user-3
content: 高端一下就是约瑟夫环吧，简单的想就弄一个数组，0表示在队列里，1表示出列，每次都遍历数组，若在队列里，就用此次遍历的次数取余来判定需不需要出列就行。到最后剩下一个就是答案了。

user: user-4
content: 发现一个有趣的现象：单数出列最后剩下的无非就是2,4,8,16,32,64等等这样的结果，也就是说只要你给的人数在这些数字某两个之间（前闭合区间），那么最后剩下的就是较小的那个数，例如你的例子是50,50在32和64之间，那么最后就剩下32号

user: user-4
content: 用的递归函数，这个是单数出列的，双数出列比较容易想，肯定剩下第一号。 int fun(int *p ,int nNum) { 	if (nNum > 1) 	{ 		int i = 0;       // 双数出列的话，改为 1 		for (; i < nNum/2; i++) 		{ 			p[i] = p[2*i+1];    // 双数出列的话改为 p[i] = p[2*i]; 		} 		fun(p ,i); 	} 	return p[0]; }  int _tmain(int argc, _TCHAR* argv[]) { 	int n[50] = {0};     	for (int i = 0; i != 50; i++) 	{ 		n[i] = i + 1;    // 初始化为1~49 	} 	printf("最后剩下第 %d 号\n" ,fun(n,50)); 	return 0; }

user: user-5
content: 链表、数组都可以解决

user: user-2
content: 约瑟夫环  。
user-0 提问: 安装Visual Studio 2013(vs2013 Update4 RC)正式版出现错误提示

回复:
user: user-0
content: 我还是用vs2012吧,你说的code::block是指啥???

user: user-1
content: http://www.codeblocks.org/  引用 2 楼 TLKooo 的回复:我还是用vs2012吧,你说的code::block是指啥???

user: user-2
content: 何必这么高级，用code::block不也挺好
user-0 提问: 指针 文件读出范围的，看不懂代码，求赐教 。

回复:
user: user-1
content: 这是C函数？

user: user-2
content: 引用 3 楼 tpnndhqc 的回复:这都小事，楼上的说的很好，具体函数干嘛的你慢慢看代码。 来楼主，我们讨论个大事，你这半边头像是本人不！！！    这才是 小事好不好 ，

user: user-3
content: 程序媛？0.0

user: user-4
content: 这都小事，楼上的说的很好，具体函数干嘛的你慢慢看代码。 来楼主，我们讨论个大事，你这半边头像是本人不！！！

user: user-5
content: typedef struct stu STU;//将struct stu结构体类型化名为STU typedef STU*       STUPTR;//将STU 指针化名为STUPTR  STUPTR insert(STUPTR head, int id, char* name);//将字符串的数据插入链表中 void print_st(STUPTR head);//打印链表中的数据 void save_to_file(FILE* fp, STUPTR head);//将链表中的数据保存在文件中 FILE* crt_file( void ); STUPTR  read_to_link(STUPTR head);

user: user-6
content: 前两行是定义结构体类型别名，还有指针类型名 下边就是一些函数的声明了。看不懂哪些东西呢
user-0 提问: 简单的求三角形面积 请大家帮忙找下错 我真的 找不到

回复:
user: user-0
content: 引用 4 楼 user-1 的回复:float a,b,c,s=(a+b+c)/2;scanf("%f,%f,%f",&a,&b,&c); 你的s有问题，放在scanf之后定义就可以了，因为这时候你的边长还没有输入。 ps:浮点数最好不要直接用 == 来进行判断是否相等，因为浮点数有精度问题，所以最好用两数之差的绝对值在某个很小的数(比如0.000001)之内来判断是否相等.     谢谢了 以前一直没注意这个问题 谢了

user: user-1
content: float a,b,c,s=(a+b+c)/2;scanf("%f,%f,%f",&a,&b,&c); 你的s有问题，放在scanf之后定义就可以了，因为这时候你的边长还没有输入。 ps:浮点数最好不要直接用 == 来进行判断是否相等，因为浮点数有精度问题，所以最好用两数之差的绝对值在某个很小的数(比如0.000001)之内来判断是否相等.

user: user-0
content: 就是2楼 判断都是对了 就是面积不对

user: user-0
content: 谢谢了 大神 快来 要疯了

user: user-0
content: #include<stdio.h> #include<math.h> main() { float a,b,c,s=(a+b+c)/2; scanf("%f,%f,%f",&a,&b,&c); if((a+b>c)&&(a-b<c)) { 	if(a==c&&b==c) 	 		printf("等边三角形面积为%f\n",sqrt(s*(s-a)*(s-b)*(s-c))); 	else if(a==b||a==c||c==b) 	 		printf("等腰三角形面积为%f\n",sqrt(s*(s-a)*(s-b)*(s-c))); 	else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a) 		 	{ 		printf("直角三角形面积为%f\n",sqrt(s*(s-a)*(s-b)*(s-c))); 	} 		 	else	printf("一般三角形面积为%f\n",sqrt(s*(s-a)*(s-b)*(s-c))); 	 	 } else printf("不是三角形\n"); }
user-0 提问: ~~hook 网页请求

回复:
user: user-1
content: 英语也是一门计算机语言的说。

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:http://jacquelin.potier.free.fr/winapioverride32/ ....这。。看说明好像很牛逼。。慢慢试试，话说有中文的这种工具么，google翻译看着真难受。。。。。。

user: user-1
content: http://jacquelin.potier.free.fr/winapioverride32/

user: user-1
content: 高兴了你还可以hook WebBrowser控件： http://jacquelin.potier.free.fr/index.php

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:没必要hook，用WebBrowser控件应该足够了。 不成，我显示网页时用的webbrowser, 但是webbrowser直接就打开网页了,我要过滤掉有些内容，而且我想查看有些封包发送接收过程； 通过完全依赖webbrowser处理有些我的需求，要去看js代码烦人。。。。  另外，就当是个兴趣尝试尝试

user: user-1
content: 没必要hook，用WebBrowser控件应该足够了。
user-0 提问: 怎样对二维数组动态内存分配？

回复:
user: user-1
content: 引用 2 楼 turingo 的回复:++，修改设计才是正道。  [quote=引用 1 楼 layershow 的回复:] // 分配 T * p = (T *)malloc(sizeof(T) * N * (2*N-1)); // 释放 free(p);  你搞这么大的数组，就是方案设计问题了，所以建议你别沿这条路往下走了 物理内存 4G 与程序能用的内存是两码事[/quote]++++

user: user-2
content: 百度 MapViewOfFile 映射大文件

user: user-3
content: // 分配 T * p = (T *)malloc(sizeof(T) * N * (2*N-1)); // 释放 free(p);  你搞这么大的数组，就是方案设计问题了，所以建议你别沿这条路往下走了 物理内存 4G 与程序能用的内存是两码事

user: user-4
content: 4G?   为什么要这么大  修改设计方案吧

user: user-5
content: 动态数组在小数据量的情况下可以的，但数据量大时，一般采用链表存储成文件的方式，在输入的同时，也保存成文件存到硬盘中，使用的时候在从文件中读取，可以使用ini，cvs等

user: user-6
content: 仅供参考#include <stdio.h> #include <stdlib.h> #include <malloc.h> int **newarr2d(int rows,int cols) {     int **p,i;      p=(int **)malloc(rows*sizeof(int *));     if (NULL==p) exit(1);     for (i=0;i<rows;i++) {         p[i]=(int *)malloc(cols*sizeof(int));         if (NULL==p[i]) exit(1);     }     return p; } void deletearr2d(int **p,int rows) {     int i;      for (i=0;i<rows;i++) {         free(p[i]);     }     free(p); } int main() {     int **arr2d,i,j,r,c;      r=4;     c=5;     //在堆中开辟一个4×5的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      r=6;     c=3;     //在堆中开辟一个6×3的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      return 0; } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19 //  0  1  2 //  3  4  5 //  6  7  8 //  9 10 11 // 12 13 14 // 15 16 17 //  如果还不够用的话，用文件读写模拟内存读写，参考_lseeki64函数。

user: user-7
content: ++，修改设计才是正道。  引用 1 楼 layershow 的回复:// 分配 T * p = (T *)malloc(sizeof(T) * N * (2*N-1)); // 释放 free(p);  你搞这么大的数组，就是方案设计问题了，所以建议你别沿这条路往下走了 物理内存 4G 与程序能用的内存是两码事