Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 关于栈和循环的问题，求解

回复:
user: user-1
content: 1、L是什么呢？看样子是链表吧，最后一个元素的next是不是0呢 2、p应该是一个指针，是什么原因要定义成BigInter

user: user-2
content: 不要只看着代码在想，单步跟踪程序运行，观察分析原因

user: user-3
content: 目测这几个函数会有问题 InitStack() Push() IsEmpty() Pop() IsEmpty()

user: user-4
content: 很明显你的BigInteger 有问题

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

回复:
user: user-1
content: 看看汇编就知道区别了

user: user-2
content: （2）int a=4;          ++a+=++a;        最终a的值为12，这是为什呢？ 因为这个属于未定义行为，编译器觉得怎么好怎么玩

user: user-3
content: 第二个问题是因为先算++，也就是把+=前后的++都算完了才算+=，算完了左边是6，右边也是6，所以就等于12了

user: user-4
content: 关于C,C++表达式求值顺序  http://bbs.csdn.net/topics/370153775

user: user-4
content: 问题一：对于类对象来说，后置的++实际是返回该对象，然后调用前置的++运算符，所以效率没前置高，对于基本类型来说一样的  问题二：这是一个未定义行为，与顺序点有关

user: user-3
content: 你是再看C++的书吧，这里说的效率高是针对类对象而言的 不知道你有没有看到运算符重载，在运算符重载时，后置运算符函数是调用前置运算符函数实现的，所以后置的比前置的慢一些，至于为什么，你看到那儿就明白了 对于内置类型来说，他们是没有区别的，最后生成的汇编代码都是一样的（估计是inc）

user: user-5
content: 前置运算符是先运算再赋值，后置运算符是先赋值再运算；

user: user-0
content: 引用 4 楼 qq_24689933 的回复:看看汇编就知道区别了 引用 5 楼 qq423399099 的回复:未定义行为，编译器可能会优化也可以不优化，取决于编译器。 不同编译器会得出不同结果 您说的编译器优化应该如何理解呢？ 我是这么想的：如果编译器存在优化，会将a的值(也就是4)放在寄存器中，先进行一次++，寄存器中的值变成5，然后=后面的++a从寄存器中读取数据，然后加1，变成了6，5+6=11，结果为11 如果不存在优化的话，每次取a的值都是从内存中取值，第一次++后内存中值变成5，第二次++变成6，进行加法运算时再从内存中取值：6+6=12，结果为12 我这么理解对么？我对编译器优化不懂。。

user: user-6
content: 未定义行为，编译器可能会优化也可以不优化，取决于编译器。 不同编译器会得出不同结果
user-0 提问: 关于输入方面的问题

回复:
user: user-1
content: 现在的码农竟然99%都不会在cmd窗口中输入cd命令设置当前目录为程序所在目录，输入程序名运行程序了！

user: user-2
content: 因为1个getchar()不够用。 做个循环，就可以了。 窗口系统下的控制台程序，就是这个味道。 如果是纯粹的控制台，是不会退出，程序运行结束，控制台依然存在。

user: user-3
content: 程序中没有可以让执行暂停的语句，所以一闪而过了。 printf后的getchar把回车给接收了。

user: user-4
content: 运行到了，只是马上就退出了，你多加几个getchar()就可以了 如不明白欢迎继续追问，如满意请及时结贴，谢谢

user: user-5
content: main函数中的最后加上getchar();  否则程序执行完就直接退出了

user: user-6
content: 运行到了，只是运行时间太短直接退出了，可以加system("pause");查看结果； 或者设置断点单步调试查看结果；

user: user-7
content: 不是进行不到，而是程序正常结束了，你来不及看到。 可以加system("pause"); 或者F5运行
user-0 提问: 运行样例时错误  runtimeerror

回复:
user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。
user-0 提问: 二叉树链式存储结构

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

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

user: user-0
content: 引用 5 楼 gongda2014306 的回复:引用 4 楼 gongda2014306 的回复:[quote=引用 3 楼 zxhuser-2 的回复:] [quote=引用 2 楼 gongda2014306 的回复:] 回车？你的意思是我的ch有可能是‘\0’在代码中添加输出ch数值的语句,看看ch值到底是多少 输入1，ch就是1，；输入#，ch就是#，回车符没有影响[/quote] 不对，好像有影响， [/quote] 就是直接在getchar后面加了一句printf

user: user-0
content: 引用 4 楼 gongda2014306 的回复:引用 3 楼 zxhuser-2 的回复:[quote=引用 2 楼 gongda2014306 的回复:] 回车？你的意思是我的ch有可能是‘\0’在代码中添加输出ch数值的语句,看看ch值到底是多少 输入1，ch就是1，；输入#，ch就是#，回车符没有影响[/quote] 不对，好像有影响，

user: user-0
content: 引用 3 楼 zxhuser-2 的回复:引用 2 楼 gongda2014306 的回复:回车？你的意思是我的ch有可能是‘\0’在代码中添加输出ch数值的语句,看看ch值到底是多少 输入1，ch就是1，；输入#，ch就是#，回车符没有影响

user: user-2
content: 引用 2 楼 gongda2014306 的回复:回车？你的意思是我的ch有可能是‘\0’在代码中添加输出ch数值的语句,看看ch值到底是多少

user: user-0
content: 引用 1 楼 zxhuser-2 的回复:回车没处理掉? 回车？你的意思是我的ch有可能是‘\0’

user: user-2
content: 回车没处理掉?
user-0 提问: 程序莫名停止运行 找不到问题

回复:
user: user-0
content: 引用 1 楼 u010165006 的回复:scanf("%d",&a[i]); 确实是scanf的问题，我把a[]和指针的使用方式搞错了

user: user-1
content: SUM里面的变量j也可以名为i，因为SUM里的i和main里的i都是局部变量是不同的。

user: user-1
content: sum的逻辑不对：   for(j=0;j<n;j++)      {         sum += *(p+j);          if(*(p+j)%2!=0)              printf("%d ",*(p+j));      }

user: user-1
content: scanf("%d",&a[i]);
user-0 提问: 请问大家，C语言函数只要加了函数声明，可以在任何地方使用，那么结构体也可以这样吗？

回复:
user: user-1
content: 不行的，你调用的函数只是一个入口地址，而定义结构体变量是要分配内存的，只看到声明无法确定所占内存大小，所以编译器必须见到结构体的定义，这也是为什么结构体和类的定义放在头文件，而相关函数的实现放在实现文件中的原因

user: user-2
content: 不完整类型
user-0 提问: 大家好，C语言在下面定义了一个结构体，要在定义的上面使用,除了移动到上面定义还有其他方法吗?能不能像函数声明一样，上面就可以用了?

回复:
user: user-1
content: 前置声明了也还是不完整类型，只能用指针类型

user: user-0
content: 有大神没呢？
user-0 提问: 关于大数求余数问题

回复:
user: user-1
content: http://blog.csdn.net/qwb492859377/article/details/48323443

user: user-0
content: 引用 1 楼 qq423399099 的回复:输入和报错的截个图看看 我是在nyoj上边测试的

user: user-2
content: 输入和报错的截个图看看
user-0 提问: 关于C中fgetc读文件

回复:
user: user-1
content: char ch; 改成 int ch; C 读写字符，返回int 而不是 char, 因为返回值，同时表示读取的字符，和读取文件的状态（成功，失败，文件结束）

user: user-0
content: 引用 1 楼 user-2 的回复:运算符优先级 有点明白了，关系运算符优先级要高于赋值运算。谢谢

user: user-2
content: 运算符优先级
user-0 提问: sizeof求数组大小的问题

回复:
user: user-1
content: #include <iostream> using namespace std;}  extern const float model[];  void SizeofAfterDeclare(){        //cout <<sizeof(model)<<endl; //报错 } const float model[]={     1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; void SizeofAfterDefine(){        cout <<sizeof(model)<<endl; //没问题。 }  int main(){      SizeofAfterDeclare();      SizeofAfterDefine();      return 0; }   C,C++ 文法，是上下文相关文法。 不是上下文无关文法。 1） 声明以后，不能知道数组大小，除非直接标明大小 2) 定义以后，可以准确知道数组的大小 ------用常量表达式定义的， 或者用初始化表定义，编译器点数的-------------

