Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 关于【作业】统计空格，制表符，换行符的个数的程序。

回复:
user: user-1
content: 编程语言和自然语言的本质区别是： 编程语言是给编译器用的，格式比较严格。 自然语言是人看的，能看懂就行。 所以不能用自然语言的方法改编程语言代码。

user: user-0
content: 引用 5 楼 buyong 的回复:编程语言和自然语言的本质区别是： 编程语言是给编译器用的，格式比较严格。 自然语言是人看的，能看懂就行。 所以不能用自然语言的方法改编程语言代码。  对于才初学者来说，这段话就是明灯！

user: user-0
content: [quote=引用 6 楼 jiandingzhe 的回复:] if(a == ' ',b == '%d',c == '\n') 你这是什么意思？[/quote  就是分别代表 空格，制表符，换行符啊

user: user-0
content: 引用 1 楼 user-7 的回复:if(a == ' ',b == '%d',c == '\n')    谁告诉你if里用逗号的？ ++kg,++zb,++hh;  每次符合条件后，3个变量都加1，那能不一样么？ 不好意思，IF确实不能用逗号，基本的都不知道，小白都不如啊T T  ++ 得 分开来 谢谢大哥 指教。

user: user-2
content: 你这小程序问题大大的多啊  按4楼改把

user: user-3
content: if(a == ' ',b == '%d',c == '\n') 你这是什么意思？

user: user-4
content: 可以读一个字符处理然后判断它是什么类型就可以  #include<stdio.h> int main(){  	int ch; 	int word; 	int space=0; 	int tab=0; 	int cr=0;  	while((ch=getchar())!=EOF) 	{ 		if(ch==' ') 			space++;//空格 		else if(ch=='\t') 			tab++;//制表 		else if(ch=='\n') 			cr++;//回车 		else 			word++; 	} 	 printf("%d\n%d\n%d\n",space,tab,cr);  	 return 0; }

user: user-5
content: 你这程序写的问题比较多啊

user: user-6
content: 逗号表达式

user: user-7
content: if(a == ' ',b == '%d',c == '\n')    谁告诉你if里用逗号的？ ++kg,++zb,++hh;  每次符合条件后，3个变量都加1，那能不一样么？
user-0 提问: 求解STM32驱动0V7670摄像头的手势识别

回复:
user: user-0
content: 或者说，不要平台，手势识别这个功能是不是就实现不了。。

user: user-0
content: 就是如何用纯c语言去吧图像识别的那些肤色检测啊，边缘提取啊，以及模式匹配那些算法实现，，而不是c++。

user: user-1
content: what is your problem
user-0 提问: 优化矩阵乘法程序求bug解决方法

回复:
user: user-1
content: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令

user: user-1
content: 请判断malloc的返回值。

user: user-0
content: 谢谢指正 但还是不行 program start  thread start  Segmentation fault (core dumped)

user: user-2
content: a = (double**)malloc(sizeof(double*)*N);
user-0 提问: 百元百鸡问题

回复:
user: user-0
content: 引用 3 楼 user-2 的回复:三层for循环，暴力破解不就搞定啦？ 恩 是的 谢谢了

user: user-1
content: 引用 2 楼 u011075056 的回复:三个未知数只有两个条件  鸡一百只 钱一百块  如果有三个条件 就是唯一解了

user: user-2
content: 三层for循环，暴力破解不就搞定啦？

user: user-0
content: 三个未知数只有两个条件  鸡一百只 钱一百块

user: user-1
content: 这不是解方程组嘛
user-0 提问: 讨论：C语言学习中位运算重要吗？

回复:
user: user-1
content: 位运算很重要啊，你看微软的编程之美里面就可以知道了，这玩意可以提高速度，非常有效。 书到用时方恨少，这是真的。

user: user-2
content: 用得多 不过需要学的没多少  一天了解 一星期专项训练  基本就能掌握了

user: user-3
content: 受教了，我以前学c语言的时候也对位运算不是很重视……

user: user-4
content: 如果做底层开发，位运算就是很重要里的了。而且平时好多加密算法都用的是位运算 。。

user: user-5
content: 位运算用得较多，可以用最少的空间表示状态，也就是状态位的意思。结合宏定义，使用位运算很简单的。位运算是基础得不能再基础的事情了，一定要学好。

user: user-6
content: 一次性搞定还是好些。不懂在翻番看。

user: user-7
content: 如果你做底層一點的東西就會經常用到，比如一些寄存器的設置，你隨便找一個關於ARM的代碼，裏面基本會有，不過就位運算本身來說，也不是很難

user: user-8
content: 书到用时方恨少， 位运算到用时再补课恐怕比老板炒你鱿鱼的速度慢。

user: user-9
content: 位运算用的地方还是很多的，linux内核以及一些库的实现都经常用到.

user: user-10
content: 位运算速度快 VC里面好多这个

user: user-11
content: 非常重要，位运算实际工程中也是经常用到的。

user: user-12
content: 这是C语言基础语法哈，掌握并且了解一些常见的用法是很有必要的，enum基于位做一些flag是很常见的。

user: user-13
content: 重要啊，经常用到的。

user: user-14
content: 除了运算中的奇葩优化，位运算可以用于表示状态。 比如Glib的如下代码：  typedef enum {   G_OPTION_FLAG_HIDDEN		= 1 << 0,   G_OPTION_FLAG_IN_MAIN		= 1 << 1,   G_OPTION_FLAG_REVERSE		= 1 << 2,   G_OPTION_FLAG_NO_ARG		= 1 << 3,   G_OPTION_FLAG_FILENAME = 1 << 4,   G_OPTION_FLAG_OPTIONAL_ARG    = 1 << 5,   G_OPTION_FLAG_NOALIAS	        = 1 << 6 } GOptionFlags;  你就可以用|算符把这些东西组合成属性集合。

user: user-15
content: 九九乘法表无比重要，谁会花一年去学它？ 讲的简洁是因为没啥好讲的，就那么几句话总不成重复一万遍占篇幅吧？

user: user-16
content: 位运算就是逻辑运算,在学数电的时候了解过了，在这里学也是很容易明白的吧

user: user-17
content: 这东西相对接近底层  所以包含的知识点不多
user-0 提问: 2014年计算机图书伪劣作者打假第一案！踢爆伪C大师garbageMan（薛非）的真实嘴脸。这一切的背后，到底是利益的驱动还是智商的无奈！

回复:
user: user-1
content: 说的不错  ！！！

user: user-0
content: 如果可以，请博友转载本文或发帖，以便让更多博友看到此人的真实面目。让这样没有廉耻的人待在博客园，是对每个人的侮辱。鲁迅有篇文章，叫“痛打落水狗”，对卑劣之人，一旦让其起性，只会更加疯狂，唯有痛打、打疼、打怕，或许才能让其明白一个简单的道理——一个人的生存，是由于他的正直，而卑劣之人暂时能够存在，只是因为其侥幸逃脱了灾祸。

user: user-2
content: 不错，可以起到振兴C语言的作用。

user: user-3
content: 推荐加精！谁有权限？

user: user-4
content: 这个。。。建议置顶。

user: user-5
content: 为人师表者，不误人子弟！希望垃圾书能尽快被历史淘汰掉！

user: user-6
content: 看了点目录，貌似还花一了一章介绍了vs的环境的安装吧

user: user-7
content: 看作者名字,就不会买的

user: user-8
content: 都是踢来踢去的

user: user-9
content: 到底是利益的驱使还是智商的无耐，呵呵。

user: user-10
content: 这么吊，我都不知道。

user: user-2
content: 爱的反面不是恨；而是漠然。

user: user-3
content: 引用楼主做不到从技术上反驳薛非，光骂人没用，相反薛非从技术上指出了对方的谬误，而楼主没法接招的话，骂得越多，越会让旁人觉得你虚伪，呵呵。 不能这么说，我觉得老谭也没反驳他，不等于说老谭默认他对，有时候反驳他着了他的道，不用反驳，直接NG。

user: user-2
content: 存在即合理。

user: user-11
content: 求细8。还有更多细节么？

user: user-12
content: 楼主做不到从技术上反驳薛非，光骂人没用，相反薛非从技术上指出了对方的谬误，而楼主没法接招的话，骂得越多，越会让旁人觉得你虚伪，呵呵。

user: user-13
content: 这得多大仇啊，删前留名。

user: user-2
content: 打倒×××！再踏上一只脚！！让他永世不得翻身！！！
user-0 提问: 求大神帮忙啊  

回复:
user: user-0
content: 都不会....

user: user-1
content: 你是不会生成迷宫, 还是不会找到路径? 话说这个题目是我当年高一时参加计算机竞赛培训时的练习题.

user: user-2
content: 自己看下求迷宫全部路径 http://download.csdn.net/detail/xx_123_1_rj/6361839
user-0 提问: 进程退出后，泄漏在其中的内存会被os回收，我的观点是不是准确的 ？

回复:
user: user-1
content: 引用 9 楼 lm_whales 的回复:进程exit，进程的所有自有内存，都会释放掉，包括heap区。  现在的操作系统而言

user: user-1
content: 进程exit，进程的所有自有内存，都会释放掉，包括heap区。

user: user-2
content: 《深入解析Windows操作系统-Windows Internals》进程管理、内存管理。

user: user-3
content: 引用 6 楼 xwhbwas2008 的回复:[quote=引用 1 楼 hnwyllmm 的回复:] 每个进程起来用的内存都是虚的，不是有整个操作系统统一分配的，所以你的进程即使异常退出了，也不会影响整个OS的运行。其实也不存在进程的Heap区还给OS，因为他的Heap是专属进程的，进程结束了，也就没了，而且这个Heap不是从OS中的某部分内存分出来的 问下你这里的 不是有整个操作系统统一分配的 是不是“由”？   再就是能详细解释下这句话不 ？[/quote] 是由，打错了不好意思。 我的意思是，每个进程都有自己专属的内存空间。当操作系统创建一个新的进程出来，就为他分配了一定的内存（不是所有进程共用同一个内存），但是这个内存不占用操作系统本身内存，也不受物理内存的限制，只有当进程运行时访问到某些内存没有对应物理内存时，操作系统才将信息加载到物理内存中。我的表达能力有限，可能会带有误导性，给个关键字：虚拟内存，搜索下。

user: user-0
content: 引用 1 楼 hnwyllmm 的回复:每个进程起来用的内存都是虚的，不是有整个操作系统统一分配的，所以你的进程即使异常退出了，也不会影响整个OS的运行。其实也不存在进程的Heap区还给OS，因为他的Heap是专属进程的，进程结束了，也就没了，而且这个Heap不是从OS中的某部分内存分出来的 问下你这里的 不是有整个操作系统统一分配的 是不是“由”？   再就是能详细解释下这句话不 ？

user: user-0
content: 引用 1 楼 hnwyllmm 的回复:每个进程起来用的内存都是虚的，不是有整个操作系统统一分配的，所以你的进程即使异常退出了，也不会影响整个OS的运行。其实也不存在进程的Heap区还给OS，因为他的Heap是专属进程的，进程结束了，也就没了，而且这个Heap不是从OS中的某部分内存分出来的长知识了 big thanks

user: user-4
content: 怕的就是你的进程不结束

user: user-1
content: 对于现在的操作系统而言是这样的； 不过比较老的就不是这样，所以当时内存泄露，是个很大的问题。

user: user-5
content: 应该是对的。内存泄露只发生在在进程运行过程中

user: user-3
content: 每个进程起来用的内存都是虚的，不是有整个操作系统统一分配的，所以你的进程即使异常退出了，也不会影响整个OS的运行。其实也不存在进程的Heap区还给OS，因为他的Heap是专属进程的，进程结束了，也就没了，而且这个Heap不是从OS中的某部分内存分出来的

user: user-3
content: 引用 11 楼 xwhbwas2008 的回复:[quote=引用 7 楼 hnwyllmm 的回复:] [quote=引用 6 楼 xwhbwas2008 的回复:] [quote=引用 1 楼 hnwyllmm 的回复:] 每个进程起来用的内存都是虚的，不是有整个操作系统统一分配的，所以你的进程即使异常退出了，也不会影响整个OS的运行。其实也不存在进程的Heap区还给OS，因为他的Heap是专属进程的，进程结束了，也就没了，而且这个Heap不是从OS中的某部分内存分出来的 问下你这里的 不是有整个操作系统统一分配的 是不是“由”？   再就是能详细解释下这句话不 ？[/quote] 是由，打错了不好意思。 我的意思是，每个进程都有自己专属的内存空间。当操作系统创建一个新的进程出来，就为他分配了一定的内存（不是所有进程共用同一个内存），但是这个内存不占用操作系统本身内存，也不受物理内存的限制，只有当进程运行时访问到某些内存没有对应物理内存时，操作系统才将信息加载到物理内存中。我的表达能力有限，可能会带有误导性，给个关键字：虚拟内存，搜索下。[/quote] 受教了。再请问下你这些知识是从哪里获取的？推荐本书或者资料 ？ [/quote] 基本上每本操作系统的书都会介绍的，如果你是计算机专业或者相关专业，这门课也会开的

user: user-0
content: 引用 7 楼 hnwyllmm 的回复:[quote=引用 6 楼 xwhbwas2008 的回复:] [quote=引用 1 楼 hnwyllmm 的回复:] 每个进程起来用的内存都是虚的，不是有整个操作系统统一分配的，所以你的进程即使异常退出了，也不会影响整个OS的运行。其实也不存在进程的Heap区还给OS，因为他的Heap是专属进程的，进程结束了，也就没了，而且这个Heap不是从OS中的某部分内存分出来的 问下你这里的 不是有整个操作系统统一分配的 是不是“由”？   再就是能详细解释下这句话不 ？[/quote] 是由，打错了不好意思。 我的意思是，每个进程都有自己专属的内存空间。当操作系统创建一个新的进程出来，就为他分配了一定的内存（不是所有进程共用同一个内存），但是这个内存不占用操作系统本身内存，也不受物理内存的限制，只有当进程运行时访问到某些内存没有对应物理内存时，操作系统才将信息加载到物理内存中。我的表达能力有限，可能会带有误导性，给个关键字：虚拟内存，搜索下。[/quote] 受教了。再请问下你这些知识是从哪里获取的？推荐本书或者资料 ？
user-0 提问: 本人想报班学习下嵌入式开发，请问学习嵌入式的时候，是否需要先学习别的诸如单片机的东西？

回复:
user: user-1
content: Andriod  引用 8 楼 blueyiniu 的回复:引用 6 楼 turingo 的回复:那就不要往嵌入式方向走。  [quote=引用 4 楼 blueyiniu 的回复:] [quote=引用 1 楼 turingo 的回复:] 必须对硬件比较了解。  [quote=引用 楼主 u013410394 的回复:] 本人想报班学习下嵌入式开发，请问学习嵌入式的时候，是否需要先学习别的诸如单片机的东西？还有哪些基础必须要懂？  请问那如果只是能软件部分比较感兴趣呢？[/quote][/quote]   高人指点下，有没有其他合适的方向，本科专业是电气自动化，数、模、电都是专业课，但对软件编程及智能控制很感兴趣，不过对硬件电路设计无爱啊[/quote]

user: user-2
content: 不过也看你想做那个系统。wince,linux,vxworks、、多了

user: user-2
content: 引用 楼主 u013410394 的回复:本人想报班学习下嵌入式开发，请问学习嵌入式的时候，是否需要先学习别的诸如单片机的东西？还有哪些基础必须要懂？想学喜欢软件的话，可以向嵌入式应用软件发展，可以基本不用懂硬件，需要学：linux，C语言，数据结构，QT，make file。

user: user-3
content: 做嵌入式开发，不懂硬件的话怎么调试啊。不需要你会设计电路，但至少要能看得懂电路图，清楚整个系统的工作方式。

user: user-4
content: 如果只是软件、学习c语言！学精通

user: user-5
content: 引用 6 楼 turingo 的回复:那就不要往嵌入式方向走。  引用 4 楼 blueyiniu 的回复:[quote=引用 1 楼 turingo 的回复:] 必须对硬件比较了解。  [quote=引用 楼主 u013410394 的回复:] 本人想报班学习下嵌入式开发，请问学习嵌入式的时候，是否需要先学习别的诸如单片机的东西？还有哪些基础必须要懂？  请问那如果只是能软件部分比较感兴趣呢？[/quote][/quote]   高人指点下，有没有其他合适的方向，本科专业是电气自动化，数、模、电都是专业课，但对软件编程及智能控制很感兴趣，不过对硬件电路设计无爱啊

user: user-1
content: 不单单是单片机，数字电路和模拟电路都应该了解。  引用 2 楼 u013410394 的回复:引用 1 楼 turingo 的回复:必须对硬件比较了解。  [quote=引用 楼主 u013410394 的回复:] 本人想报班学习下嵌入式开发，请问学习嵌入式的时候，是否需要先学习别的诸如单片机的东西？还有哪些基础必须要懂？ 您是指单片机吗？您的意思是学习嵌入式之前需要把单片机学习下？？[/quote]

user: user-1
content: 那就不要往嵌入式方向走。  引用 4 楼 blueyiniu 的回复:引用 1 楼 turingo 的回复:必须对硬件比较了解。  [quote=引用 楼主 u013410394 的回复:] 本人想报班学习下嵌入式开发，请问学习嵌入式的时候，是否需要先学习别的诸如单片机的东西？还有哪些基础必须要懂？  请问那如果只是能软件部分比较感兴趣呢？[/quote]

user: user-5
content: 引用 2 楼 u013410394 的回复:引用 1 楼 turingo 的回复:必须对硬件比较了解。  [quote=引用 楼主 u013410394 的回复:] 本人想报班学习下嵌入式开发，请问学习嵌入式的时候，是否需要先学习别的诸如单片机的东西？还有哪些基础必须要懂？ 您是指单片机吗？您的意思是学习嵌入式之前需要把单片机学习下？？[/quote]   感觉单片机太简单了点，学不学对嵌入式学习影响应该不大，无非就那几个口和2个E2PROM吧

user: user-5
content: 引用 1 楼 turingo 的回复:必须对硬件比较了解。  引用 楼主 u013410394 的回复:本人想报班学习下嵌入式开发，请问学习嵌入式的时候，是否需要先学习别的诸如单片机的东西？还有哪些基础必须要懂？  请问那如果只是能软件部分比较感兴趣呢？

user: user-6
content: 如果自己有学习能力 为什么要报班

user: user-0
content: 引用 1 楼 turingo 的回复:必须对硬件比较了解。  引用 楼主 u013410394 的回复:本人想报班学习下嵌入式开发，请问学习嵌入式的时候，是否需要先学习别的诸如单片机的东西？还有哪些基础必须要懂？ 您是指单片机吗？您的意思是学习嵌入式之前需要把单片机学习下？？

user: user-1
content: 必须对硬件比较了解。  引用 楼主 u013410394 的回复:本人想报班学习下嵌入式开发，请问学习嵌入式的时候，是否需要先学习别的诸如单片机的东西？还有哪些基础必须要懂？
user-0 提问: #define LCD_PRINT(...)这样的一个简单定义是干嘛的？有啥作用

回复:
user: user-0
content: 引用 4 楼 KenZhang1031 的回复:引用你是指 LCD_PRINT(a);调用的是func（a） 这个函数吗？可是它里面是...啊，怎么传递参数的 在我举例代码中，你明白那段代码的意思吗？如果DEBUG定义了，那么有效的就是#define LCD_PRINT(...)    func(a)，所以LCD_PRINTF就会执行func(a)，如果没有定义DEBUG，那么有效的就是#define LCD_PRINT(...)。什么都不做。 谢谢你，分数不多，都给你了，笑纳

user: user-1
content: 引用你是指 LCD_PRINT(a);调用的是func（a） 这个函数吗？可是它里面是...啊，怎么传递参数的 在我举例代码中，你明白那段代码的意思吗？如果DEBUG定义了，那么有效的就是#define LCD_PRINT(...)    func(a)，所以LCD_PRINTF就会执行func(a)，如果没有定义DEBUG，那么有效的就是#define LCD_PRINT(...)。什么都不做。

user: user-1
content: 省略号表示函数参数个数可变，比如常用的printf函数，原型是int printf( const char* format, ...); 后面的...表示参数个数可变，所以才能打印多个参数啊。

user: user-0
content: 引用 1 楼 KenZhang1031 的回复:这个宏定义表示什么都不做。通常用于如下的用法：  #include <stdio.h>  #ifdef DEBUG #define LCD_PRINT(...)	func(a) #else #define LCD_PRINT(...) #endif  void func(int a) { 	printf("Call func, param = %d\r\n", a); }  void main(void) { 	unsigned int a = 123;  	LCD_PRINT(a);  } 比如调式版本的软件中定义了DEBUG，那么这个时候LCD_PRINT函数就会调用func(a)来打印调式的信息；一旦程序调式通过，要发行了，就不需要DEBUG的定义了，这个时候LCD_PRINT就会什么都不执行。  你是指 LCD_PRINT(a);调用的是func（a） 这个函数吗？可是它里面是...啊，怎么传递参数的

user: user-1
content: 这个宏定义表示什么都不做。通常用于如下的用法：  #include <stdio.h>  #ifdef DEBUG #define LCD_PRINT(...)	func(a) #else #define LCD_PRINT(...) #endif  void func(int a) { 	printf("Call func, param = %d\r\n", a); }  void main(void) { 	unsigned int a = 123;  	LCD_PRINT(a);  } 比如调式版本的软件中定义了DEBUG，那么这个时候LCD_PRINT函数就会调用func(a)来打印调式的信息；一旦程序调式通过，要发行了，就不需要DEBUG的定义了，这个时候LCD_PRINT就会什么都不执行。
user-0 提问: C基础

回复:
user: user-1
content: 引用 7 楼 crabisacoolboy 的回复:[quote=引用 6 楼 crabisacoolboy 的回复:] [quote=引用 4 楼 derekrose 的回复:] [quote=引用 2 楼 crabisacoolboy 的回复:] [quote=引用 1 楼 derekrose 的回复:] 相当于 gcc -c main.c -o main.o gcc -c a.c -o a.o gcc main.o a.o -o main  还是不明白main()方法怎么把foo()方法引用到的？是编译完了直接就会把foo()方法跟main()方法关联吗？ 能够解释下吗？[/quote]  理解link动作是做什么[/quote]  不明白，我先google下，然后再回来看看[/quote] 在问个问题啊，比如我的main.c 里面也也有个foo()方法，这样程序就会报错，想问下c语言不支持在不同的文件里面定义相同名字的函数吗？[/quote]  貌似都是比C高级的编程语言（如C＋＋ JAVA）才有命名空间来解决这个问题的吧

user: user-0
content: 引用 8 楼 baichi4141 的回复:首先，c和java是两门不同的语言，所以“main.c的main()方法里面没有引入a.c的foo()方法应该编译都通不过”这种想法以后不要再有了，没有什么应该不应该，只有语言标准 然后，c语言的不同文件在编译时分别编译为不同模块，所有模块最终链接为可执行文件，如果没有特别声明，所有全局变量和函数都可以在模块外通过名字直接访问，所以不同模块中不能有同名的全局变量和函数。如果想要使用同名的全局变量和函数，就用关键字static声明为内部，这样这个变量和函数对模块外来说就是不可见的，自然也就不会报冲突错误   谢谢，刚刚学习所以才会有这些疑问。分少，就把分平均给几位吧。

user: user-2
content: 首先，c和java是两门不同的语言，所以“main.c的main()方法里面没有引入a.c的foo()方法应该编译都通不过”这种想法以后不要再有了，没有什么应该不应该，只有语言标准 然后，c语言的不同文件在编译时分别编译为不同模块，所有模块最终链接为可执行文件，如果没有特别声明，所有全局变量和函数都可以在模块外通过名字直接访问，所以不同模块中不能有同名的全局变量和函数。如果想要使用同名的全局变量和函数，就用关键字static声明为内部，这样这个变量和函数对模块外来说就是不可见的，自然也就不会报冲突错误

user: user-0
content: 引用 6 楼 crabisacoolboy 的回复:[quote=引用 4 楼 derekrose 的回复:] [quote=引用 2 楼 crabisacoolboy 的回复:] [quote=引用 1 楼 derekrose 的回复:] 相当于 gcc -c main.c -o main.o gcc -c a.c -o a.o gcc main.o a.o -o main  还是不明白main()方法怎么把foo()方法引用到的？是编译完了直接就会把foo()方法跟main()方法关联吗？ 能够解释下吗？[/quote]  理解link动作是做什么[/quote]  不明白，我先google下，然后再回来看看[/quote] 在问个问题啊，比如我的main.c 里面也也有个foo()方法，这样程序就会报错，想问下c语言不支持在不同的文件里面定义相同名字的函数吗？

user: user-0
content: 引用 4 楼 derekrose 的回复:[quote=引用 2 楼 crabisacoolboy 的回复:] [quote=引用 1 楼 derekrose 的回复:] 相当于 gcc -c main.c -o main.o gcc -c a.c -o a.o gcc main.o a.o -o main  还是不明白main()方法怎么把foo()方法引用到的？是编译完了直接就会把foo()方法跟main()方法关联吗？ 能够解释下吗？[/quote]  理解link动作是做什么[/quote]  不明白，我先google下，然后再回来看看

user: user-0
content: 引用 3 楼 KenZhang1031 的回复:你的gcc明明写了两个.c文件，两个.c文件都编译成了main文件，怎么会报错？ gcc f1.c f2.c -o out 会把f1.c和f2.c都编译并且连接成out文件。你的main函数以及main调用的函数在这两个文件里都能找到，为什么要报错？ 恩。我是学java的，就是觉得main.c的main()方法里面没有引入a.c的foo()方法应该编译都通不过,但是c可以，所以不明白。

user: user-3
content: 引用 2 楼 crabisacoolboy 的回复:[quote=引用 1 楼 derekrose 的回复:] 相当于 gcc -c main.c -o main.o gcc -c a.c -o a.o gcc main.o a.o -o main  还是不明白main()方法怎么把foo()方法引用到的？是编译完了直接就会把foo()方法跟main()方法关联吗？ 能够解释下吗？[/quote]  理解link动作是做什么

user: user-4
content: 你的gcc明明写了两个.c文件，两个.c文件都编译成了main文件，怎么会报错？ gcc f1.c f2.c -o out 会把f1.c和f2.c都编译并且连接成out文件。你的main函数以及main调用的函数在这两个文件里都能找到，为什么要报错？

user: user-0
content: 引用 1 楼 derekrose 的回复:相当于 gcc -c main.c -o main.o gcc -c a.c -o a.o gcc main.o a.o -o main  还是不明白main()方法怎么把foo()方法引用到的？是编译完了直接就会把foo()方法跟main()方法关联吗？ 能够解释下吗？

user: user-3
content: 相当于 gcc -c main.c -o main.o gcc -c a.c -o a.o gcc main.o a.o -o main
user-0 提问: typedef void (*spi_t)(uint32_t *data);

回复:
user: user-1
content: 这个相当于定义了一个指向函数的指针spi_t类型，指向的函数原型是 void 函数名(unit32_t *data) 用法，比如下面的程序：   #include <stdio.h>  typedef void (*spi_t)(unsigned int *data);  void func(unsigned int * pParam) { 	printf("Call func, param = %d\r\n", *pParam); }   void main(void) { 	unsigned int a = 123; 	spi_t f = func;      if(f) 	{ 		f(&a); 	} }

user: user-2
content: typedef void (*spi_t)(uint32_t *data); //定义的是一个返回值为void, 参数为uint32_t *的函数指针  void spi_tFunc(uint32_t *data) { 	printf("%d\n", *data); } int main() { 	spi_t F1 = NULL; 	F1 = spi_tFunc; 	uint32_t l1 = 6; 	F1(&l1); 	  	return 0; }
user-0 提问: 如何判断 -1.#IND000000000000

回复:
user: user-1
content: 引用 8 楼 mujiok2003 的回复:#include <cmath> if(i == NAN){ //... }  if(isnan(i)){  }

user: user-1
content: #include <cmath> if(i == NAN){ //... }

user: user-2
content: 引用 5 楼 daxiaoyuyu 的回复:[quote=引用 4 楼 derekrose 的回复:] 你想把i去掉？ 从符号表去掉么  我想判断出 i == -1.#IND000000000000; 这样的情况。不知道怎么弄。[/quote] i == i 你试试

user: user-3
content: 我的理解是在C语言中对参数做判断，比如： if(a != 0) // a才可以做除数 if(a >= 0) // 才可以sqrt(a)

user: user-0
content: 引用 4 楼 derekrose 的回复:你想把i去掉？ 从符号表去掉么  我想判断出 i == -1.#IND000000000000; 这样的情况。不知道怎么弄。

user: user-2
content: 你想把i去掉？ 从符号表去掉么

user: user-0
content: 引用 2 楼 KenZhang1031 的回复:那是你用了超范围的操作引起的，比如：除数为0，平方根参数用负数，对负数取对数，对无穷大的数执行加减乘除，反正弦和反余弦函数的参数大于1等等这些超范围的操作，具体看你程序中做了什么，对参数要做一下判断。 引用 1 楼 user-4 的回复:几个意思？出现这样的数值说明你的程序有bug，这个判断是干什么用？  因为我的程序的一些数据需要重外部导入。matlab中有NaN的导入到C语言的double类型就成了-1.#IND000000000000，我是为了不要处理原来matlab中有NaN的数据。

user: user-3
content: 那是你用了超范围的操作引起的，比如：除数为0，平方根参数用负数，对负数取对数，对无穷大的数执行加减乘除，反正弦和反余弦函数的参数大于1等等这些超范围的操作，具体看你程序中做了什么，对参数要做一下判断。

user: user-4
content: 几个意思？出现这样的数值说明你的程序有bug，这个判断是干什么用？
user-0 提问: epoll的端口数量限制

回复:
user: user-0
content: 引用 2 楼 gpshq 的回复:一个TCP连接的表示[源IP, 源port, 目的ip, 目的port]  弄蒙了，一直以为accept后的一个描述符对应一条链接，基本概念都没搞懂，2了....

user: user-1
content: 一个TCP连接的表示[源IP, 源port, 目的ip, 目的port]

user: user-2
content: 参考这个帖子 http://bbs.csdn.net/topics/390429343
user-0 提问: 寄存器写值

回复:
user: user-0
content: 谢谢楼上两位大师，原来还有这样的规定

user: user-1
content: 缺省是32位的, 左移7位不会越界的

user: user-2
content: 你要分是8位的还是16位的还是32位的，16位和32位的话1792没错，14*(2的7次方)，8位的话，会丢弃高位，结果为0。

user: user-0
content: 这是我用百度搜索出来的答案，也不知道对不对，求大神们指教下，谢谢
user-0 提问: 有点莫名其妙。。。

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:第18行下边加上这句 	long M = N; 24行的N改为M. ps:打印结果后边加上\n 忘了去单步调试，急躁了，哎，麻烦版主了。。下次得改

user: user-0
content: 引用 1 楼 user-1 的回复:第18行下边加上这句 	long M = N; 24行的N改为M. ps:打印结果后边加上\n 捉急了，谢谢啦

user: user-1
content: 第18行下边加上这句 	long M = N; 24行的N改为M. ps:打印结果后边加上\n
user-0 提问: C语言结构体变量和结构体指针变量的疑问

回复:
user: user-1
content: 习惯性问题吧  一般纯成员变量的话 大家都喜欢用struct

user: user-2
content: 不管是不是结构体，指针都是C语言中的特点之一，如果不用指针，就发挥不了C语言相比于其它高级语言的优点，指针，自由而强大，同时也是一把双刃剑，用的不好，程序随时崩溃。

user: user-3
content: 用指针省空间，不用传递给函数一个数据的副本，这个数据可能是庞大的。 那内存泄露对吧。。。嗯，你懂的。。。别的高级语言可能好点

user: user-4
content: 跟结构体没啥关系，关键在于指针 至于为啥用指针——嗯，一幅宽度不确定高度不确定的图片，你不用指针保存一下试试看？再把它等大小切成四份八份三十二份不确定份数，你不用指针保存一下试试看？

user: user-5
content: 函数传参一般用指针而不用指针指向的数据（包括结构体）。

user: user-6
content: 赞同二楼，要不然谁愿意冒内存泄露的风险使用指针呢

user: user-7
content: 指针和对象的区别，和结构体没啥关系。指针的作用搜一下一大把，再加上多实践就明白为啥要用指针了

user: user-8
content: 引用 1 楼 user-9 的回复:因为指针效率比较高  不然谁特么用它啊 回答的真霸气····

user: user-9
content: 因为指针效率比较高  不然谁特么用它啊
user-0 提问: printf("\nCC\toptions\tfile.[cC]\n");打印结果是什么

回复:
user: user-1
content: 引用 3 楼 chinmusam 的回复:调试的结果显示：CC       options file.[cC] 从结果上看，明显第一个\t处跳转位置正确，而后面的\t应该是接着前面的options显示后，再跳一个制表位(即7个空字符)才显示后面的file这个单词才正确呀？可结果显示，第二个\t只后跳了一个空字符。求解释。 did you read what 1# and 2# text?

user: user-2
content: 学习到了  吼吼 好幸福啊  又懂了一点点

user: user-3
content: 引用 3 楼 chinmusam 的回复:调试的结果显示：CC       options file.[cC] 从结果上看，明显第一个\t处跳转位置正确，而后面的\t应该是接着前面的options显示后，再跳一个制表位(即7个空字符)才显示后面的file这个单词才正确呀？可结果显示，第二个\t只后跳了一个空字符。求解释。 可以理解成为\t显示的长度是[1,8],至少是一个空位(前面有7个字符时),至多8个空位(前面已经对齐到8的整数倍) 具体是1还是8.显示完\t后一行的长度为8的整数倍为准. options 7个字符,加一个\t, 这是只要一个空格的位置,就可以对齐到8的整数倍位置,即'f'显示在第8列上(base on 0). 试试 $ echo -e "\nCC\toptions\tfile.[cC]\n"  CC      options file.[cC]  $ echo -e "\nCC\toptions1\tfile.[cC]\n"  CC      options1        file.[cC]  (代码显示有问题,使用了空格代替制表符)

user: user-4
content: 不就是cC吗？

user: user-5
content: 同求解释•••••••

user: user-0
content: 调试的结果显示：CC       options file.[cC] 从结果上看，明显第一个\t处跳转位置正确，而后面的\t应该是接着前面的options显示后，再跳一个制表位(即7个空字符)才显示后面的file这个单词才正确呀？可结果显示，第二个\t只后跳了一个空字符。求解释。

user: user-6
content: \t是一个制表符位, 默认8个空格长度, 它会跳到下一个8的倍数的整数列上 options已经占了7位，/t只是向后移动一位

user: user-7
content: \t是一个制表符位, 默认8个空格长度, 它会跳到下一个8的倍数的整数列上（从第0列开始数）  options已经占了7位，/t只是向后移动一位
user-0 提问: 急求！希望这题做了能给明天考试一些帮助 （C语言写）

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。 查MSDN是Windows程序员必须掌握的技能之一。

user: user-0
content: 说的是  感谢！

user: user-2
content: while循环用fgets 读入一行line sscanf(line,"%[^,],%[^,],%s",name,number,tmp); //tmp没用，防止坏数据溢出 然后数据就出来了，放到数组里处理输出就好了

user: user-0
content: 用fscanf的话怎么把数据分开啊   例如分开aaa和77  新手呀 能给一些代码吗 我好好体会一下 下午就要考了 谢谢！

user: user-3
content: 读文件用fscanf就可以了. 数据可以用链表, 也可以简单一点用数组(事先假定一个最大的学生数目)

user: user-0
content: 读文件是个问题   要用哪个一个函数读  fscanf？  然后这些数据存在哪里  要建立链表吗

user: user-3
content: 1. 读文件 2. 以姓名为key作查找和计算 3. 排序 4. 写文件  你是哪部分不会呢?

user: user-0
content: 十分感谢六楼以及其他回帖的人 ~~~  但能不能给点注释啊@#6

user: user-1
content: //读入一系列两元组数据<姓名，成绩>，生成一个排序的五元组<姓名，总分，平均分，最低分，最高分>，并将排序结果按照姓名的降序生成到文件。 // //文件举例： //Input files: In_3.txt //<aaa,77> //<bbb,82> //<ccc,72> //<aaa,83> //<bbb,95> // //Output files: [Your Student No.]_3_out.txt //<ccc,72,72,72,72> //<bbb,177,88.5,82,95> //<aaa,160,80,77,83> #include <stdio.h> #include <string.h> #define MYNO "0001" #define MAXL 1000 static struct S {     char nam[20];     double tsc;     double asc;     double lsc;     double hsc;     int num; } s[MAXL],t; char ln[80]; char nam[20]; double sco; FILE *f; int n,i,h,j; char c; int main() {     f=fopen("In_3.txt","r");     if (f==NULL) {         printf("Can not open file In_3.txt\n");         return 1;     }     n=0;     h=0;     while (1) {         if (NULL==fgets(ln,80,f)) break;         h++;         if (3==sscanf(ln,"<%19[^,],%lf%c",nam,&sco,&c)) {             if (c!='>') printf("line %d formar error:%s",h,ln);             else {                 for (i=0;i<n;i++) {                     if (0==strcmp(nam,s[i].nam)) break;                 }                 if (i<n) {                     s[i].tsc+=sco;                     if (s[i].lsc>sco) s[i].lsc=sco;                     if (s[i].hsc<sco) s[i].hsc=sco;                     s[i].num++;                 } else {                     strcpy(s[n].nam,nam);                     s[n].tsc=sco;                     s[n].lsc=sco;                     s[n].hsc=sco;                     s[n].num=1;                     n++;                     if (n>=MAXL) {                         printf("Too many students(>%d)!\n",MAXL);                         fclose(f);                         return 2;                     }                 }             }         } else {             printf("line %d formar error:%s",h,ln);         }     }     fclose(f);     for (i=0;i<n;i++) {         s[i].asc=s[i].tsc/s[i].num;     }     for (i=0;i<n-1;i++) {         for (j=i+1;j<n;j++) {             if (strcmp(s[i].nam,s[j].nam)<0) {                 t=s[i];s[i]=s[j];s[j]=t;             }         }     }     f=fopen("["MYNO"]_3_out.txt","w");     for (i=0;i<n;i++) {         fprintf(f,"<%s,%lg,%lg,%lg,%lg>\n",s[i].nam,s[i].tsc,s[i].asc,s[i].lsc,s[i].hsc);     }     fclose(f);     return 0; } //type [0001]_3_out.txt //<ccc,72,72,72,72> //<bbb,177,88.5,82,95> //<aaa,160,80,77,83> //
user-0 提问: 一个vs的链接问题。

回复:
user: user-0
content: 问题是代码的作者能编译出来。而且就算写汇编也可能有这种问题，因为是链接而不是编译的问题。

user: user-1
content: 写.asm

user: user-2
content: 直接插入汇编吧

user: user-0
content: 顶起，求解..
user-0 提问: c语言删除字符串多余空格问题

回复:
user: user-1
content: int main() { 	char str[]="abc   d"; 	deblank(str); }  多说一句，deblank函数达不到Lz的需求

user: user-2
content: string指向字符串常量，不能对字符串常量做修改

user: user-1
content: 引用 5 楼 darktempl123 的回复:[quote=引用 2 楼 a345485527 的回复:]  int main() { 	char str[]="abc   d"; 	deblank(str); }  多说一句，deblank函数达不到Lz的需求 能给解释一下为什么这样就没有那个内存错误了吗？我那种写法传递的是字符串常量？[/quote] 是的 先前传递的"abcd"是存放在文字常量区的，顾名思义，试图修改是不允许的 而用一个数组 str[]则是在栈内存放的，允许修改 同理 char *str="abc"是一个执行常量的指针，故同样不能修改str指向内存的内容

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

user: user-0
content: 引用 2 楼 a345485527 的回复: int main() { 	char str[]="abc   d"; 	deblank(str); }  多说一句，deblank函数达不到Lz的需求 能给解释一下为什么这样就没有那个内存错误了吗？我那种写法传递的是字符串常量？

user: user-4
content: http://zhidao.baidu.com/question/168113722.html

user: user-5
content: #include <stdio.h> #include <string.h>  void deblank(char string[]) {          int j=1;     for(int i=0;i<=strlen(string)-2;i++,j=i+1)     {         if(string[i]==' '&&string[j]==' ')         {             string[j]=string[++j];         }     }     puts(string); }   int main() {     char str[] = "abc  d";     deblank(str);     return 0; }  引用 楼主 darktempl123 的回复:初学c语言，想实现这么个功能：如果字符串有一个地方由一个或多个连续空格组成，就把它们改成单个空格字符。比如abc  d输出成abc d。  #include <stdio.h> #include <string.h> void deblank(char string[]) { 	 	int j=1; 	for(int i=0;i<=strlen(string)-2;i++,j=i+1) 	{ 		if(string[i]==' '&&string[j]==' ') 		{ 			string[j]=string[++j]; 		} 	} 	puts(string); }  int main() { 	deblank("abc  d"); } 但是这段代码总是报错，好像和内存地址冲突有关，求点拨，怎么才能用数组实现这个功能呢？
user-0 提问: Makefile疑问

回复:
user: user-1
content: 静态库的话，不需要的，直接运行就好！

user: user-2
content: 把编译时的/home/ovi_lib上传到执行时的/home/ovi_lib

user: user-3
content: 搜“跟我一起写makefile”

user: user-0
content: 引用 2 楼 max_min_ 的回复:静态库的话，不需要的，直接运行就好！ 怎么判断是静态库还是动态库？Makefile中看不出来么

user: user-4
content: 首先分清运行时和编译时分别是什么东西

user: user-0
content: 引用 3 楼 turingo 的回复:是编译的时候去链接ovi库，运行的时候是不需要的。  [quote=引用 楼主 hanzhaoshuai 的回复:]  上面是makefile中的一段，我的疑惑，md_func1.fcgi运行时是不是要到/home/ovi_lib目录下找 ovi这个库？ 如果找不到怎么办？不明白，求指点。。。[/quote]  不是有动态库 .so 和静态库 .a 的区别么，怎么判断是静态库还是动态库？

user: user-5
content: 是编译的时候去链接ovi库，运行的时候是不需要的。  引用 楼主 hanzhaoshuai 的回复: 上面是makefile中的一段，我的疑惑，md_func1.fcgi运行时是不是要到/home/ovi_lib目录下找 ovi这个库？ 如果找不到怎么办？不明白，求指点。。。
user-0 提问: linux下套接字问题

回复:
user: user-0
content: int loopWriteV(int _isockfd, struct iovec *_iov, int _iovcnt) { int iret = 0;  int i = 0; int itmplen0 = 0; int itmplen1 = 0; int itmplen2 = 0;  for(i = 0; i < _iovcnt; i++) { itmplen0 += _iov[i].iov_len; }   int w;  i = 0;//归零 while(itmplen0 > 0) {  itmplen1 = writev(_isockfd, _iov + i, _iovcnt - i); if(itmplen1 == itmplen0) { break; } else if(itmplen1 <= 0) { if((errno == EINTR) ||(errno == EAGAIN)) { continue; } else { perror("what the fucking what"); iret = -1; goto leave; } } else// if(itmplen1 < itmplen0) {  itmplen0 -= itmplen1; itmplen2 = 0;  for(; i < _iovcnt; i++) { itmplen2 += _iov[i].iov_len;  if(itmplen2 > itmplen1) { //此处指针偏移错误 //_iov[i].iov_base +=  (itmplen2 - itmplen1); //_iov[i].iov_len -= (itmplen2 - itmplen1);  break; } else if(itmplen2 == itmplen1) { i++; break; } } } } leave:  return iret; }   我找到原因了，还是要感谢各位的回答。

user: user-1
content: 1， No such file or directory : 没有文件路径  可能是socket的参数是不是正确；文件（资源）路径是否正确；指定的文件（资源）是否有读写权限 2， 不让变成阻塞 可能是怕程序卡死吧  3， 其他的就不知道了

user: user-0
content: 我是根据writev返回值，然后while里发送，代码如下, 可有不合理的地方？？？ int loopWriteV(int _isockfd, struct iovec *_iov, int _iovcnt) { 	int iret = 0;	 	int i = 0; 	int itmplen0 = 0; 	int itmplen1 = 0; 	int itmplen2 = 0; 	 	for(i = 0; i < _iovcnt; i++) 	{ 		itmplen0 += _iov[i].iov_len; 	}   	int w; 	 	i = 0;//归零 	while(itmplen0 > 0) 	{  		itmplen1 = writev(_isockfd, _iov + i, _iovcnt - i); 		if(itmplen1 == itmplen0) 		{ 			break; 		} 		else if(itmplen1 <= 0) 		{ 			if((errno == EINTR) ||(errno == EAGAIN)) 			{ 				continue; 			} 			else 			{ 				perror("what the fucking what"); 				iret = -1; 				goto leave; 			} 		} 		else// if(itmplen1 < itmplen0) 		{ 			 			itmplen0 -= itmplen1; 			itmplen2 = 0; 			 			for(; i < _iovcnt; i++) 			{ 				itmplen2 += _iov[i].iov_len; 					 				if(itmplen2 > itmplen1) 				{ 					_iov[i].iov_base +=  (itmplen2 - itmplen1); 					_iov[i].iov_len -= (itmplen2 - itmplen1);  					break; 				} 				else if(itmplen2 == itmplen1) 				{ 					i++; 					break; 				} 			} 		} 	} leave:	 	return iret; }

user: user-2
content: writev：成功返回write字节数，失败返回-1，用 error()获取错误码，

user: user-0
content: 引用 3 楼 user-3 的回复:检查下你发送的时候 socket套接字是否有效！  版主老大 ，这个怎么检查呀？不应该根据writev的返回值检查吗？返回值是-1，我这面没有关闭socket，如果对端关闭的话不应该是reset by peer吗？

user: user-3
content: 检查下你发送的时候 socket套接字是否有效！
user-0 提问: extern char hello[]；是嘛意思阿 ？

回复:
user: user-1
content: 就是在另外一个文件里定义了char hello[xxxx]; 定义那里必须明确数组的大小. 这里只是声明, 说明hello是一个char类型的数组, 声明时不必说明大小.

user: user-2
content: 表示hello是个外部符号，他的定义在其他的编译单元中 可以有，但没有意义。

user: user-3
content: 可以不可以 试试就知道了

user: user-4
content: 工程搜索下char hello[ ，这个应该是在其它cpp定义的。此处只是一个外部引用声明
user-0 提问: sqrt((float)-10)

回复:
user: user-0
content: 通过了 1>------ 已启动生成: 项目: Test, 配置: Debug Win32 ------ 1>生成启动时间为 2014/1/7 21:49:24。 1>ClCompile: 1>  test.c 1>d:\source code\test\test\test.c(7): warning C4244: “=”: 从“double”转换到“float”，可能丢失数据 1> 1>生成成功。 1> 1>已用时间 00:00:00.11 ========== 生成: 成功 1 个，失败 0 个，最新 0 个，跳过 0 个 ==========

user: user-1
content: 1、sqrt要求参数为非负浮点数，如果为负数，返回值不定。 2、http://msdn.microsoft.com/zh-cn/library/f1xa99e6.aspx

user: user-2
content: 第一个。。。 怎么会通过编译呢
user-0 提问: c语言求解

回复:
user: user-1
content: LZ是在考试吗？

user: user-2
content: 我刚学C的时候貌似写过类似的作页

user: user-3
content: 貌似这C语言上过几节课的都可以写了，LZ还是用心写写试试吧

user: user-4
content: LZ的语气不对，学习的态度也不对

user: user-5
content: 这个是最基本的了，还用来问？自己不去动动脑子？

user: user-6
content: #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h>  typedef struct message{     int number;     char name[100];     int ordinary;     int midterm;     int endterm; }Message;  typedef struct link{     Message *stu;     struct Link *next; }Link;  int main() {     Link *head = (Link*)malloc(sizeof(Link)), *tail = head;     head->stu = NULL;     head->next = NULL;     Message *tmp;     int n = 0;     printf("input students' number:");     scanf("%d", & n);     int m = n;     printf("circle input %d students message\n", n);     while(n--){         tmp = (Message*)malloc(sizeof(Message));         printf("input student's message\n");         scanf("%d %s %d %d %d", &(tmp->number), tmp->name, &(tmp->ordinary), &(tmp->midterm), &(tmp->endterm));         tail->next = (Link*)malloc(sizeof(Link));         tail = tail->next;         tail->stu = tmp;     }      int total[10] = {0};     tail = head;     while(tail->next != NULL){         tail = tail->next;         int score = tail->stu->ordinary * 0.2 + tail->stu->midterm * 0.3 + tail->stu->endterm * 0.5;         printf("ID:%d NAME:%s SCORE:%d\n", tail->stu->number, tail->stu->name, score);         total[score / 10 - 1]++;     } 	int i = 0;     for(i = 0; i < 10 ; i++){     	if(total[i] == 0) continue;       printf("%2d-%3d: %d/%d\n", i * 10, (i + 1) * 10, total[i], m); 	}     return 0; }   不好意思， 这个才是

user: user-6
content: #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h>  struct Message{     int number;     char name[100];     int ordinary;     int midterm;     int endterm; };  struct link{     Message *stu;     link *next; };  int main() {     link *head = (link*)malloc(sizeof(link)), *tail = head;     head->stu = NULL;     head->next = NULL;     Message *tmp;     int n = 0;     printf("input students' number:");     scanf("%d", & n);     int m = n;     printf("circle input %d students message\n", n);     while(n--){         tmp = (Message*)malloc(sizeof(Message));         printf("input student's message\n");         scanf("%d %s %d %d %d", &(tmp->number), tmp->name, &(tmp->ordinary), &(tmp->midterm), &(tmp->endterm));         tail->next = (link*)malloc(sizeof(link));         tail = tail->next;         tail->stu = tmp;     }      int total[10] = 0;     tail = head;     while(tail->next != NULL){         tail = tail->next;         int score = tmp->ordinary * 0.2 + tmp->midterm * 0.3 + tmp->endterm * 0.5;         printf("ID:%d NAME:%s SCORE:%d\n", tail->number, tail->name, score);         total[score / 10 - 1]++;     }      for(int i = 0; i < 10 ; i++){         printf("%d-%d: %f\n", i * 10, (i + 1) * 10, total[i] / m);     }     return 0; }
user-0 提问: SyncWait函数

回复:
user: user-1
content: 参考下面：用double类型是因为32位int类型不够表示时间跨度从1970.1.1到比如2050.1.1经过的秒数。 difftime Finds the difference between two times.  double difftime( time_t timer1, time_t timer0 );  Routine Required Header Compatibility  difftime <time.h> ANSI, 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  difftime returns the elapsed time in seconds, from timer0 to timer1. The value returned is a double-precision floating-point number.  Parameters  timer1  Ending time  timer0  Beginning time  Remarks  The difftime function computes the difference between the two supplied time values timer0 and timer1.  Example   /* DIFFTIME.C: This program calculates the amount of time  * needed to do a floating-point multiply 10 million times.  */  #include <stdio.h> #include <stdlib.h> #include <time.h>  void main( void ) {    time_t   start, finish;    long loop;    double   result, elapsed_time;     printf( "Multiplying 2 floating point numbers 10 million times...\n" );        time( &start );    for( loop = 0; loop < 10000000; loop++ )       result = 3.63 * 5.27;     time( &finish );     elapsed_time = difftime( finish, start );    printf( "\nProgram takes %6.0f seconds.\n", elapsed_time ); }   Output  Multiplying 2 floats 10 million times...  Program takes      2 seconds.   Floating-Point Support Routines |  Time Management Routines  See Also   time
user-0 提问: 数据结构字符串操作，求指导一下

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

user: user-2
content: 你的第一个问题  我测试了一下  你的 SString S1,S2;中的S1，S2中的ch没有初始化，应该先memset(S->ch,0,MAX);或者bzero(S->ch,MAX);程序逻辑基本没错误； 第二个问题 我随便写了写 你自己看看 需要改进的地方 ，自己改改； #include<stdio.h> #include<string.h> int search(char *str1,char *str2,int m) { 		int i,j; 		int len1 = strlen(str1); 		int len2 = strlen(str2); 		char *p1,*p2; 		p1 = str1; 		p2 = str2; 		if(len1<len2) { 				strcat(str2,p1+m); 				for(i=0;str2[i]!='\0';i++)  						str1[i+m] = str2[i]; 				str1[i+m] = '\0'; 		} 		for(i = 0;i < (len1-len2);i++) { 				if(strncmp(p2,p1+i,len2)==0){ 						//	puts(p1+i); 						return i; 				} 		} 		strcat(str2,p1+m); 		for(i=0;str2[i]!='\0';i++)  				str1[i+m] = str2[i]; 		str1[i+m] = '\0'; 		return -1; }  int main() { 		char a[128] = {}; 		char b[128] = {}; 		int n=-1;  		scanf("%s",a); 		getchar(); 		puts(a); 		scanf("%s",b); 		getchar(); 		puts(b); 		n =	search(a,b,5); 		printf("n = %d",n); 		puts(a); 		return 0; }
user-0 提问: 二级void指针呢怎么消除编译警告和返回正确值呢？

回复:
user: user-1
content: #include <stdio.h> int p2(void **j) {    return **(int **)j; } int main() {     int *i, **j;     int n = 99;     i = &n;     j = &i;     printf("====== %d =====\n", p2((void **)j));     return 0; } //====== 99 ===== //

user: user-2
content: printf("====== %d =====\n", p2((void**)（void*）j)); 这样做试试

user: user-0
content: 怎么修改才能避免警告呢？

user: user-2
content: 强制转换，出错自己负责； 编译器已经尽职尽责了，是你抛开了编译器的检查，自己要处理的。 有了问题，不要再找编译器的麻烦了。
user-0 提问: 如何消除void *这样的警告和返回预期值

回复:
user: user-1
content: return *((int *)i);  引用 楼主 u013354393 的回复:#include <stdio.h>  int p(void *i) {   return (int *)i; }  int main() {   int *i;   int n = 99;   i = &n;   printf("====== %d =====\n", p(i)); }  test2.c: In function ‘p’: test2.c:5: warning: return makes integer from pointer without a cast
user-0 提问: C语言图书馆管理系统

回复:
user: user-0
content: 这是要输出一个正方形的界面。

user: user-1
content: 好长啊，不过感觉这些东西 printf("   ※※※※※※※※※※※※※※※※※※\n  ");     printf("   ※                                ※\n  "); printf("   ※                                ※\n  "); printf("   ※         添加读者(1)            ※\n  "); printf("   ※         查询读者(2)            ※\n  ");	 printf("   ※         修改读者(3)            ※\n  "); printf("   ※         删除读者(4)            ※\n  ");	 printf("   ※         返回上一级(5)          ※\n  "); printf("   ※                                ※\n  "); printf("   ※※※※※※※※※※※※※※※※※※\n  "); 放在一个函数里就可以了，不用写那么多遍吧
user-0 提问: 新手求助o(︶︿︶)o 

回复:
user: user-1
content: 仅供参考#include <stdio.h> #include <string.h> char *a="abcde"; int L,i,j,k; void main() {     L=strlen(a);     for (i=1;i<=L;i++) {         for (j=0;j<=L-i;j++) {             for (k=j;k<j+i;k++) {                 printf("%c",a[k]);             }             printf("\n");         }     } }

user: user-0
content: 好吧。。大牛们能不能先给个代码研究一下。。还要交作业。。

user: user-0
content: 引用 4 楼 KillerGod 的回复:读文件，然后比较，合条件的就输出。 然后比较这个地方能说个详细点的算法或者步骤嘛？ 我是渣。。。。

user: user-2
content: 读文件，然后比较，合条件的就输出。

user: user-0
content: 能说的具体点嘛~ 我是菜鸟。。  谢谢啦。

user: user-3
content: 穷举不行吗,我觉的这个问题还是比较简单的啊

user: user-0
content: 忘了说了，是C语言的。。 真心求解答啊。。。想不出来了。。
user-0 提问: 【大小数相加问题】【字符数组】【求帮助哪里有错误】

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

user: user-1
content: 试过0.0+0.0吗？

user: user-2
content: 经过本大师的判断，你的代码的第一行到最后一行之间的某一行或某几行必定有不可告人的错误。

user: user-0
user-0 提问: 求助帖

回复:
user: user-0
content: 引用 6 楼 jimmywang123 的回复:[quote=引用 5 楼 user-2 的回复:] [quote=引用 4 楼 jimmywang123 的回复:] [quote=引用 2 楼 user-2 的回复:] 调试过了吗？ 调试没错误，用的VS2013，就是出现了那个中断，不知道怎么去处理了[/quote]  调试到哪的时候出错了  指出来[/quote] [/quote]  引用 6 楼 jimmywang123 的回复:[quote=引用 5 楼 user-2 的回复:] [quote=引用 4 楼 jimmywang123 的回复:] [quote=引用 2 楼 user-2 的回复:] 调试过了吗？ 调试没错误，用的VS2013，就是出现了那个中断，不知道怎么去处理了[/quote]  调试到哪的时候出错了  指出来[/quote] [/quote] 已经解决，总之谢谢啦。

user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。

user: user-0
content: 引用 5 楼 user-2 的回复:[quote=引用 4 楼 jimmywang123 的回复:] [quote=引用 2 楼 user-2 的回复:] 调试过了吗？ 调试没错误，用的VS2013，就是出现了那个中断，不知道怎么去处理了[/quote]  调试到哪的时候出错了  指出来[/quote]

user: user-2
content: 引用 4 楼 jimmywang123 的回复:[quote=引用 2 楼 user-2 的回复:] 调试过了吗？ 调试没错误，用的VS2013，就是出现了那个中断，不知道怎么去处理了[/quote]  调试到哪的时候出错了  指出来

user: user-0
content: 引用 2 楼 user-2 的回复:调试过了吗？ 调试没错误，用的VS2013，就是出现了那个中断，不知道怎么去处理了

user: user-0
content: 调试没错误，用的VS2013，就是出现了那个中断，不知道怎么去处理了

user: user-2
content: 调试过了吗？

user: user-0
content: 大神帮忙看看，为什么输入第一组数据之后就出现中断啊
user-0 提问: linux下c语言gotoxy()实现代码，怎么这么神奇

回复:
user: user-1
content: 学习了

user: user-2
content: ++  引用 3 楼 KenZhang1031 的回复:ANSI转义序列，很多类unix的终端，包括linux控制台都解释ANSI转义序列，转义符就是ESC，ASCII码是0x1b，比如Esc[Line;Columnf就表示移动光标到(Line,Column)的位置。而你printf打印的字符串正是这个命令，其中0x1B正是 ESC的ASCII码。

user: user-3
content: In the following list of ANSI escape sequences, the abbreviation ESC represents the ASCII escape character 27 (1Bh), which appears at the beginning of each escape sequence.  ESC[PL;PcH     Cursor Position: Moves the cursor to the specified position     (coordinates). If you do not specify a position, the cursor moves to the     home position--the upper-left corner of the screen (line 0, column     0). This escape sequence works the same way as the following Cursor     Position escape sequence.  ESC[PL;Pcf     Cursor Position: Works the same way as the preceding Cursor Position     escape sequence.  ESC[PnA     Cursor Up: Moves the cursor up by the specified number of lines without     changing columns. If the cursor is already on the top line, ANSI.SYS     ignores this sequence.  ESC[PnB     Cursor Down: Moves the cursor down by the specified number of lines     without changing columns. If the cursor is already on the bottom line,     ANSI.SYS ignores this sequence.  ESC[PnC     Cursor Forward: Moves the cursor forward by the specified number of     columns without changing lines. If the cursor is already in the     rightmost column, ANSI.SYS ignores this sequence.  ESC[PnD     Cursor Backward: Moves the cursor back by the specified number of     columns without changing lines. If the cursor is already in the leftmost     column, ANSI.SYS ignores this sequence.  ESC[s     Save Cursor Position: Saves the current cursor position. You can move     the cursor to the saved cursor position by using the Restore Cursor     Position sequence.  ESC[u     Restore Cursor Position: Returns the cursor to the position stored     by the Save Cursor Position sequence.  ESC[2J     Erase Display: Clears the screen and moves the cursor to the home     position (line 0, column 0).  ESC[K     Erase Line: Clears all characters from the cursor position to the     end of the line (including the character at the cursor position).  ESC[Ps;...;Psm     Set Graphics Mode: Calls the graphics functions specified by the     following values. These specified functions remain active until the next     occurrence of this escape sequence. Graphics mode changes the colors and     attributes of text (such as bold and underline) displayed on the     screen. ……

user: user-4
content: ANSI转义序列，很多类unix的终端，包括linux控制台都解释ANSI转义序列，转义符就是ESC，ASCII码是0x1b，比如Esc[Line;Columnf就表示移动光标到(Line,Column)的位置。而你printf打印的字符串正是这个命令，其中0x1B正是 ESC的ASCII码。

user: user-5
content: 不懂，mark。

user: user-6
content: 只是特定控制台下，这串字会被视为光标命令，同c还是printf关系不大...
user-0 提问: scanf的空格问题

回复:
user: user-0
content: 引用 6 楼 truelance 的回复:当然是空格吸收掉回车. 而且一个空格可以吸收掉连续的多个空格/Tab/回车. 谢谢我明白了！

user: user-1
content: 当然是空格吸收掉回车. 而且一个空格可以吸收掉连续的多个空格/Tab/回车.

user: user-0
content: 引用 3 楼 truelance 的回复:C11标准7.21.6.2.5 A directive composed of white-space character(s) is executed by reading input up to the first non-white-space character (which remains unread), or until no more characters can be read. fscanf的格式串中有空格的话,就会跳过所有空字符(空格,tab键,回车)  如果格式串中没有空格, 则%c会读入任意字符, 参见c11标准7.21.6.2.8 Input white-space characters (as specified by the isspace function) are skipped, unless the specification includes a [, c, or n specifier. 这么说，就不是空格吸收掉了回车键咯？

user: user-2
content: 引用 3 楼 truelance 的回复:C11标准7.21.6.2.5 A directive composed of white-space character(s) is executed by reading input up to the first non-white-space character (which remains unread), or until no more characters can be read. fscanf的格式串中有空格的话,就会跳过所有空字符(空格,tab键,回车)  如果格式串中没有空格, 则%c会读入任意字符, 参见c11标准7.21.6.2.8 Input white-space characters (as specified by the isspace function) are skipped, unless the specification includes a [, c, or n specifier. +1

user: user-1
content: C11标准7.21.6.2.5 A directive composed of white-space character(s) is executed by reading input up to the first non-white-space character (which remains unread), or until no more characters can be read. fscanf的格式串中有空格的话,就会跳过所有空字符(空格,tab键,回车)  如果格式串中没有空格, 则%c会读入任意字符, 参见c11标准7.21.6.2.8 Input white-space characters (as specified by the isspace function) are skipped, unless the specification includes a [, c, or n specifier.

user: user-0
content: 引用 1 楼 user-2 的回复:scanf()函数从输入流缓冲区中读取值的，而读取时遇到回车(\n)而结束的。带空格的scanf(" %c")表示要从输入流缓冲区读两个字符，一个给空格，一个给%c。为什么加空格呢，是因为回车符(\n)也在输入流缓冲区中，所以将\n赋值给空格，以让%c被正确赋值。否则，不加空格，回车符\n会被赋值给%c。 我现在输入的时候改成，输入空格了，理应上来说，我输入空格+字符+回车，回车应该会被下一次循环的空格吸收掉，但是为什么结果不会有问题呢？

user: user-2
content: scanf()函数从输入流缓冲区中读取值的，而读取时遇到回车(\n)而结束的。带空格的scanf(" %c")表示要从输入流缓冲区读两个字符，一个给空格，一个给%c。为什么加空格呢，是因为回车符(\n)也在输入流缓冲区中，所以将\n赋值给空格，以让%c被正确赋值。否则，不加空格，回车符\n会被赋值给%c。
user-0 提问: c课程设计结文文档

回复:
user: user-1
content: lz你们学院难道没有课程设计模板吗

user: user-2
content: 百度一下应该有吧，比如：http://www.docin.com/p-439475698.html

user: user-3
content: 这可能真的要问老师了，看看老师的要求是什么样的
user-0 提问: 对任意输入的一个字符进行加密 然后解密 输出加密解密的结果

回复:
user: user-1
content: 没有实际意义的加解密。密码学最最基础的示例。  char encrypt_decryption(char ch, char key) { 	return ch ^ key; }  int main() {	 	unsigned char key = 9;//密钥 	char ch = getchar(); 	fflush(stdin); 	printf_s("原文:%c\n",ch);  	char encrypt_result = encrypt_decryption(ch, key);  	printf_s("加密后结果:%c\n",encrypt_result);  	char decryption_result = encrypt_decryption(encrypt_result,key); 	printf_s("解密原文:%c", decryption_result);  	return 0;  }

user: user-2
content: 简单的加密就简单的加减一个定值就可以了

user: user-3
content: char  chx=0;  //原始字符 char  chy=0;  //加密后的字符 char  chz=0;  //解密后的字符  printf("请输入1个字符,手抖输多了的是王八蛋:"); scanf("%c",&chx);  chy=chx^0xAA;   //加密 chz=chy^0xAA;   //解密  printf("原始字符是:%c\n",chx); printf("加密后字符变成了:%c\n",chy); printf("解密后字符变成了:%c\n",chz);
user-0 提问: 请教个移位<<问题

回复:
user: user-1
content: 用对数函数。  引用 楼主 u013390375 的回复:比如，  	DWORD a = 8; 	DWORD b =1<<a;  这样b =256  二进制是100000000（后面a个0）   反过来推算：已知b=256,怎么求a啊？

user: user-2
content: DWORD b=256 DWORD a=0;  while(b>>1) a++;

user: user-3
content: __asm { 	bsf eax,b 	mov a,eax }

user: user-4
content: 1）查表 2）循环判断
user-0 提问: 关于递归的问题

回复:
user: user-1
content: 没有什么问题，就是if少了个等号

user: user-2
content: 第推公式 S1 =1       //n=1 Sn = Sn-1   //n=2,3,4,......  函数 int sum(int n) {     if(n = 1)        return 1;     else         return sum(n - 1)+ n; }  S-->sum n-->n  就是一个简单的替换。 递归训练的时候，可以这么做，不过写代码时，不要这么干 这种简单的递推关系，没有必要递归
user-0 提问: 结构体的定义到底是怎么样的？

回复:
user: user-1
content: #include <stdio.h>  typedef struct AA{ 	int val1; }A;//A是变量类型，相当于int,double...  struct BB{ 	int val2; }b;//b是变量，可以直接使用  int main() { 	A a;//由于A只是一个类型，所以必须先声明一个类型为A的变量a;等同于struct AA a; 	a.val1=1;  	b.val2=2;//b是变量，  	return 0; }

user: user-2
content: typedef struct s { }T; // 等价于 struct s { }; typedef struct s T; 至于如何理解，如果你知道typedef是啥，那就没什么可理解的了。
user-0 提问: 我应该深入学习C语言还是开始学习Java   求指教

回复:
user: user-1
content: 引用 8 楼 SKATE11 的回复:学C吧 以后的数据结构课程 大都用C来实现   java没有指针我不知道有些数据结构是怎么实现的 不一样的，Java这种重视开发的语言，不需要去了解数据结构是怎么实现的，连一般自己打造容器的机会都比较少。大部分情况下，标准库里的容器都已经够用了。  至于Java里的指针，肯定是有的，只不过被内部隐藏了，外界（开发者）不需要知道。Java这种语言都是用class来实现的，说白了就是C++的引用机制。具体的找本数据结构的书看看就知道了。

user: user-2
content: 学C吧 以后的数据结构课程 大都用C来实现   java没有指针我不知道有些数据结构是怎么实现的

user: user-0
content: 引用 6 楼 xiao3404 的回复:java是这几年的趋势，java类的岗位比较多，但相对工资会差那么点，c类工作相比。。。 c语言相对有点难学而已，对应的工资高点，这只是一般情况。。。。。。 其实学java还是学c，与自己的规划有关，毕竟两者的应用领域不同。希望对你有点帮助 我才大一 对于以哪个语言为方向还没想过、 只是想能多学一点、 谢谢前辈指教

user: user-3
content: 这两个在不同领域，你得考虑你想在什么领域下发展。。

user: user-0
content: 引用 11 楼 max_min_ 的回复:http://download.csdn.net/detail/max_min_/6333711 把谭老师的书丢啦，用这本，上面的例程都自己动手敲敲！ 有了c语言基础的话，上手java就比较快！ 惊现版主 受宠若惊  这本书买了、最近在考试 打算寒假了 寒假好好静下心研究研究

user: user-4
content: http://download.csdn.net/detail/max_min_/6333711 把谭老师的书丢啦，用这本，上面的例程都自己动手敲敲！ 有了c语言基础的话，上手java就比较快！

user: user-5
content: 学c语言看《The C Programming Language》第二版，绝对经典。

user: user-6
content: java是这几年的趋势，java类的岗位比较多，但相对工资会差那么点，c类工作相比。。。 c语言相对有点难学而已，对应的工资高点，这只是一般情况。。。。。。 其实学java还是学c，与自己的规划有关，毕竟两者的应用领域不同。希望对你有点帮助

user: user-0
content: 引用 4 楼 baichi4141 的回复:[quote=引用 2 楼 u013389825 的回复:] [quote=引用 1 楼 baichi4141 的回复:] 说得好像专业课你敢不学似的…… 要专精的话，哪个都可以  这种水平的C语言开始学习JAVA会不会很难[/quote] java和c除了一些关键字相同之外，几乎完全不同 如果你的C语言水平很好，反而可能会在学习java时有一定干扰  当然，一个优秀的程序员应该对两者都很熟悉，他山之石可以攻玉嘛 但大多数程序员都只能精通其中一方面，因为一个大脑难以南辕北辙[/quote] 如果寒假开始学习java  看尚学堂的视屏怎么样呢  大婶求推荐几本好的入门书籍

user: user-7
content: 引用 2 楼 u013389825 的回复:[quote=引用 1 楼 baichi4141 的回复:] 说得好像专业课你敢不学似的…… 要专精的话，哪个都可以  这种水平的C语言开始学习JAVA会不会很难[/quote] java和c除了一些关键字相同之外，几乎完全不同 如果你的C语言水平很好，反而可能会在学习java时有一定干扰  当然，一个优秀的程序员应该对两者都很熟悉，他山之石可以攻玉嘛 但大多数程序员都只能精通其中一方面，因为一个大脑难以南辕北辙

user: user-8
content: 引用 2 楼 u013389825 的回复:[quote=引用 1 楼 baichi4141 的回复:] 说得好像专业课你敢不学似的…… 要专精的话，哪个都可以  这种水平的C语言开始学习JAVA会不会很难[/quote] 不会，JAVA不要求操作指针 最初另你感到难的地方会是面向对象，多态，继承

user: user-0
content: 引用 1 楼 baichi4141 的回复:说得好像专业课你敢不学似的…… 要专精的话，哪个都可以  这种水平的C语言开始学习JAVA会不会很难

user: user-7
content: 说得好像专业课你敢不学似的…… 要专精的话，哪个都可以
user-0 提问: 看看这段代码，为什么输出结果会是这样的啊？

回复:
user: user-1
content: 首先，你没有对t赋值！！！！而且t也没有赋初值！这样的话t变量在内存中的数值就会飘忽不定！   #include<stdio.h>   /** 输出: 2003778602 **/ int main() {     int i,a[1],t;     i=0;     t = 2003778602;     printf("%d\n",t);     return 0; }         /** 输出: 1 **/ int main() {     int i,t;     i=0;     t = 1;     printf("%d",t);     return 0; }           /** 输出: 0 **/ int main() {     int t;     t = 0;     printf("%d",t);     return 0; }   可以弱弱说一句吗？你的代码里面i和数组a[i]没用啊

user: user-2
content: 误解大家的意思了  引用 11 楼 lin5161678 的回复:[quote=引用 10 楼 u011569364 的回复:] 不是随机的吧，是分配给t的内存里原来的数据。PS:纠结这个问题真的很无聊。大家的随机表达的就是这个意思  的确是t的内存存放的数据  但是这个数据对程序员来说是不可控的  和随机没什么区别[/quote]

user: user-3
content: 引用 10 楼 u011569364 的回复:不是随机的吧，是分配给t的内存里原来的数据。PS:纠结这个问题真的很无聊。大家的随机表达的就是这个意思  的确是t的内存存放的数据  但是这个数据对程序员来说是不可控的  和随机没什么区别

user: user-2
content: 不是随机的吧，是分配给t的内存里原来的数据。PS:纠结这个问题真的很无聊。

user: user-4
content: 这个我也试了一下，不过我这里 三个全是随机数！ 所以说 这个问题没有什么意思！

user: user-5
content: 引用 2 楼 u013078986 的回复:[quote=引用 1 楼 user-11 的回复:] 与编译器有关 不是，我三段代码是在同一个编译器下运行的[/quote] 你把这3个代码都换个编译器，结果就和这个不同了

user: user-6

user: user-7
content: 引用 4 楼 therry_ding 的回复:因为你没有初始化变量，变量所指向的内存是个垃圾数据，什么都有可能，所以会输出不同的值。 +1，引用未初始化变量是未定义行为

user: user-8
content: 没啥意思，lz不用纠结于这个问题

user: user-9
content: 因为你没有初始化变量，变量所指向的内存是个垃圾数据，什么都有可能，所以会输出不同的值。

user: user-10
content: t没有初始化，也就是没有负值，当你要输出t时，系统会随机产生一个整数输出

user: user-0
content: 引用 1 楼 user-11 的回复:与编译器有关 不是，我三段代码是在同一个编译器下运行的

user: user-11
content: 与编译器有关
user-0 提问: *************** 有关变长数组 *******************

回复:
user: user-0
content: 引用 7 楼 taodm 的回复:能给的建议是：几乎永远不要使用变长数组。 尤其你这样业余玩票的，只能使用C89标准语法。  谢谢你的建议。另外编译器正确实现c11标准的变长数组，为什么不要用呢？

user: user-1
content: 能给的建议是：几乎永远不要使用变长数组。 尤其你这样业余玩票的，只能使用C89标准语法。

user: user-0
content: 好像都没有回答的我问题啊。

user: user-0
content: 引用 4 楼 gz_qmc 的回复:楼主 不是我说你  不学汇编 真的是你们的遗憾  你追求了半天 我就不信电脑就凭空生出个变长数组功能指令来 编译最后还是要转成定长数组加上一些灵活处理的代码 写编译器那家伙 他写的数组处理代码就一定比你自己写的好吗?  你宁愿花10倍的时间去追求那些东西 何不花1倍的时间用熟数据结构呢?  感谢回复，我的主要工作是开发web应用，学c只是个人爱好。 你也知道，你学会一门语言，如果超过1个月不用，就会忘记20%左右，再过一段时间不用，忘记的会更多。 平时我使用高级语言，用不到汇编，但并不说明汇编不重要。

user: user-2
content: 楼主 不是我说你  不学汇编 真的是你们的遗憾  你追求了半天 我就不信电脑就凭空生出个变长数组功能指令来 编译最后还是要转成定长数组加上一些灵活处理的代码 写编译器那家伙 他写的数组处理代码就一定比你自己写的好吗?  你宁愿花10倍的时间去追求那些东西 何不花1倍的时间用熟数据结构呢?

user: user-3
content: IDE是IDE，编译器是编译器。

user: user-0
content: 引用 1 楼 q745401990 的回复:我一般用c/c++来练习数据结构和算法，用的编译器是VC++ 6.0和dev-cpp，做开发的话，开发需要什么语言和编译器就用什么...  楼主没有必要纠结IDE，和某些变长或者不变长之类的，你刚说的即使它不是变长的，我依旧可以用malloc来开辟......  感谢回复 ，我的看法是新标准的制定就了为了弥补老标准的不足，而且可以提供更好的一些解决相同问题的更好方法

user: user-4
content: 我一般用c/c++来练习数据结构和算法，用的编译器是VC++ 6.0和dev-cpp，做开发的话，开发需要什么语言和编译器就用什么...  楼主没有必要纠结IDE，和某些变长或者不变长之类的，你刚说的即使它不是变长的，我依旧可以用malloc来开辟......