user: user-1
content: 不同实现文件中，声明相同名字的数组，大小可以不一致 各个实现文件中，该数组，是同一个，数组， 不过可以得到本文件的声明的数组大小。

user: user-2
content: 楼主其实可以直接把 include a.h 换成 #include "tables.cpp"

user: user-3
content: incomplete type

user: user-3
content: The sizeof operator shall not be applied to an expression that has function type or an incomplete type

user: user-4
content: sizeof 的计算发生在代码编译 的时刻。。  extern 标注的符号 在链接的时刻解析。。。   所以 sizeof 不知道 这个符号到底占用了多少空间。  原因在于没有声明长度的数组是个不完整类型。 匿名长度的数组声明在有初始化值定义时会有编译器根据初始化列表确定其长度。但是对与extern文件外部的数组，只有链接时才能确定其大小（同一文件的extern我等会测试），但sizeof运算符需要在编译时就确定对象的大小，于是错误就出现了。 解决办法就是声明的时候给它个长度。

user: user-5
content: 编译期的话，写上大小就行了，运行期的话，(tables.cpp里)用一个函数返回大小，编译器会优化的
user-0 提问: 关于并查集的问题

回复:
user: user-1
content: 考虑这样的情况，所有的城镇都是联通的了，那么bin中存放的并查集中除了root节点bin[i] = i之外其他的节点都有自己的父亲，所以count要从-1开始，多一个没有连通的城镇就是多出一个bin[i] = i的点，显而易见，没有联通就多用一条道连起来，这样就很简单的得到了count
user-0 提问: mysql数据库 链接库文件的问题

回复:
user: user-0
content: 因为系统和mysql都是64位的  有什么其他办法吗  直接拷贝太暴力了吧  设置ld.so.conf 也没用  一编译就显示  [x@localhost mysql]$ make gcc -o mysql1 mysql1.o -lmysqlclient.so /usr/bin/ld: cannot find -lmysqlclient.so collect2: 错误：ld 返回 1 make: *** [all] 错误 1

user: user-1
content: 把文件复制到 /usr/lib
user-0 提问: STL----lower_bound和upper_bound的一些问题

回复:
user: user-1
content: Return value  Iterator pointing to the first element that is not less than value, or last if no such element is found. http://en.cppreference.com/w/cpp/algorithm/lower_bound

user: user-2
content: 试试不就行了....代码需要多练，看是看不会的 #include <algorithm> #include <iostream> #include <vector> #include <cassert>  int main() {     std::vector<int> v{ 1, 2, 2, 3, 4, 4, 4, 4, 5, 6, 7, 8, 9, 9, 10 };     auto itr = std::lower_bound(v.begin(), v.end(), 11);     assert(itr == v.end()); }

user: user-0
content: 引用 1 楼 user-2 的回复:...不叫数据库，叫做标准库...和std::find之类的差不多吧...返回end迭代器表示没有找到  就是直接返回没有找到吗？

user: user-2
content: ...不叫数据库，叫做标准库...和std::find之类的差不多吧...返回end迭代器表示没有找到
user-0 提问: 工行网上支付接口,订单数据加密

回复:
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不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？ 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话，文本文件的格式问题可参考json或xml  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！
user-0 提问: 关于C语言指针数组的学习

回复:
user: user-1
content: http://edu.csdn.net/course/detail/2516 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
user-0 提问: 请教一个传参技巧问题

回复:
user: user-0
content: 引用 3 楼 calen_ 的回复:楼主说的不会是 compound literal 的一种黑科技吧..... swap((int[]){/*a=*/2}, (int[]){3}); 还有，楼主你那个括号怎么搞的!!  没错，就是强转成一个复合字面常量数组，好像是C99里面新增的，刚开始忘了加-std=c99，一直遍不过去。。。当时到论坛求助时，没把括号删了。。。后来自己翻了下书，编过去了。

user: user-1
content: 即使能换成数组调用也是int*[2]类型的参数，不可能接受int [2]类型的参数的

user: user-2
content: 楼主说的不会是 compound literal 的一种黑科技吧..... swap((int[]){/*a=*/2}, (int[]){3}); 还有，楼主你那个括号怎么搞的!!

user: user-3
content: 请教下楼主，你说的是啥意思？ a b是两个整数，与数组怎么扯上关系呢？ 楼主的swap函数的入参是指针，调用时可传递int型的数组名，指向的就是数组的第一个元素

user: user-4
content: 仅供参考：#include <stdio.h> #define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0) char   *p1="1" ,*p2="2" ; char    c1=1   , c2=2   ; short   s1=1   , s2=2   ; int     i1=1   , i2=2   ; __int64 I1=1i64, I2=2i64; float   f1=1.0f, f2=2.0f; double  d1=1.0 , d2=2.0 ; void main() {     SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);     SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);     SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);     SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);     SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);     SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);     SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);      SWAP(c1,c1);     printf("%d\n",c1); } //char *         2,       1 //char           2,       1 //short          2,       1 //int            2,       1 //__int64     2,    1 //float          2,       1 //double        2,      1 //2
user-0 提问: 数据结构程序设计家族关系

回复:
user: user-1
content: 能不能用C+++

user: user-2
content: http://blog.csdn.net/u010590318/article/details/36912439  这里可以参考一下

user: user-2
content: 你这个就是普通的树，非二叉树  一个结点可以多个孩子  因为需要兄弟关系，所以可以考虑在结点中保存层次和双亲信息，如果层次和双亲都相等，则为兄弟，仅层次相等但双亲不一样的为堂兄弟

user: user-2
content: 编不出来，有两个办法： 1、认真学习 2、去网上找别人做好的源码（仔细找肯定能找到的），或者出钱找人做，估计没有会免费给你做的

user: user-0
content: 我也知道是数，可是我编不出来，可不可以帮帮我。

user: user-2
content: 这就是一个树嘛
user-0 提问: 前辈们，帮我看看这个程序为什么输出不对吧

回复:
user: user-0
content: 引用 4 楼 cyfcsd 的回复:printf("num_1=%d\tnum_2=%d\tnum_2%%num_1=%d\n\n",num_1,num_2,num_2%num_1); 我似乎找到了问题所在,谢谢前辈们

user: user-1
content: 兄弟，细心一点儿啊，这明显就是书写错误啊，就下面这句，你自己查一下吧，这种问题要自己解决的，不能所有错误都找别人啊 printf("num_1=%d\tnum_2=%d\tnum_2%num_1=%d\n\n",num_1,num_2,num_2%num_1);

user: user-2
content: 两种改法：（1）将 Temperatures入参改为float型；                  或（2）输入改为scanf("%lf",&hua);

user: user-0
content: 谢谢回答，在做编程练习又遇到了一个问题，能再帮我看看吗？下面这个程序在我的系统上运行出错 #include<stdio.h> int main(void) { 	int num_1,num_2,a,b;  	printf("please enter the first number(输入非数字停止):"); 	a=scanf("%d",&num_1); 	printf("Please enter the 2th number(输入非数字停止):"); 	b=scanf("%d",&num_2);  	while(a==1&&b==1) 	{printf("num_1=%d\tnum_2=%d\tnum_2%num_1=%d\n\n",num_1,num_2,num_2%num_1); 	printf("please enter the first number(输入非数字停止):"); 	a=scanf("%d",&num_1); 	printf("Please enter the 2th number(输入非数字停止):"); 	b=scanf("%d",&num_2);  	}  	printf("done!\n");  	return 0; }

user: user-1
content: a=scanf("%f",&hua);改成a=scanf("%lf",&hua);用scanf接收double类型要用lf的
user-0 提问: 很短的程序，求指教，内存错误？

回复:
user: user-1
content: 楼上抢赵老师饭碗

user: user-2
content: if (q = NULL)应该是if (q == NULL) 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-3
content: 引用 2 楼 pkuzhx 的回复:楼上抢赵老师饭碗 但抢不走赵老师的烹调手艺！

user: user-4
content: int *row1=NULL; int *colu1=NULL; int *num1=NULL; struct B *first=NULL; printf("输入第一个稀疏矩阵A的行数 列数  非零元素的个数:\n");  	scanf("%d%d%d",row1,colu1,num1);  row1,colu1,num1都是指针根本没有存储空间。
user-0 提问: 求助帖“there were build errors”。

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

user: user-2
content: 关闭UAC、防火墙、杀毒软件、…… 以管理员身份运行Setup.exe安装

user: user-3
content: 你建的是什么类型的项目啊
user-0 提问: 我用VS2015编写的C程序在别人电脑上不能用，缺少很多***dll，别人说下载VS2015运行库就可以了，请问这个该到什么地方下载呢？

回复:
user: user-1
content: 发现安装光盘中如下位置有这个东东 F:\packages\vcRedistD14

user: user-0
content: 引用 5 楼 liups 的回复:[quote=引用 4 楼 yyxgs 的回复:] [quote=引用 3 楼 liups 的回复:] [quote=引用 2 楼 yyxgs 的回复:] [quote=引用 1 楼 liups 的回复:] VC2015运行库有一个安装包的 MS就可以下载 VS2015中应该也有  可以给我网址不?[/quote]  百度“VC2015运行库”[/quote]     都是广告[/quote]  https://www.microsoft.com/zh-CN/download/details.aspx?id=48145[/quote]   非常感谢！

user: user-2
content: 下个依赖库查看软件，比如procexp 然后将需要的DLL打包过去就好（每个系统都有的可以不打包）

user: user-1
content: 引用 4 楼 yyxgs 的回复:[quote=引用 3 楼 liups 的回复:] [quote=引用 2 楼 yyxgs 的回复:] [quote=引用 1 楼 liups 的回复:] VC2015运行库有一个安装包的 MS就可以下载 VS2015中应该也有  可以给我网址不?[/quote]  百度“VC2015运行库”[/quote]     都是广告[/quote]  https://www.microsoft.com/zh-CN/download/details.aspx?id=48145

user: user-0
content: 引用 3 楼 liups 的回复:[quote=引用 2 楼 yyxgs 的回复:] [quote=引用 1 楼 liups 的回复:] VC2015运行库有一个安装包的 MS就可以下载 VS2015中应该也有  可以给我网址不?[/quote]  百度“VC2015运行库”[/quote]  都是广告

user: user-1
content: 引用 2 楼 yyxgs 的回复:[quote=引用 1 楼 liups 的回复:] VC2015运行库有一个安装包的 MS就可以下载 VS2015中应该也有  可以给我网址不?[/quote]  百度“VC2015运行库”

user: user-0
content: 引用 1 楼 liups 的回复:VC2015运行库有一个安装包的 MS就可以下载 VS2015中应该也有  可以给我网址不?

user: user-1
content: VC2015运行库有一个安装包的 MS就可以下载 VS2015中应该也有
user-0 提问: 宏定义

回复:
user: user-1
content: 不明白就把宏展开了对着看  可以自己手动展开，也可以让IDE生成展开之后的代码  VS下可以这样；http://blog.csdn.net/qyee16/article/details/9322281

user: user-2
content: 信息没给全，像是类型转化检测。

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

user: user-3
content: VC编译选项加/EP /P（项目、属性、配置属性、C/C++、预处理器、预处理到文件：是，预处理取消显示行号：是），重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898
user-0 提问: C语言中的二维元素 

回复:
user: user-1
content: int  array [][3] = {{0,1},{0,8,9,7},{4}};   等价于  int  array [3][3] = {{0,1},{0,8,9,7},{4}};   红色这个3表示的是{0,1}, {0,8,9,7}, {4} 这三个  而后蓝色3表示的是上面的每一组里面有三个元素，不足3个的后面用0补，但不能超过3个，所以 {0,8,9,7},是错的  要得到最外这层的个数，可以用sizeof

user: user-2
content: sizeof(array)/sizeof(int)/3

user: user-3
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！

user: user-4
content: 1）能编译通过的，这种缺少一个维度容量的数组， 编译后，容量都是确定的。 2）C99 用变量作为容量，定义数组。 在程序运行到数组定义处以后，如果变量已经初始化， 数组的容量也是确定不变的。 只是，这种是运行时定义数组大小的。 如果，没有初始化，这是程序编写错误，是运行时错误，和逻辑错误。

user: user-4
content: 这是没有声明第二维容量 一维容量为3 ，即每行3列 没有明确确整个数组多少行 这种数组行数，编译后，也是确定的。  如果，初始化表是分行的，------这里每行列数是3----- 但是，初始化的数据，不能多于，每行的列数 所以 {0,8,9,7} 这一行不合法  如果初始化表不分行，编译后 自动按照每行列数，分割初始化表  不论是定义的时候，分行，还是自动分行，不足的补0，多余的，编译会出错  通过初始化表，自动获取数组容量，只能是最高那一维度是自动的。 其他维度必须在定义的时候确定。

user: user-5
content: 这个编译不能通过吧，array[][3]，的意思是定义了一个n行3列的数组，行数n是根据后面的大括号的个数决定的，但每一行必须有三个元素，如果给出的不够三个，那剩下的默认初始化为0，但是不能多于三个，你那个{0,8,9,7}多了‘ 遍历的时候，那个3肯定是一定的，至于行数n，是要自己确定的，也就是你写了多少大括号就是多少行，这跟一维数组一样，你定义 一个a[] = {1 ,3, 5, 7, 9}那遍历a的时候也要给定5的，否则C编译器是无法确定长度的

user: user-0
content: 这个是我写错了
user-0 提问: C语言文件路径问题

回复:
user: user-1
content: 你的缓冲区（fn）大小是多少，可以设大一点

user: user-2
content: 我的意思是提醒你要创建子目录。

user: user-3
content: 说得太笼统，给出关键代码．

user: user-0
content: 没看太懂老师这是什么意思？造成计算错误的原因是我的路径太长了吗？

user: user-2
content: _mkdir, _wmkdir Create a new directory.  int _mkdir( const char *dirname );  int _wmkdir( const wchar_t *dirname );  Routine Required Header Compatibility  _mkdir <direct.h> Win 95, Win NT  _wmkdir <direct.h> or <wchar.h> Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  Each of these functions returns the value 0 if the new directory was created. On an error the function returns –1 and sets errno as follows:  EEXIST  Directory was not created because dirname is the name of an existing file, directory, or device  ENOENT  Path was not found  Parameter  dirname  Path for new directory  Remarks  The _mkdir function creates a new directory with the specified dirname. _mkdir can create only one new directory per call, so only the last component of dirname can name a new directory. _mkdir does not translate path delimiters. In Windows NT, both the backslash ( \) and the forward slash (/ ) are valid path delimiters in character strings in run-time routines.  _wmkdir is a wide-character version of _mkdir; the dirname argument to _wmkdir is a wide-character string. _wmkdir and _mkdir behave identically otherwise.  Generic-Text Routine Mappings  TCHAR.H Routine  _UNICODE & _MBCS Not Defined _MBCS Defined _UNICODE Defined  _tmkdir _mkdir _mkdir _wmkdir    Example  /* MAKEDIR.C */  #include <direct.h> #include <stdlib.h> #include <stdio.h>  void main( void ) {    if( _mkdir( "\\testtmp" ) == 0 )    {       printf( "Directory '\\testtmp' was successfully created\n" );       system( "dir \\testtmp" );       if( _rmdir( "\\testtmp" ) == 0 )         printf( "Directory '\\testtmp' was successfully removed\n"  );       else          printf( "Problem removing directory '\\testtmp'\n" );    }    else       printf( "Problem creating directory '\\testtmp'\n" ); }   Output  Directory '\testtmp' was successfully created     Volume in drive C is CDRIVE  Volume Serial Number is 0E17-1702   Directory of C:\testtmp  05/03/94  12:30p        <DIR>           . 05/03/94  12:30p        <DIR>           ..                2 File(s)          0 bytes                              17,358,848 bytes free Directory '\testtmp' was successfully removed   Directory Control Routines  See Also   _chdir, _rmdir
user-0 提问: printf数据丢失。。。。。。。。。。。。。。。

回复:
user: user-0
content: 多谢各位！为了防止意外，我给指针申请空间后再用了，发现效果还是大大滴，不过就是有点麻烦，每次都要释放

user: user-1
content: printf("%s------%s\n",a,b);	参数a,b用错，要求使用字符串指针，程序中的a,b 已经不是字符串了

user: user-2
content: 摒弃strcpy；使用strncpy！

user: user-3
content: 可这样改：   int main() { 	char a[10] = {0}, b[10] = {0};  	strcpy(a,"00"); 	strcpy(b,"00"); 	printf("%s------%s\n",a,b);  	return 0; }

user: user-3
content: strcpy的时候越界了，而且字符数组需要以\0结尾才算是字符串

user: user-4
content: 字符串需要多一个'\0' 要特别注意需要的空间是字符串长度的大小+1 楼主这个a之所以没有输出，我猜是因为你的a和b分配的空间是连续的，而且b在a分配的前面 所以strcpy(b,"00");	会使得最后的'\0'越界写入到a数组的第一个字符上 所以printf的时候a数组才会输出空（楼主只要%p打印一下a,b的首地址就知道了）

user: user-1
content: 改成指针并不能解决问题，问题  strcpy(a,"00");	,"00"是占用3个字节，a只有两个字节空间，溢出。由此造成printf("%s------%s\n",a,b);	函数调用时发生问题。解决办法，申请足够空间，比如 char a[3],b[3];

user: user-5
content: ‘\0’没有，所以输出的不是字符串

user: user-0
content: 改成指针好了 ！但是数组名不就是指针嘛
user-0 提问: 算法问题

回复:
user: user-1
content: 这个算法肯定不对．．． 计算某一天星期几的几个公式 蔡勒公式：W = ([C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1) mod 7． 吉姆拉尔森公式：W =((Y-1)+[(Y-1)/4]-[(Y-1)/100]+[(Y-1)/400]+[13*(M+1)/5 ]+d) mod 7． 蔡农公式：W = (C%4*5+Y+Y/4+(13*M+8)/5+D)%7

user: user-2
content: 2000-01-01是周六。  这算法应该不准吧，只考虑四年一闰，没考虑到百年减一闰和400年再恢复一闰。

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

user: user-4
content: The COleDateTime class handles dates from 1 January 100 – 31 December 9999.

user: user-5
content: 记得以前见过 转盘式的 万年历，年份 是按顺序 排下去的 ，但是每隔 4 年 有一个空，放在闰年之前，闰年的一月和和二月是和其他年份不一样的    http://blog.sina.com.cn/s/blog_4af888810102w4zj.html

user: user-5
content: 例如  2015 年元旦星期四,2015年有365天 除以 7 余 1 2016  年元旦就是星期五,2016年有366  除以 7 余 2 2017 年元旦就是星期日   也就是每年的元旦都比上一年 的 星期数 多1个 ,遇到闰年多2个   也就是数一下 与 设定的标准年份差几年 ,中间隔了几个 2月 29 日      这个程序2000年以前的也不能算

user: user-4
content: zhao4zhong1公式： COleDateTime::GetDayOfWeek int GetDayOfWeek( ) const;  Return Value  The day of the week represented by the value of this COleDateTime object.  Remarks  Call this member function to get the day of the month represented by this date/time value.  Valid return values range between 1 and 7, where 1=Sunday, 2=Monday, and so on. If the status of this COleDateTime object is not valid, the return value is AFX_OLE_DATETIME_ERROR.  For information on other member functions that query the value of this COleDateTime object, see the following member functions:   GetDay   GetMonth   GetYear   GetHour   GetMinute   GetSecond   GetDayOfYear  COleDateTime Overview |  Class Members |  Hierarchy Chart  See Also   COleDateTime::COleDateTime, COleDateTime::SetDateTime, COleDateTime::operator =, COleDateTime::GetStatus
user-0 提问: 关于 %p和%X

回复:
user: user-1
content: 源码面前，了无秘密。 1楼得分太少！

user: user-2
content: %p专门用于输出一个地址（也就是指针的值），而%x用于将一个整型数按照十六进制输出，如果是小写的x则输出小写形式，如果是大写的X则输出大写形式。例如，十进制170如果用%x输出aa，用%X输出AA。%和x之间还可以输入一个整型数表示宽度，输入0表示宽度不足时补零，负号-表示右对齐。还以十进制170为例： %4X    输出：AA[][] %-4X   输出：[][]AA %04X  输出： 00AA %-03X 输出： []0AA 0X%X  输出： 0XAA 等等（[]表示空格）

user: user-3
content: %X和%x的不同是在a~f上的大小写的不一样；%x是小写a~f,比如(0x)3d; %X是大写A~F,比如(0x)3D;他们都标识以16进制格式； %p是输出指针地址；但是%P不知道是啥鬼,没用过；

user: user-4
content: 32 位程序，%p 等同于 %08x；64 位程序，%p 等同于 %016llx。 也就是说，指针有多少字节他就输出多少字节。

user: user-5
content: 一个是专用，遵纪守法的用法，%p用于输出指针，这是一直以来都这么做的，也是写在标准里面的。 一个是乱用，无视法纪。%x 输出指针，这是没有认真学习，printf 类输出函数，输出数据的方式 想当然的，以为指针和整形数大小相同，胡乱用的。凑巧没错，是不能保证的

user: user-6
content: %p输出地址，%x 16进制输出值。

user: user-0
content: 顶顶顶顶顶顶

user: user-7
content: 打错了，16进制，不是16位

user: user-7
content: http://www.cplusplus.com/reference/cstdio/printf/  简单地说就是p->指针, x->16位无符号整型，指针的大小不等于无符号整型的大小，运气好是一样的

user: user-0
content: 顶顶顶顶顶顶顶顶

user: user-1
content: 参考C:\Program Files\Microsoft Visual Studio 1x.0\VC\crt\src\output.c
user-0 提问: 找错误

回复:
user: user-0
content: 我知道了，错在这str[14]={30};只把str【0】赋值为30，其余的默认值为0

user: user-0
content: 1,3,5,7,8,10,12是31天，i<=7的时候奇数是31天，然后奇数加7也是31天；我试了，5月以后是不对了，可是为什么啊

user: user-1
content: 你下面这个写的什么东西？ for (i = 1; i <= 7; i += 2) 	{ 		str[i] = 31; 		str[i + 7] = 31; 	} 你只要随便拿5月以后的日期测，得到的日期都是不对的

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

回复:
user: user-1
content: 1.你的init函数都没有return q; 2.你的init函数里malloc出来的p感觉也没啥意义 3.在你的push函数里加了一步if (S->Bottom == NULL) S->Bottom = p; 4.traverse里修改了下while的条件  # include <stdio.h> # include <stdlib.h> # include <malloc.h>  struct NODE { 	int data; 	struct NODE *pNext; };  struct POINT { 	struct NODE *Top; 	struct NODE *Bottom; };  struct POINT *init(void); void push(struct POINT *S); void traverse(struct POINT *S);  int main() { 	struct POINT *S = NULL; 	int n;  	S = init(); 	if (S != NULL) 		printf("栈 初始化成功\n");  	printf("请输入你需要的结点数： "); 	scanf("%d", &n); 	while (n--) 	{ 		push(S); 	}  	traverse(S);  	return 0; }  struct POINT *init(void) { 	struct POINT *q = (struct POINT *)malloc(sizeof(struct POINT)); 	if (q == NULL) 	{ 		printf("内存分配失败\n"); 		exit(-1); 	}  	q->Top = NULL; 	q->Bottom = NULL; 	return q; }  void push(struct POINT *S) { 	int val; 	printf("请输入你需要压栈的值   "); 	scanf("%d", &val);  	struct NODE *p = (struct NODE *)malloc(sizeof(struct NODE)); 	if (p == NULL) 	{ 		printf("内存分配失败\n"); 		exit(-1); 	} 	if (S->Bottom == NULL) 		S->Bottom = p; 	p->data = val; 	p->pNext = S->Top; 	S->Top = p; }  void traverse(struct POINT *S) { 	struct NODE *p = S->Top;  	while (p) 	{ 		printf("%d   ", p->data); 		p = p->pNext; 	} 	printf("\n"); }

user: user-2
content: main.c(61): warning C4715: “init”: 不是所有的控件路径都返回值
user-0 提问: 条件表达式  ? : 

回复:
user: user-1
content: 运算符连接的是表达式，而不能是语句  你的前一个分号已经使得这个句子结束了  如果需要根据条件执行不同的语句，可以改写成if else形式  或者写成：printf("%s",a>0?"hello":"world");

user: user-2
content: 引用 3 楼 qq423399099 的回复:多了个分号，去掉试试，我这里VS上是可以运行出正确结果的 a>0 ? printf("hello") : printf("world"); 学习了

user: user-3
content: int a  = 8;   a>0 ? printf("hello")  : printf("world");

user: user-4
content: 多了个分号，去掉试试，我这里VS上是可以运行出正确结果的 a>0 ? printf("hello") : printf("world");

user: user-2
content: int a  = 8; //我想对这个变量a进行判断，如果a大于0的话，输出一句hello,不大于的话输出  world 但是一下语句提示没有左值,条件表达式语句必须得赋值给一个左值吗  printf("%s",a>0?"hello":"world");  //执行不了

user: user-0
content: 顶顶顶顶顶顶顶顶顶
user-0 提问: 求大神帮忙写下这道题的程序~

回复:
user: user-0
content: 关键是最终排序要求输出对应平均分排名的运动员哇

user: user-1
content: 这没有什么难度吧．．．

user: user-2
content: 第二个要求看不懂，什么意思啊
user-0 提问: 快考试了！求帮忙！大神大牛快快显身来

回复:
user: user-1
content: 完全不会还好意思来求助……

user: user-2
content: 自己上网查一查，都会找到一些东西。看懂别人的代码，再根据自己的要求进行添加优化修改。

user: user-3
content: 同意1楼意见

user: user-4
content: 找同学啊

user: user-5
content: 这不是快考试了吧。这是快交大作业了吧

user: user-6
content: 百度“C源代码 学生成绩管理系统”
user-0 提问: C中short整型 补码运算  

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

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

user: user-2
content: -32768 二进制为 1000 0000 0000 0000  最高位的1是表示是负数  再减1后变成0111 1111 1111 1111  最高位是0，表示正数，这个数值就为32767

user: user-3
content: short的取值为范围为-32768到32767  你觉得用%hd能输出-32769?

user: user-4
content: 还少了后面 0000

user: user-4
content: -32768的补码为 1000 0000 0000
user-0 提问: 一直在报错 不知道为什么 

回复:
user: user-1
content: 你scanf("%d", &n);以后，输入缓冲区会有遗留的回车符，会被gets读走 所以scanf后面加一句fflush(stdin);才行  # include <stdio.h> # include <string.h>  void fun1(char *s1);  int main() { 	int n;                              	scanf("%d", &n); 	fflush(stdin); 	char s1[100000]; 	while (n--)                     //如果去掉这个while就没事  一加上程序就停止工作 不知道为什么 	{ 		gets(s1); 		fun1(s1); 	}   	return 0; }  void fun1(char *s1) { 	char s2[50000]; 	int i, j, len, temp; 	len = strlen(s1);  	if (1 == len) 	{ 		temp = s1[0] - '0'; 		temp %= 9; 		s2[0] = temp + '0'; 		s2[1] = '\0'; 	} 	else 	{ 		for (i=0, j=0; i<len-1; i+=2) 		{ 			temp = (s1[i]-'0')*10 + s1[i+1]-'0'; 			temp %= 9; 			s2[j++] = temp + '0'; 		}  		if (len % 2 != 0) 		{ 			s2[j++] = s1[len-1]; 		}  		s2[j] = '\0'; 	}  	len = strlen(s2);  	if (1 == len) 		printf("%s\n", s2); 	else 		fun1(s2); }
user-0 提问: 请教关于没有释放动态分配的内存。

回复:
user: user-1
content: 搜“内存延迟分配”

user: user-2
content: 从用户使用程序的角度来看，内存泄漏本身不会产生什么危害，作为一般的用户，根本感觉不到内存泄漏的存在。真正有危害的是内存泄漏的堆积，这会最终消耗尽系统所有的内存。从这个角度来说，一次性内存泄漏并没有什么危害，因为它不会堆积，而隐式内存泄漏危害性则非常大，因为较之于常发性和偶发性内存泄漏它更难被检测到。

user: user-2
content: 引用 5 楼 qq_16774199 的回复:[quote=引用 3 楼 paschen 的回复:] [quote=引用 1 楼 qq_16774199 的回复:] 直接malloc(a)而没赋值给指针变量，电脑还是会分配内存空间对吧？  是，只不过你没有记录下这片内存的地址而已 之后就算想free也没办法 当然也算是内存泄露[/quote]  你好，请问内存泄露大意是什么？ 就像我这样无法通过指针找到malloc分配出的空间，然后失去对它的控制？除了占用内存外还有什么危害？[/quote]  什么是内存泄漏（memory leak）？   指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失，而是应用程序分配某段内存后，由于设计错误，失去了对该段内存的控制，因而造成了内存的浪费。   A memory leak is a particular type of unintentional memory consumption by a computer program where the program fails to release memory when no longer needed. This condition is normally the result of a bug in a program that prevents it from freeing up memory that it no longer needs.This term has the potential to be confusing, since memory is not physically lost from the computer. Rather, memory is allocated to a program, and that program subsequently loses the ability to access it due to program logic flaws.

user: user-0
content: 引用 3 楼 paschen 的回复:[quote=引用 1 楼 qq_16774199 的回复:] 直接malloc(a)而没赋值给指针变量，电脑还是会分配内存空间对吧？  是，只不过你没有记录下这片内存的地址而已 之后就算想free也没办法 当然也算是内存泄露[/quote]  你好，请问内存泄露大意是什么？ 就像我这样无法通过指针找到malloc分配出的空间，然后失去对它的控制？除了占用内存外还有什么危害？

user: user-0
content: 引用 2 楼 qq423399099 的回复:对的，还是会分配空间，由于没有记录malloc出来的地址，所以会造成内存泄漏 你可以用直接判断malloc的返回值，由于没有释放，所以经过一定的循环以后，堆空间耗尽，就会malloc失败  你好，经过一定循环后堆空间耗尽，malloc失败。 我还以为malloc会一直申请下去直到电脑没有内存，难怪我盯着任务管理器看很久也没什么变化。是不是malloc只能消耗堆内存地址？ 而且那是个死循环，为什么不会一直循环下去呢？

user: user-2
content: 引用 1 楼 qq_16774199 的回复:直接malloc(a)而没赋值给指针变量，电脑还是会分配内存空间对吧？  是，只不过你没有记录下这片内存的地址而已  之后就算想free也没办法  当然也算是内存泄露

user: user-3
content: 对的，还是会分配空间，由于没有记录malloc出来的地址，所以会造成内存泄漏 你可以用直接判断malloc的返回值，由于没有释放，所以经过一定的循环以后，堆空间耗尽，就会malloc失败  #include<stdio.h> #include<stdlib.h> int main(void) {     int a=20;     while(a>1)     {         ++a;         if(malloc(1024 * 1024 * a) == NULL) 		{ 			printf("%d\n", a); 			break; 		}     }      return 0; }

user: user-0
content: 直接malloc(a)而没赋值给指针变量，电脑还是会分配内存空间对吧？但没有了指针可以引用所以无法被释放吗？
user-0 提问: 求大神查一个错误.

回复:
user: user-1
content: 代码没问题，至少不是fopen的问题，即使文件打开失败也可以输出hello

user: user-2
content: 这样试试？  printf("hello\n");

user: user-0
content: 我这编译器 今天又能输出了  不知道是怎么回事。

user: user-3
content: 我觉得是这样的，你用fopen打开了一个文件，同时就有文件输出流，如果你 先 fclose(f) ，再 printf("hello") 试一下

user: user-0
content: 用编译器自带的运行器 执行后不显示hello 返回值为0xc0000005，直接运行程序会报错。
user-0 提问: 【请教】为什么我用多线程反而速度变慢了

回复:
user: user-1
content: 这里，如果是界面程序的话，多线程也许不能提高读写效率 但是可以解决界面刷新等待的问题 如果是单线程，界面就会一直在等待读写数据，和哈希表 界面刷新就停掉了，这样用户体验不好。 你这个场景确实不适合多线程。

user: user-0
content: 楼上几位，谢谢了， 我自己测试了一下，时间主要还是消耗在互斥锁上面了，在我的这个场景下，线程越多，速度越慢，即便是只有2个线程，也比单线程慢。至于磁盘读写，倒是没测试。

user: user-2
content: 你这个场景使用多线程是否真的会有提高呢？第一 先说读文件，开24个线程读文件并不能提高 很可能取得反效果，先不说线程切换消耗的时间，单线程切换读不同的文件的时候导致磁盘的磁头需要重新定位消耗的时间就不小，再说你那个写hash表，因为你用的互斥锁，这意味着线程越多，竞争就越大（假设你每个线程参与了写hash表）锁竞争消耗的时间又是一笔不小的开销。所以很多时候效率和线程数并不是有一个正比的关系。

user: user-0
content: 引用 2 楼 lm_whales 的回复:问题是，写文件的速度，跟多线程没关系。因为即便是多硬盘，还是不能多线程写 哈希表更跟多线程，没关系。 有两个线程，基本上就可以了 最多开四个 除非你的程序在服务器上跑  跟多线程无关的话，至少应该是差不多快，而不会慢3倍吧， 不过我也觉得是线程太多的原因，线程抢有限的CPU也会消耗时间。

user: user-3
content: 开多线程，同步处理没做好，效率会明显降低

user: user-4
content: io是瓶颈，读写硬盘多线程反而会损失效率

user: user-1
content: 问题是，写文件的速度，跟多线程没关系。因为即便是多硬盘，还是不能多线程写 哈希表更跟多线程，没关系。 有两个线程，基本上就可以了 最多开四个 除非你的程序在服务器上跑

user: user-0
content: 用多线程处理肯定比单线程要快，那我该如何优化我的多线程？
user-0 提问: 给定一个长度为N的数组，求数组的最大值。

回复:
user: user-1
content: 引用 2 楼 baidu_35528643 的回复:新人，不会定义用户规定任意长度的数组，而且需要多组测试数据 求指教 问题描述错误

user: user-0
content: 引用 3 楼 qq423399099 的回复:多组测试直接while(1){}的循环就好 输入多个数，直接用malloc动态申请，如果是GCC编译器什么的直接int arr[N]也可以  int N; int *arr; scanf("%d", &N); arr = (int *)malloc(sizeof(int) * N);    多谢

user: user-2
content: 多组测试直接while(1){}的循环就好 输入多个数，直接用malloc动态申请，如果是GCC编译器什么的直接int arr[N]也可以  int N; int *arr; scanf("%d", &N); arr = (int *)malloc(sizeof(int) * N);

user: user-0
content: 新人，不会定义用户规定任意长度的数组，而且需要多组测试数据 求指教

user: user-1
content: 这个没有难度吧？！@
user-0 提问: 关于unsigned int 和 int

回复:
user: user-1
content: 最高位是被看作符号位还是不被看作符号位的区别。

user: user-2
content: 一样大，一个有负数，一个没负数

user: user-3
content: 举个小例子说明就知道了。如 4bit 的数字，则最多只能表示 16 个数字。 你可以用来存储无符号数字： 0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15 也可以用来存储有符号数字： -7、-6、-5、-4、-3、-2、-1、0、1、2、3、4、5、6、7 反正总数始终是 16 个数字，如何存储，选择在你。

user: user-4
content: 两种类型的范围是一样大  如果只对于正数来说，unsigned int 会比int 大  因为int 最高位是作为符号含义，而unsigned 中代表数值

user: user-5
content: 符号占用了一位，所以范围不一样

user: user-6
content: 能表达的数字数量一致，但是unsigned不用表示负数，所以能表达更大的数。

user: user-7
content: 个数一样，区间不同， int 还表示了负数，unsigned int只表示0 和正数 unsigned 可以表示更多（同时也是更大）的正数（自然数） 个数都是 2^k 个（32Bits k=32）

user: user-8
content: 引用 9 楼 Hamber_Bao 的回复:[quote=引用 8 楼 liups 的回复:] [quote=引用 7 楼 Hamber_Bao 的回复:] [quote=引用 4 楼 qq423399099 的回复:] 在32位机上，int是32位，范围–2,147,483,648 to 2,147,483,647 在32位机上，unsigned int是32位，范围0 to 4,294,967,295那这两个类型的数值范围怎么比较呢？ 哪个大呢   [/quote] 一样大[/quote] 数值范围 和 取值范围 这两个词表示的意思是不一样的吗？[/quote]  一样大是说若干个二进制位排列组合（准确说是排列）后就那么多可能性。至于你的两个词不知道什么意思

user: user-0
content: 引用 8 楼 liups 的回复:[quote=引用 7 楼 Hamber_Bao 的回复:] [quote=引用 4 楼 qq423399099 的回复:] 在32位机上，int是32位，范围–2,147,483,648 to 2,147,483,647 在32位机上，unsigned int是32位，范围0 to 4,294,967,295那这两个类型的数值范围怎么比较呢？ 哪个大呢   [/quote] 一样大[/quote] 数值范围 和 取值范围 这两个词表示的意思是不一样的吗？

user: user-8
content: 引用 7 楼 Hamber_Bao 的回复:[quote=引用 4 楼 qq423399099 的回复:] 在32位机上，int是32位，范围–2,147,483,648 to 2,147,483,647 在32位机上，unsigned int是32位，范围0 to 4,294,967,295那这两个类型的数值范围怎么比较呢？ 哪个大呢   [/quote] 一样大

user: user-0
content: 引用 4 楼 qq423399099 的回复:在32位机上，int是32位，范围–2,147,483,648 to 2,147,483,647 在32位机上，unsigned int是32位，范围0 to 4,294,967,295那这两个类型的数值范围怎么比较呢？ 哪个大呢

user: user-9
content: 要是按 数值的表示范围来说都一样。因为都是占32位。 因为要按取值范围来说。unsign int 取值更大。不解释（4楼已经说清楚了）。 其实，换一个角度来说。如果把unsign int 表示成哺乳动物，int表示成鱼类。比较哺乳动物和鱼类就没有可比性了

user: user-10
content: 两位二机制 对应无符号数 对应有符号数 00 0  0 01 1  1 10 2 -2 11 3 -1

user: user-11
content: 在32位机上，int是32位，范围–2,147,483,648 to 2,147,483,647 在32位机上，unsigned int是32位，范围0 to 4,294,967,295

user: user-12
content: 有符号与无符号的区别而已，绝对范围是一样的

user: user-13
content: 明明一样大啊

user: user-8
content: 找资料看一下就明白了
user-0 提问: 求大神把这个C++程序改成C的

回复:
user: user-1
content: VS下可以编译通过

user: user-2
content: 估计你用的文件后缀是cpp，修改成c就行了

user: user-3
content: 看不出哪是c++的呀

user: user-4
content: 这个就是C程序  建议楼主认真研究一下C和C++的区别

user: user-5
content: 这个应该可以C编译通过吧。
user-0 提问: code blocks  Error creating process  大神来

回复:
user: user-1
content: 又的时候就能调试 有的时候就能调试 就是用图表调试哪种  直接编译 就能运行

user: user-2
content: codeblocks已安装还要加个库的没加的去

user: user-0
content: 关闭了UAC了 杀毒也关闭了 还是不行啊？ 大哥 咋办啊

user: user-3
content: 关闭UAC、防火墙、杀毒软件、…… 以管理员身份运行 以XP兼容模式运行
user-0 提问: 菜鸟求助一个很简单的关于C语言的问题

回复:
user: user-1
content: 建议多看看书，这个是基本功。

user: user-2
content: 看看这个: http://stackoverflow.com/questions/3173462/int-var-1-void-main-int-i-i

user: user-3
content: main里的i是局部变量，和全局变量的i不是一个变量，在main里面有效的是局部的那个i。
user-0 提问: 两个问题（1）vs2010 error 找不到标识符  （2）vs 2010   error LNK1120: 1 个无法解析的外部命令

回复:
user: user-0
content: 小白·~~刚接触~~~vs2010写c怎么用啊~~·捣鼓了一天还是不清楚~~~

user: user-1
content: 项目、属性、链接器、常规、附加库目录：填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器、输入、附加依赖项：填写附加依赖库的名字.lib 空格或分号间隔多项

user: user-0
content: 为什么打开其他人的代码总会出现不一样的数字提示错误error LNK1120: 1 个无法解析的外部命令有时候又是数字2001

user: user-2
content: clrscr是TC特有的，其它的C语言环境没有这个函数，也就没有头文件包含这个函数。 TC中使用clrscr()必须#include<conio.h>.其他编译环境建议使用system("cls");来替代clrscr();system()函数在#include <stdlib.h>里面.

user: user-3
content: 先包含头文件#include <stdlib.h> 然后把那句红色的变成system("cls");

user: user-0
content: 1>d:\c语言\练习\hah\hah\一.cpp(7): error C3861: “clrscr”: 找不到标识符 错误的提示

user: user-0
content: 红色是错误提示~~~~~小白~~~第一次用vs2010
user-0 提问: 关于typedef的问题

回复:
user: user-0
content: 引用 2 楼 zhao4zhong1 的回复: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-0
content: 引用 3 楼 qq423399099 的回复:typedef struct Node *PtrToNode; 意思是： 给struct Node *取个别名叫PtrToNode(注意*是跟着前面的) struct Node *a; 等同于PtrToNode a; 恩恩，谢谢讲解

user: user-1
content: typedef struct Node *PtrToNode; 意思是： 给struct Node *取个别名叫PtrToNode(注意*是跟着前面的) struct Node *a; 等同于PtrToNode a;

user: user-2
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-3
content: struct Node;  声明一个结构体 typedef struct Node *PtrToNode;  定义一个结构体指针
user-0 提问: strdup()作为其他函数的入参会导致内存泄漏么

回复:
user: user-1
content: 是  _strdup, _wcsdup, _mbsdup Duplicate strings.  char *_strdup( const char *strSource );  wchar_t *_wcsdup( const wchar_t *strSource );  unsigned char *_mbsdup( const unsigned char *strSource );  Routine Required Header Compatibility  _strdup <string.h> Win 95, Win NT  _wcsdup <string.h> or <wchar.h> Win 95, Win NT  _mbsdup <mbstring.h> Win 95, Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  Each of these functions returns a pointer to the storage location for the copied string or NULL if storage cannot be allocated.  Parameter  strSource  Null-terminated source string  Remarks  The _strdup function calls malloc to allocate storage space for a copy of strSource and then copies strSource to the allocated space.  _wcsdup and _mbsdup are wide-character and multibyte-character versions of _strdup. The arguments and return value of _wcsdup are wide-character strings; those of _mbsdup are multibyte-character strings. These three functions behave identically otherwise.  Generic-Text Routine Mappings  TCHAR.H Routine  _UNICODE & _MBCS Not Defined _MBCS Defined _UNICODE Defined  _tcsdup _strdup _mbsdup  _wcsdup    Because _strdup calls malloc to allocate storage space for the copy of strSource, it is good practice always to release this memory by calling the free routine on the pointer returned by the call to _strdup.  Example  /* STRDUP.C */  #include <string.h> #include <stdio.h>  void main( void ) {    char buffer[] = "This is the buffer text";    char *newstring;    printf( "Original: %s\n", buffer );    newstring = _strdup( buffer );    printf( "Copy:     %s\n", newstring );    free( newstring ); }   Output  Original: This is the buffer text Copy:     This is the buffer text   String Manipulation Routines  See Also   memset, strcat, strcmp, strncat, strncmp, strncpy, _strnicmp, strrchr, strspn
user-0 提问: 软件错误代码和错误消息如何设计

回复:
user: user-1
content: 我一般会记录日志，当然不会打在循环内的，即使在循环内，只要不是太频繁也可以的，如几分钟的一个也可的，或者是针对事件的，就是完成一整件事情有8个步骤，我会记录事件的开始时间日志，和每一步完成的日志，即使程序奔了，也可以查看上一步的日志走到哪里 了，如果，不奔溃，那最好了，把出错的日志也记下来，每天一个txt文件，每次日志都要有开始日期和时间的，

user: user-2
content: 错误码 错误信息字符串（英文） 错误信息字符串（中文） 出现该错误可能的原因 出现该错误后可能的解决办法 出现该错误后可参考的网络连接 出现该错误后可参考的网络连接对应的二维码 出现该错误后可拨打的客服热线电话 ……
user-0 提问: C语言重定向的问题

回复:
user: user-1
content: 引用 13 楼 loveqise 的回复:[quote=引用 11楼talkdream 的回复:]printf("%d\n",a); 去掉\n改成printf("%d",a); 试试可不可以。大神，我把%d变为%c，char a就行了 用%d，int a的时候，即使是纯数字文本，两个文本的内容也不一样[/quote]  谢谢告知结果，看来带数据类型的方法还是更改了原本的数据只不过我们不太了解罢了，从这个角度上看char 也是有风险的，只是我们现在不知道或者没碰到罢了，要是类型无关方法应该更安全。这些做法只当是对语言的理解就好了，如果真的应用时还是寻找些常用的方法更安全。

user: user-2
content: 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-3
content: while后需要分号吧

user: user-4
content: 代码没问题。 自己检查下freopen的返回值以及hello.txt的路径（写上完整路径）

user: user-5
content: 复制文件一般不这么写，也不用freopen，用fopen，最好二进制读写。

user: user-0
content: 引用 10楼小灸舞 的回复:http://bbs.bccn.net/thread-359111-1-1.html 大神，我把%d变为%c，char a就行了 用%d，int a的时候，即使是纯数字文本，两个文本的内容也不一样

user: user-0
content: 引用 11楼talkdream 的回复:printf("%d\n",a); 去掉\n改成printf("%d",a); 试试可不可以。大神，我把%d变为%c，char a就行了 用%d，int a的时候，即使是纯数字文本，两个文本的内容也不一样

user: user-0
content: 大神们，我把%d变为%c，char a就行了 用%d，int a的时候，即使是纯数字文本，两个文本的内容也不一样

user: user-1
content: printf("%d\n",a); 去掉\n改成printf("%d",a); 试试可不可以。

user: user-4
content: http://bbs.bccn.net/thread-359111-1-1.html

user: user-1
content: 引用 6 楼 loveqise 的回复:[quote=引用 5楼user-6 的回复:]我这里代码运行正常，没问题 Ubuntu 14.04.1 LTS  你的运行环境是什么，在当前目录下是否有对应权限 看看freopen返回值：如果成功，则返回该指向该输出流的文件指针，否则返回为NULL调试成功了，不过为什么不能复制word文档内容到另一个word[/quote]  关注。为啥不能呢？（不可以理解成把文件A无任何转换的情况下写到文件B么？）

user: user-0
content: 引用 7楼小灸舞 的回复:谁告诉你freopen能读写word的请问转移word，excel这些用什么？

user: user-4
content: 谁告诉你freopen能读写word的

user: user-0
content: 引用 5楼user-6 的回复:我这里代码运行正常，没问题 Ubuntu 14.04.1 LTS  你的运行环境是什么，在当前目录下是否有对应权限 看看freopen返回值：如果成功，则返回该指向该输出流的文件指针，否则返回为NULL调试成功了，不过为什么不能复制word文档内容到另一个word

user: user-6
content: 我这里代码运行正常，没问题 Ubuntu 14.04.1 LTS  你的运行环境是什么，在当前目录下是否有对应权限 看看freopen返回值：如果成功，则返回该指向该输出流的文件指针，否则返回为NULL

user: user-0
content: 引用 2楼yunzhiyoumu 的回复:while后需要分号吧加了也一样

user: user-0
content: 引用 1楼小灸舞 的回复:代码没问题。 自己检查下freopen的返回值以及hello.txt的路径（写上完整路径）请问这个路径应该怎么写？返回值用strlen测吗？
user-0 提问: C语言中，const算常量吗？

回复:
user: user-1
content: 引用 3 楼 srhouyu 的回复:[quote=引用 2 楼 fefe82 的回复:] 在 C 语言里，不是。  C 语言的 const expression 是如下定义的： 6.6 Constant Expressions 6 An integer constant expression shall have integer type and shall only have operands that are integer constants, enumeration constants, character constants, sizeof expressions whose results are integer constants, _Alignof expressions, and floating constants that are the immediate operands of casts. Cast operators in an integer constant expression shall only convert arithmetic types to integer types, except as part of an operand to the sizeof or _Alignof operator.  也就是说可以包括： integer constants 在 C 语言里仅包括  1, 23, 123 之类的字面量。 enumeration constants ，枚举值 chracater constants, 字符常量，'a', '1'，同样仅限字面量 sizeof(...) 等  在你的程序里，N 不属于以上任何一类。  那么，我只能define吗？[/quote]  C 语言里，define 应该是一个通常的做法吧 ...

user: user-0
content: 引用 2 楼 fefe82 的回复:在 C 语言里，不是。  C 语言的 const expression 是如下定义的： 6.6 Constant Expressions 6 An integer constant expression shall have integer type and shall only have operands that are integer constants, enumeration constants, character constants, sizeof expressions whose results are integer constants, _Alignof expressions, and floating constants that are the immediate operands of casts. Cast operators in an integer constant expression shall only convert arithmetic types to integer types, except as part of an operand to the sizeof or _Alignof operator.  也就是说可以包括： integer constants 在 C 语言里仅包括  1, 23, 123 之类的字面量。 enumeration constants ，枚举值 chracater constants, 字符常量，'a', '1'，同样仅限字面量 sizeof(...) 等  在你的程序里，N 不属于以上任何一类。  那么，我只能define吗？

user: user-1
content: 在 C 语言里，不是。  C 语言的 const expression 是如下定义的： 6.6 Constant Expressions 6 An integer constant expression shall have integer type and shall only have operands that are integer constants, enumeration constants, character constants, sizeof expressions whose results are integer constants, _Alignof expressions, and floating constants that are the immediate operands of casts. Cast operators in an integer constant expression shall only convert arithmetic types to integer types, except as part of an operand to the sizeof or _Alignof operator.  也就是说可以包括： integer constants 在 C 语言里仅包括  1, 23, 123 之类的字面量。 enumeration constants ，枚举值 chracater constants, 字符常量，'a', '1'，同样仅限字面量 sizeof(...) 等  在你的程序里，N 不属于以上任何一类。

user: user-2
content: C(C89) 中 const 仅仅表示一个变量是不可修改的，而不具备声明一个常量的功能。
user-0 提问: 网页上crtl+h后出来的历史网址在计算机中有保存吗？保存在哪里？

回复:
user: user-1
content: 推荐使用软件 http://www.nirsoft.net/utils/opened_files_view.html 和FileMon

user: user-2
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: 可以先转换为7进制

user: user-3
content: 有几个错误： 1.weeks=days/reday；最后的你是中文的分号 2.scanf("%d,&days");应该是scanf("%d",&days); 3.while应该是if 4.a=days%weeks;;应该是a=days%reday;  #include <stdio.h> int main(void) { 	const int reday=7; 	int days, weeks, a; 	scanf("%d",&days); 	if(days>0) 	{ 		weeks=days/reday; 		a=days%reday; 		printf("%d days are %d weeks,%d days.\n",days,weeks,a); 	} 	return 0; }
user-0 提问: 题目:n 维矩阵乘法   A 乘以B 的逆矩阵

回复:
user: user-1
content: 以前实现的矩阵类中的代码，仅供参考  //start 求逆阵 Matrix inv(Matrix M) { 	//start 判断矩阵是否可逆 	if(M.row!=M.col) 	{ 		cout<<"只有方阵才能求逆！"<<endl; 		return Matrix(); 	} 	//end 判断矩阵是否可逆 	//start 构造单位阵 	Matrix E(M.row,M.col); 	for(int i=0;i<M.row;++i) 		E[i][i]=1.0; 	//end 构造单位阵 	//start 将矩阵化为阶梯型 	for(int c=0,r=0;c<M.col&&r<M.row;++c,++r) 	{ 		int ind;//记录主元行号 		//start 寻找主元 		for(int i=r;i<M.row;++i) 		{ 			if(M[i][c]!=0) 			{ 				ind=i; 				break; 			} 			if(i==M.row-1) 			{ 				cout<<"矩阵不可逆！"<<endl; 				return Matrix(); 			} 		} 		//end 寻找主元 		//start 交换两行 		for(int j=0;j<M.col;++j) 		{ 			double temp;		 			temp=M[ind][j];		 			M[ind][j]=M[r][j];		 			M[r][j]=temp;  			temp=E[ind][j]; 			E[ind][j]=E[r][j]; 			E[r][j]=temp;			 		} 		//end 交换两行 		//start 主元下元素化0 		for(int i=r+1;i<M.row;++i) 		{ 			double temp; 			temp=M[i][c]/M[r][c]; 			for(int j=0;j<M.col;++j) 			{ 				M[i][j]-=M[r][j]*temp; 				E[i][j]-=E[r][j]*temp; 			} 		} 		//end 主元下元素化0	 	}//end 将矩阵化为阶梯型 	//start 主元化1 	for(int r=0;r<M.row;++r) 	{ 		double temp=M[r][r]; 		for(int c=r;c<M.col;++c) 		{ 			M[r][c]/=temp; 		} 		for(int c=0;c<M.col;++c) 		{ 			E[r][c]/=temp; 		} 	} 	//end 主元化1 	//start 化对角型 	for(int r=M.row-2;r>=0;--r) 	{ 		for(int i=M.row-1;i>r;--i) 		{ 			for(int j=0;j<M.col;++j) 			{ 				E[r][j]-=E[i][j]*M[r][i];							 			} 			for(int j=0;j<M.col;++j) 			{ 				M[r][j]-=M[i][j]*M[r][i];				 			} 		} 	}//end 化对角型 	return E; 	 }//end 求逆阵 //start *重载(矩阵相乘) Matrix operator*(const Matrix& lhs,const Matrix& rhs) { 	if(lhs.row!=lhs.col) 	{ 		cout<<"相乘矩阵不符合条件！"<<endl; 		return Matrix(); 	} 	Matrix temp(lhs.row,rhs.col); 	for(int r=0;r<temp.row;++r) 		for(int c=0;c<temp.col;++c) 		{ 			for(int k=0;k<lhs.col;++k) 				temp[r][c]+=lhs[r][k]*rhs[k][c]; 		} 	return temp; }//end *重载(矩阵相乘)

user: user-2
content: 代数余子式和行列式法 A-1 =A*/det(A) 直接算法可以用 高斯—约当消去法解线性方程组 的方法求出 矩阵成积 A^-1  B  AX=B 则 X=A^-1B  这样只要求出 方程组AX=B的解X 就是 A^-1B了

user: user-2
content: 求逆阵有两种基本方法： 1）初等变换法 2）代数余子式和行列式法