Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 关于文件的

回复:
user: user-1
content: gets(str);       fprintf(fp,"%s\n",str);//后加\n即可       printf("continue?");

user: user-2
content: 用 \r\n 代替 \n

user: user-3
content: #include <stdio.h> int main() {     int i, flag;     char str[80], c;     FILE*fp;     fp = fopen("text", "w");     flag = 1;      while (flag == 1) {         printf("input string:\n");         gets(str);         fprintf(fp, "%s\n", str);         printf("continue?");         c = getchar();         if ((c == 'N') || (c == 'n'))             flag = 0;         getchar();     }     fclose(fp);     fp = fopen("text", "r");     while (fscanf(fp, "%s", str) != EOF) {         for (i = 0; str[i] != '\0'; i++)             if ((str[i] >= 'a') && (str[i] <= 'z'))                 str[i] -= 32;         printf("%s\n", str);     }     fclose(fp);     return 0; }

user: user-0
content: 不行哦！输入多个字符串最后会一起输出没有换行，但一个字符串中存在空格就会每隔一个空格换行一次。

user: user-4
content: 好像没啥问题啊

user: user-5
content: 试试 \r\n
user-0 提问: 关于汉诺塔用递归方法求解的问题

回复:
user: user-0
content: 谢谢版主，我能弄懂

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

回复:
user: user-1
content: 程序功能应该是摘哦出年龄最大的人，并显示。程序修改如下 #define N 4 #include "stdio.h"   struct man {      char name[20];     int age; }person[N]={"li",18,"wang",19,"zhang",32,"sun",22};   main() {     struct man *q,*p;     int i,m=0;     p=person;     q=person;     for(i=0;i<N;i++)     {         if(m<p->age)        {             q=p++;            m=q->age;        }     }     if(m!=0)printf("%s,%d",q->name,q->age); }

user: user-2
content: static struct man {     char name[20];  int age; } person[N] = {     {    "li"    ,       18},     {    "wang"  ,       19},     {    "zhang" ,       32},     {    "sun"   ,       22}, };  http://bbs.csdn.net/topics/380157851

user: user-3
content: 想输粗年龄最大的人吧，不要用累加了，直接指向person[i]

user: user-4
content: #include <stdio.h> #define N 4  static struct man {     char name[20];     int age; } person[N] = { {"li",18}, {"wang",19}, {"zhang",32}, {"sun",22} };  int main() {     struct man *q, *p;     int i, m = 0;      p = person;      for (i = 0; i < N; ++i, ++p) {         if (m < p->age) {             q = p;             m = q->age;         }     }      printf("%s,%d\n", q->name, q->age);     return 0; }  拜托，包含stdio.h用尖括号好不好？main函数别写成这样好不好？结构体初始化别太省事了，好不好？

user: user-5
content: 打印 年龄最大的人   如下改   #define N 4 #include "stdio.h"  struct man {      char name[20];     int age; }person[N]={"li",18,"wang",19,"zhang",32,"sun",22};  void main1() {     struct man *q,*p;     int i,m=0;     p=person;     q=person;     for(i=0;i<N;i++)     {         if(m<p->age) 		{ 			m=p->age; 			q=p++;         }      	} 	TRACE("%s,%d\n",q->name,q->age); }  输出zhang,32

user: user-0
content: #define N 4 #include "stdio.h"  struct man {  	char name[20]; 	int age; }person[N]={"li",18,"wang",19,"zhang",32,"sun",22};  main() { 	struct man *q,*p; 	int i,m=0; 	p=person; 	for(i=0;i<N;i++) 	{ 		if(m<p->age) 		q=p++; 		m=q->age; 	} 	printf("%s,%d",q->name,q->age); }     程序有点问题 老师发的让改的代码是这个

user: user-6
content: #define N 4 #include "stdio.h"  struct man {  	char name[20]; 	int age; }person[N]={"li",18,"wang",19,"zhang",32,"sun",22};  main() { 	struct man *q,*p; 	int i,m=0; 	p=person; 	q=person; 	for(i=0;i<N;i++) 	{ 		if(m<p->age) 		{ 			q=p++; 			m=q->age; 		} 	} 	printf("%s,%d",q->name,q->age); }    m=q->age; 放到if里面吧

user: user-7
content: 楼上那样改是不行的，有逻辑错误。比如person[N]={"li",18,"wang",11,"zhang",19,"sun",42};就得不出答案 你应该循环N次，每次都应该让m和p[i].age进行比较，而不是p->age，因为一旦进不了if循环，那么p就一直指着当前元素(后面的元素根本没有比较到)  #define N 4 #include "stdio.h"  struct man {  	char name[20]; 	int age; }person[N]={"li",18,"wang",19,"zhang",32,"sun",22};  void main() { 	struct man *q,*p; 	int i,m=0; 	p=person; 	for(i=0;i<N;i++) 	{ 		if(m<p[i].age) 		{ 			q=&p[i]; 			m=q->age; 		} 	} 	printf("%s,%d",q->name,q->age); }
user-0 提问: 为什么判断是否为偶数的第一个处理子程序中0没有输出？

回复:
user: user-1
content: isEven()返回的是m，所以m是0的时候也就和奇数一样返回0了。 而is()返回的就很明确，不是1就是0

user: user-0
content: 明白了，谢谢你们

user: user-2
content: isEven(i)中，i=0,函数返回值是0，判断条件为假，所以0不会输出； is(i)中i=0,return m%2 == 0?1:0; 返回的是1，判断条件为真，所以0会输出。
user-0 提问: 新手求教：win32 api游戏设计关于定时器settimer的问题

回复:
user: user-0
content: 谢谢大家我的问题已经解决了

user: user-1
content: 漏消息映射？

user: user-1
content: OnTimer ?

user: user-2
content: 检查SetTimer的返回值

user: user-0
content: 不是，那些动作我都做了，我是说定时器它好像没有起到该有的作用，就是放下炸弹后，3秒爆炸，这些动作我敢保证没错

user: user-3
content: Setboom 仅设置了变量，你要做的是爆炸处理怎么根据这个变量做动作
user-0 提问: c语言中的指数函数输出

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <string.h> void trim0(char *s) { //  2.000000e-006→2e-6 //  1.234560e+002→1.23456e2 //  1.234560e+005→1.23456e5 //  1.000000e+000→1e0 // -1.000000e+000→-1e0 // -1.002000e+002→-1.002e2     char x[40];     char E[2];     int z,e,i;     if (4==sscanf(s,"%d.%39[0-9]%1[Ee]%4d",&z,x,E,&e)) {         i=strlen(x)-1;         while (1) {             if ('0'==x[i]) {                 x[i]=0;                 if (i<=0) break;                 i--;             } else break;         }         if (i<=0) {             sprintf(s,"%de%d",z,e);         } else {             sprintf(s,"%d.%se%d",z,x,e);         }     } } int main() {     char s[40];     double d;      while (1) {         printf("Input a float number(0 to exit):");         fflush(stdout);         rewind(stdin);         if (1==scanf("%lf",&d)) {             if (0.0==d) break;             sprintf(s,"%e",d);             trim0(s);             printf("%s\n",s);         }     }     return 0; } //Input a float number(0 to exit):0.000002 //2e-6 //Input a float number(0 to exit):123.456 //1.23456e2 //Input a float number(0 to exit):123456 //1.23456e5 //Input a float number(0 to exit):1 //1e0 //Input a float number(0 to exit):-1 //-1e0 //Input a float number(0 to exit):-100.2 //-1.002e2 //Input a float number(0 to exit):0 //

user: user-2
content: 我vs2010上试了下，机器输出是2e-006。

user: user-1
content: sprintf输出到字符串，再自写一小段程序去掉多余的0
user-0 提问: 老师给的一个产生随机数的程序，看不太懂，大神解释下。。

回复:
user: user-0
content: 感谢大伙，问题解决。。谢谢谢谢

user: user-1
content: 我不知道你的 seed 哪里来的，我使用参数了。

user: user-1
content: function random: real:  begin   Seed: =125.0*(seed+1.0)         Seed: =Seed-8192.0*trunc (seed/8192)         random: = (Seed+0.5)/8192  end;  float random(int seed) { float Seed; Seed = 125.0 * (seed + 1.0); Seed -= 8192.0 * (int)(seed / 8192); return (Seed + 0.5) / 8192; }

user: user-2
content: Pascal   begin 约等于 C的｛  end  约等于C的｝ 函数返回值类型定义在后面 real 换成 float   或者 double 赋值:= 对应 = 想等比较 = 对应== /对应 浮点除法 div 对应整除 =在定义类型，常量的时候相当于 typedef ,=, trunc 是截断取整；正数的话， 对应 c 的floor 其他自行解决吧

user: user-0
content: 我去。。那您能帮我把它改成C代码么，我不会Pascal

user: user-3
content: 这是Pascal代码，而且行尾缺少分号。
user-0 提问: C程序顺序表操作求帮助

回复:
user: user-0
content: 好的，明白了，谢了，分给你。

user: user-1
content: 如果结构体内有指针成员，大部分情况下你需要为这个指针成员分配内存 因为你定义的结构体成员申请到的内存给指针成员的仅仅只是4个字节（用来存放指针本身的） 而指针成员指向的内存必须自己手动申请或者赋值才行

user: user-0
content: 真的是这样啊，程序已经可以运行了，非常感谢！ 我本以为只要结构体内部指针分配内存就行了，没想到SqList结构体指针还要分配内存。 顺便问下，怎么理解SqList结构体内部指针分配的内存和SqList结构指针分配的内存之间的关系呢， 主要就是对结构体这个类型内部存在指针变量的理解，谢谢了。ps：第一次在CS上提问，很快就 得到回复，十分感谢。

user: user-1
content: 因为你没有给main函数里的La分配空间。 SqList *La这样写，La是指向一块未知区域的内存，然后执行InitList_Sq函数， L->data=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));试图向未知区域写入值，自然就出现异常了。 改成这样： SqList *La = (SqList *)malloc(sizeof(SqList ));
user-0 提问: 数据结构二叉搜索树问题

回复:
user: user-0
content: 大家帮帮忙

user: user-1
content: CreateList();//初始化顺序表 void p(BinTree t)//遍历创建好的二叉搜索树，二叉搜索树结构体包括Stu 定义的Data,Left,Right { //int i = 0; static j=0; if (t) { p(t->Right,);//先访问右子树 //e.score = t->Data.score;//把当前节点的内容赋给e，Stu 是一个结构体，包括学生学号、姓名、成绩 //s->con[i].score = e.score; //i++; P.con[j].score = t->Data.score; strcpy(P.con[j].name, t->Data.name); strcpy(P.con[j].num, t->Data.num); j++; p(t->Left); P.con[j].score = t->Data.score; strcpy(P.con[j].name, t->Data.name); strcpy(P.con[j].num, t->Data.num); j++; }  }

user: user-2
content: 可以去我的博客看看二叉搜索树的类的建立和遍历

user: user-3
content: 你这样贴了一段别人很难看出错误。 P.con[j].score = e.score;出错的话，你自己检查一下P有没有分配空间，它的成员变量con有没有分配空间，j是不是太大越界了 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。
user-0 提问: 在VMware模拟鼠标没反应

回复:
user: user-0
content: 引用 3 楼 zhoujielunzhimi 的回复:#1说的很对。 另：在vmware中，SetCursorPos失效。因为vmware需要掌控cursor位置（我们在vmware中移动鼠标，光标不会跑到vmware外面）是的，谢谢，我再慢慢找解决办法吧

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:添加消息循环： 将Sleep(1000); 替换为： MSG msg; int i; for (i=0;i<10;i++) {         Sleep(100);         if (GetMessage(&msg,NULL,0,0)) {             TranslateMessage(&msg);             DispatchMessage(&msg);         } }试过了，也没用，不过还是谢谢大神，在虚拟机里面就SetCursorpos没用，其他mouse_event,Keybord_event都正常

user: user-0
content: 引用 1 楼 user-3 的回复:在学习win32 API？ 创建的是：Win32 -->win32控制台应用程序？ 建议将Sleep的时间改长一点。  典型的windows程序，需要创建窗口程序，消息循环之。建议创建win32-->win32项目看看。 有一本书挺不错的“VC++技术内幕”，个人推荐。  如果是学习c++语法，不要先扎进win32程序开发，可先看看 “C++ Primer”。创建的就是空项目，Sleep改长也没用，试了创建win32项目，一堆代码看不懂，不知道把代码放哪里，我是看视频学的，尹成老师讲的C基础

user: user-1
content: 添加消息循环： 将Sleep(1000); 替换为： MSG msg; int i; for (i=0;i<10;i++) {         Sleep(100);         if (GetMessage(&msg,NULL,0,0)) {             TranslateMessage(&msg);             DispatchMessage(&msg);         } }

user: user-2
content: #1说的很对。 另：在vmware中，SetCursorPos失效。因为vmware需要掌控cursor位置（我们在vmware中移动鼠标，光标不会跑到vmware外面）

user: user-3
content: 在学习win32 API？ 创建的是：Win32 -->win32控制台应用程序？ 建议将Sleep的时间改长一点。  典型的windows程序，需要创建窗口程序，消息循环之。建议创建win32-->win32项目看看。 有一本书挺不错的“VC++技术内幕”，个人推荐。  如果是学习c++语法，不要先扎进win32程序开发，可先看看 “C++ Primer”。
user-0 提问: 关于C语言全局资源的问题

回复:
user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:[quote=引用 2 楼 SXJIAKE 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:]WSAGetLastError 他这个应该不是 Windows 的，没有 WSAStartup...[/quote] errno[/quote]  谢谢，先去试试

user: user-0
content: 引用 4 楼 paschen 的回复:用WSAGetLastError函数判断失败原因  谢谢版主，不过这个问题是在linux环境下，redhat6。

user: user-1
content: WSAGetLastError The Windows Sockets WSAGetLastError function gets the error status for the last operation that failed.  int  WSAGetLastError (void); Remarks The WSAGetLastError function returns the last network error that occurred. When a particular Windows Sockets function indicates that an error has occurred, this function should be called to retrieve the appropriate error code. This error code can be different from the error code obtained from getsockopt SO_ERROR, which is socket-specific since WSAGetLastError is for all thread-specific sockets.  A successful function call, or a call to WSAGetLastError, does not reset the error code. To reset the error code, use the WSASetLastError function call with iError set to zero. A getsockopt SO_ERROR also resets the error code to zero.  The WSAGetLastError function should not be used to check for an error value on receipt of an asynchronous message. In this case, the error value is passed in the lParam field of the message, and this can differ from the value returned by WSAGetLastError.  Return Values The return value indicates the error code for this thread's last Windows Sockets operation that failed.  QuickInfo   Windows NT: Yes   Windows: Yes   Windows CE: Use version 1.0 and later.   Header: Declared in winsock2.h.   Import Library: Link with ws2_32.lib.  See Also getsockopt, WSASetLastError

user: user-2
content: 用WSAGetLastError函数判断失败原因

user: user-1
content: 引用 2 楼 SXJIAKE 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:]WSAGetLastError 他这个应该不是 Windows 的，没有 WSAStartup...[/quote] errno

user: user-3
content: 引用 1 楼 zhao4zhong1 的回复:WSAGetLastError 他这个应该不是 Windows 的，没有 WSAStartup...
user-0 提问: Qt for iOS 组播接收真机收不到

回复:
user: user-1
content: 楼主,我也是同样的问题,没解决

user: user-0
content: 自己顶下，等解决这个问题以后，我把如果搭配qt for ios的完整过程写成一个帖子吧，网上的不是很完善。对于从没接触过mac系统的人来说，摸索起来好麻烦
user-0 提问: 关于音频可视化的实现

回复:
user: user-0
content: 引用 1 楼 user-2 的回复:FFT 转频域啊, 网上代码太多...  暂时还没找到具体代码, 不过知道ffmpeg的库可以做fft,  能不能解释一下, 转了频域后再怎么做, 因为最终要显示是个频率的振幅吧?

user: user-1
content: 推荐使用NCTAudioStudio控件。

user: user-2
content: FFT 转频域啊, 网上代码太多...
user-0 提问: 大神帮看看这个算偏题吗？

回复:
user: user-1
content: 实现了要求的功能就不偏题，至于是MFC还是VCL做界面不是主要的，甚至不是必要的（但肯定比控制台界面加分）

user: user-2
content: 不算

user: user-3
content: 为什么不问问你们老师呢，一般毕设不是自己可以自己选题吗，哪怕老师定的题目也可以商讨改动。个人觉得是可以，但我不敢保证你们老师心里到底怎么想的
user-0 提问: linux read函数

回复:
user: user-1
content: 写个while循环，没有数据就持续读

user: user-2
content: 文件本来缺省就阻塞的啊.   你要等着后来有人写了再读就在个循环里 select 有数据再读呗...

user: user-0
content: 没有办法 设置堵塞么!

user: user-3
content: getchar（）； 只有当你在键盘上按一个字符时程序才会接着向下走 或者你先判断一下这个文件是不是空的，非空再继续
user-0 提问: 用C语言编写雅瑟夫问题。。。对！又是雅瑟夫。。。

回复:
user: user-1
content: 就是malloc和free。

user: user-2
content: 数组啊，因为负数编号不会出现，凡是出列的，置为 -1 或者 该书的相反数 即可 把数组当成循环队列用，其中 负数跳过（认为不是队列的成员即可）
user-0 提问: gtk有没有ip地址输入控件？

回复:
user: user-0
content: 能否说得详细点，刚开始学习GTK，谢谢啦

user: user-0
content: 已经搞定了，谢谢这位大神。

user: user-1
content: CHAPTER 11 Creating Custom Widgets...... Deriving New Widgets........ Creating the MyIPAddress.......

user: user-0
content: 有没有哪位大神知道，谢谢啦
user-0 提问: 假设有个1000万或者更多数据的数组，内容无序，如何快速的确定是否存在某个数？

回复:
user: user-1
content: 先把数组由小到大排序，然后从n/2处与判断值比较，如果大，则从右边再n/2，以此内推，主要是利用二分法的思想

user: user-0
content: 谢谢大家，是我没有问清楚面试官的意思，到底是 数组组织还是查找的问题

user: user-2
content: 引用 3 楼 mickey736 的回复:建立 哈希表 也需要遍历一次数组吧？ 题目是考的是如何对数据进行索引，以便更加高效地查询；而不是只叫你从这堆无序的数据里面查一个数，如果是真是这样的话，这道题还有考的必要吗？

user: user-3
content: 无序，一次遍历应该是少不了的。遇到就退出，感觉很好了  是不是考官没有把条件全部说出来呢？有其他隐藏的机关？

user: user-4
content: 如果这些数据只是放在一个数组里面，并且你还只是查找这一次的话。 我觉得没有其他好方法，肯定是线性查询，一个一个的找。  反过来，我觉得这道题目是考你怎么组织这些数据，可能在组织数据的时候 需要更加花时间，但是以后多次查询就可以更加高效了。  那么可以使用的方法非常多，常见的方法有Hash法、Bit-map法、Bloom filter法、数据库优化法、倒排索引法、外排序法、Trie树、堆、双层桶法以及MapReduce法。

user: user-0
content: 建立 哈希表 也需要遍历一次数组吧？

user: user-2
content: 先做一次哈希，再查找

user: user-5
content: 是位图吗？应该主要是因为数据大的问题，存不下吧？
user-0 提问: 关于常见哈希函数的疑问，求大神解惑！！

回复:
user: user-1
content: 我认为不仅仅是要让index为正数,还要在计算散列时h(k) = k mod m中的k尽量分散,减少碰撞的发生吧

user: user-2
content: 本质是去除hashcode的符号

user: user-0
content: 引用 6 楼 qq423399099 的回复:第一个问题：是的，如果第一位大于7，意味着二进制第一位相与以后可能会出现1 第二个问题：malloc只是申请一片连续的内存空间，主要和你用什么来接收这个申请的内存首地址有关  OK，了解了。多谢

user: user-3
content: 第一个问题：是的，如果第一位大于7，意味着二进制第一位相与以后可能会出现1 第二个问题：malloc只是申请一片连续的内存空间，主要和你用什么来接收这个申请的内存首地址有关

user: user-0
content: 引用 2 楼 qq423399099 的回复:关键在于一个对象的 HashCode可以为负数，这样操作后可以保证它为一个正整数 0x7FFFFFFF is 0111 1111 1111 1111 1111 1111 1111 1111 : all 1 except the sign bit. (hash & 0x7FFFFFFF) 将会得到一个正整数 因为你的hash是要作为数组的index的，这样可以避免出现下标为负数而出现异常  在这里顺便再问你一个问题，就是对于动态数组形式比如说：  int **arr;  这种形式可以解释成是 int  型的二维数组，也可以解释成是 int * 型的一维数组，那么在 c 中是怎么分辨到底应该解释成那种形式呢？是根据 malloc 的时候 sizeof(类型) 这里确定吗？

user: user-0
content: 引用 2 楼 qq423399099 的回复:关键在于一个对象的 HashCode可以为负数，这样操作后可以保证它为一个正整数 0x7FFFFFFF is 0111 1111 1111 1111 1111 1111 1111 1111 : all 1 except the sign bit. (hash & 0x7FFFFFFF) 将会得到一个正整数 因为你的hash是要作为数组的index的，这样可以避免出现下标为负数而出现异常  引用错了。。。  得到正整数是因为二进制第一位是 0 是吗？ 因为如果第一位大于 7 的话二进制的第一位会变成 1，1 的话同负数进行 & 运算还是负数。

user: user-0
content: 引用 1 楼 user-4 的回复:0x7FFFFFFF 是质数，0xFFFFFFFF 不是  得到正整数是因为二进制第一位是 0 是吗？ 因为如果第一位大于 7 的话二进制的第一位会变成 1，1 的话同负数进行 & 运算还是负数。

user: user-3
content: 关键在于一个对象的 HashCode可以为负数，这样操作后可以保证它为一个正整数 0x7FFFFFFF is 0111 1111 1111 1111 1111 1111 1111 1111 : all 1 except the sign bit. (hash & 0x7FFFFFFF) 将会得到一个正整数 因为你的hash是要作为数组的index的，这样可以避免出现下标为负数而出现异常

user: user-4
content: 0x7FFFFFFF 是质数，0xFFFFFFFF 不是
user-0 提问: 第K极值C语言实现在VC上没有问题，但在OJ上测试出现问题

回复:
user: user-1
content: 你点开你的OJ上有显示错误： error: expected ';', ',' or ')' before '&' token void SelectSort(SqList &L){ ^  Main.c:29:1: error: unknown type name 'bool' bool isPrimeNum(int x)  1.第一个错误是你使用了引用 2.第二个错误是你使用了bool (bool和引用都是C++才有的)

user: user-2
content: Compiler Error。C语言好像没有bool类型。

user: user-0
content: 这样我就明白了，刚刚把引用和bool修改了一下，谢谢大家，看来还是基础不扎实啊

user: user-0
content: http://www.tyvj.cn/Status/1375663

user: user-3
content: 出了什么问题？

user: user-0
content: 对啊，是数组

user: user-4
content: 这里的序列，是数组吗？

user: user-0
content: 补充： 输入格式： 第一行为2个数n，k（含义如上题） 第二行为n个数，表示这个序列  输出格式： 如果m为质数则 第一行为'YES'(没有引号） 第二行为这个数m 否则  第一行为'NO' 第二行为这个数m
user-0 提问: for循环的i不自增，只会0到1，然后1到0

回复:
user: user-1
content: 建议楼主先学会数据断点：#include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }

user: user-0
content: 引用 3 楼 luciferisnotsatan 的回复:values 这个二维数组多大？  谢谢   正如你提出的，数据分配的内存小了

user: user-0
content: 引用 1 楼 qq423399099 的回复:建议贴出完整代码，maybe越界覆盖了你的j的值  谢谢   问题解决了    我申请的数组少了几行，所以在访问数组的时候出现修改别处内存值了    太感谢了   谢谢

user: user-2
content: values 这个二维数组多大？

user: user-0
content: 引用 1 楼 qq423399099 的回复:建议贴出完整代码，maybe越界覆盖了你的j的值

user: user-3
content: 建议贴出完整代码，maybe越界覆盖了你的j的值
user-0 提问: 使用线程时的错误提示Connection is not defined in thread local storage.

回复:
user: user-1
content: 引用 2 楼 u011121708 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] 《Windows核心编程》  楼上,线程内调用API和外部是不一样吗,需要重新 connection[/quote] 如果你能加锁控制多个线程使用同一个连接时不冲突，就可以不重连。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:《Windows核心编程》  楼上,线程内调用API和外部是不一样吗,需要重新 connection

user: user-1
content: 《Windows核心编程》
user-0 提问: c语言函数参数栈的研究

回复:
user: user-0
content: 玩玩么,第一次写个帖子,大概是兴致来了。至于反汇编那种东西,我懒得说了，我自己写的代码反汇编出来自己都不认识,是很操蛋的东西

user: user-1
content: 调用约定 https://msdn.microsoft.com/zh-cn/magazine/9b372w95.aspx

user: user-2
content: 这样就没什么意思了. 还不如找个东西来反汇编,再改,到达自己想要的目的.
user-0 提问: C语言函数调用

回复:
user: user-1
content: 加个默认返回值就好

user: user-0
content: 问题应该是出在jsValue()函数体内，我把函数isTure删了，数组得到的值依然是0。但在1000到2000的范围内，应该是有值（例如：1010）满足条件的。为什么存不到数组a中去呢？找了好久了，哪位帮帮忙解决一下。

user: user-2
content: not all control paths return a value是说你的函数中有的分支没有返回值，你加了那个判断之后，如果流程走不进你的那个if中，函数就没有返回值了。应该在函数的末尾加上返回值的

user: user-1
content: main函数里void jsValue();改成jsValue(); 你写的那个是函数声明  #include <stdio.h> int a[100],cnt=0; /*double pjz1=0.0, pjz2=0.0;*/  void jsValue() { 	int m; 	int x,b,c,d; 	for (m=1000;m<=2000;m++) 	{ 		x=m/1000;   b=m/100%10; 		c=m/10%10;  d=m%10;	//千位数x   百位数b  十位数c 个位数d  		if(x+b==c+d) a[cnt++]=m; 	}	 } void main() { 	int i; 	jsValue(); 	for(i=0;i<100;i++) 		printf("a[%d]=%d\n",i,a[i]); }

user: user-0
content: 引用 6 楼 qq423399099 的回复:数组没有值是因为你main函数里把函数调用写成了声明  void main() { 	int i; 	jsValue(); //void jsValue();是函数声明！！！！！！！！11 	for(i=0;i<100;i++) 		printf("a[%d]=%d\n",i,a[i]); }  好，我看下

user: user-0
content: 引用 3 楼 qq423399099 的回复:加个默认返回值就好  #include <stdio.h> int a[100],cnt=0; /*double pjz1=0.0, pjz2=0.0;*/  void jsValue() { 	int m; 	int x,b,c,d; 	for (m=1000;m<=2000;m++) 	{ 		x=m/1000;   b=m/100%10; 		c=m/10%10;  d=m%10;			//千位数x   百位数b  十位数c 个位数d  		if(x+b==c+d) a[cnt++]=m; 	}		 } void main() { 	int i; 	void jsValue(); 	for(i=0;i<100;i++) 		printf("a[%d]=%d\n",i,a[i]); }  麻烦你看一下，我这样写的，为什么数组a里面还是没有值呢？所有元素为0

user: user-1
content: 数组没有值是因为你main函数里把函数调用写成了声明  void main() { 	int i; 	jsValue(); //void jsValue();是函数声明！！！！！！！！11 	for(i=0;i<100;i++) 		printf("a[%d]=%d\n",i,a[i]); }

user: user-1
content: 引用 4楼我是你的主体 的回复:[quote=引用 3 楼 qq423399099 的回复:] 加个默认返回值就好 加在哪里？怎么加？我是新手。主要问题是数组a中没有数值，问题出在哪里？结构上看没问题啊，我都快被这道题弄疯了。[/quote]照理这个问题一般不会报错的，一般都是给个警告。 你加上if的判断，一旦没有进入if分支，也就没有对应的return语句了。 如果其他函数调用那么此时接收到的返回值就是EAX寄存器里的值，所以应该在最后一行加上return 0  int isTure(int m) { 	int x,b,c,d; 	if(m>=1000&& m<10000)      //加上这一语句，提示not all control paths return a value 	{ 		x=m/1000;   b=m/100%10; 		c=m/10%10;  d=m%10;      //千位数x   百位数b  十位数c 个位数d  		if(x+b==c+d)  return 1; 		else return 0; 	} 	return 0; }

user: user-0
content: 引用 3 楼 qq423399099 的回复:加个默认返回值就好 加在哪里？怎么加？我是新手。主要问题是数组a中没有数值，问题出在哪里？结构上看没问题啊，我都快被这道题弄疯了。
user-0 提问: AT命令拨打电话--AT+CLCC

回复:
user: user-1
content: 好好看AT命令的说明了,一般命令会在后面说有返回信息的.一般的模块也会有一个基本的使用说明的.实在搞不定打电话找厂家他们会告诉你怎么用.

user: user-2
content: https://www.baidu.com/s?wd=AT命令%20呼叫结果
user-0 提问: [求助]输出链表总是开头两个出现乱码 

回复:
user: user-1
content: 都被你free了，输出自然不对了

user: user-2
content: if(c==2) { /*free(p);	*/ break;	 }

user: user-0
content: 引用 1 楼 user-2 的回复:if(c==2) { /*free(p);	*/ break;	 } 解决了 谢谢

user: user-0
content: 引用 2 楼 qq423399099 的回复:都被你free了，输出自然不对了恩恩 是我手贱了  现在改了好了 谢谢。
user-0 提问: Hash存储、查找中Hash表构造方法、冲突率问题

回复:
user: user-1
content: hash的计算应该尽量避免重复，但过程也不要太复杂，否则效率也未必会提高

user: user-2
content: 冲突率就可以简单理解成重复率吧  重复率从原理上说，如果结果为1字节，那么当输入数据超过256种时，必然产生重复。  当输入数据小于256时，也有可能产生重复，这与算法设计有关，真正的算法是由数学证明过的，不是拍脑门想出来的。
user-0 提问: 新人求助

回复:
user: user-1
content: i = j*2.54; 放到后面，在前面的时候，j的值还不确定   #include <stdio.h> int main (void) { 	float i ;  	int j ; 	printf ("请输入身高(厘米)\n"); 	scanf ("%d",&j) ; 	i = j*2.54; 	printf ("你的身高为%f英寸\n",i); 	return 0 ; }

user: user-2
content: i = j*2.54; 这一句应该放在Scanf这句后面

user: user-3
content: 顺序出差了，i=jx2.54 应该放在读取了scanf的后面

user: user-0
content: 在各位都指教下，问题已经解决，多谢各位，好人一生平安！

user: user-4
content: 计算机执行到i = j*2.54;时，j还是未知数的哦，之后你才输入j的值，但i的值已经确定了哦，

user: user-5
content: i，j都没有初始化，就做i = j*2.54;有可能是随机值。

user: user-6
content: 楼主写的这份代码，问题在以下几点，首先，你定义了int j;  j 并未未进行初始化，怎么可以直接进行操作呢，  其次你的j * 2.54应该返回的是double类型的，不应该用float类型进行接收。  虽然不知道你输入了什么值，但是后面的小数点.000000一堆，说明你在程序进行前对于数据类型未进行判断。

user: user-7
content: # include <stdio.h> int main (void) { float i ;  int j ; /*i = j*2.54;*/ printf ("请输入身高(厘米)\n"); scanf ("%d",&j) ; i = j*2.54; printf ("你的身高为%f英寸\n",i); return 0 ;  }

user: user-8
content: 看不出问题在哪，但是我把你的代码精简了一下，结果输出正确  #include<stdio.h> int main() { 	int i = 4 ; 	float ff = (float)(i * 2.50); 	printf ("%f",ff); 	getchar(); }  结果输出  10.000000
user-0 提问: 请问这里的us怎么取

回复:
user: user-0
content: 我是照着这个位段写的。yes yello yes green dashed分别是1 3 1 2 2 那么我以为二进制应该是1011 0000 1010 1000 但是书上给出的二进制是0010 0101 0000 0111

user: user-0
content: 引用 2 楼 qq423399099 的回复:没懂要问啥 不好意思没表达好。我是问us 也就是box.ui_view的二进制，怎么取

user: user-0
content: 引用 1 楼 paschen 的回复:us形参 取自 box.ui_view实参 yes yello yes green dashed分别是 1 3 1 2 2 没说清楚，我是问us 也就是box.ui_view的二进制，怎么取

user: user-1
content: 没懂要问啥

user: user-2
content: us形参 取自 box.ui_view实参

user: user-3
content: Bits序是 未定义的，由编译器自行确定
user-0 提问: read在读取socket的时候为何一直堵塞，如何处理让read读取完数据立即返回。

回复:
user: user-1
content: 设置成 nonblocking 模式啊,  win 下就           unsigned long mode = 1; 	ioctlsocket(sock, FIONBIO, &mode);  Linux 下:    int flags = fcntl(sock, F_GETFL, 0);    flags |= flags|O_NONBLOCK;    fcntl(sock, F_SETFL, flags);

user: user-1
content: 对啊, 你不是要立刻返回么,  返回 -1  , errno == EAGAIN,  EWOULDBLOCK 就是让你等段时间再读啊...   然后你可以 select/poll/epoll  等到有数据到达再去读啊 ...

user: user-0
content: 设置成非阻塞模式，read不到任何东西就会直接返回。    int flags = fcntl(sock, F_GETFL, 0);    flags |= flags|O_NONBLOCK;    fcntl(sock, F_SETFL, flags); 我有尝试，没有解决问题。
user-0 提问: 这个函数怎么写，小白一个，还请大神们多多指教

回复:
user: user-1
content: const char* StrStr(const char *str1, const char *str2) {       assert(NULL != str1 && NULL != str2);                      while(*str1 != '\0')       {           const char *p = str1;           const char *q = str2;           const char *res = NULL;           if(*p == *q)           {                 res = p;                 while(*p && *q && *p++ == *q++)                 ;                                   if(*q == '\0')                       return res;                               }           str1++;       }       return NULL; }

user: user-0
content: 引用 4 楼 paschen的回复:楼主写法没错，如果找到 m 就指向这该位置，否则m为NULL  http://en.cppreference.com/w/c/string/byte/strstr 恩，就是像你这样说的，我搞定了

user: user-2
content: 楼主写法没错，如果找到 m 就指向这该位置，否则m为NULL  http://en.cppreference.com/w/c/string/byte/strstr

user: user-3
content: char *strstr(char *haystack,char *needle) { 	char *p=haystack; 	char *q=needle; 	char *pos; 	while(*p) { 		pos = p; 		while(*p == *q && *q) { p++;q++; } 		if(!*q) return pos; 		else q=needle; 		p++; 	} 	return NULL; }

user: user-0
content: 引用 1 楼 小灸舞的回复:要自己实现？  const char* StrStr(const char *str1, const char *str2) {       assert(NULL != str1 && NULL != str2);                    while(*str1 != '\0')       {           const char *p = str1;           const char *q = str2;           const char *res = NULL;           if(*p == *q)           {                 res = p;                 while(*p && *q && *p++ == *q++)                 ;                                  if(*q == '\0')                       return res;                               }           str1++;       }       return NULL; }   我是想利用strstr函数来查找子串所在的位置

user: user-4
content: 要自己实现？  const char* StrStr(const char *str1, const char *str2) {       assert(NULL != str1 && NULL != str2);                    while(*str1 != '\0')       {           const char *p = str1;           const char *q = str2;           const char *res = NULL;           if(*p == *q)           {                 res = p;                 while(*p && *q && *p++ == *q++)                 ;                                  if(*q == '\0')                       return res;                               }           str1++;       }       return NULL; }
user-0 提问: 保留两位小数的问题。输入一个数，输出却溢出？

回复:
user: user-1
content: 输入改成scanf("%lf", &a); 输出随意。

user: user-2
content: 引用 11 楼 qq_35069633 的回复:[quote=引用 5 楼 qq423399099 的回复:] 你sizeof(float)和sizeof(double)看一下，是不是4字节和8字节 如果是的话，你如果用scanf("%f", &a);那么a这个double变量只被写入了4字节的数据 输出的时候自然就输出一坨垃圾值了也就是说11输入时实际只有一部分。那11具体占多大内存，怎样看，然后选择合适的类型？ [/quote]你定义的double无论在64位还是32位系统都占8B=8*8b

user: user-0
content: 引用 5 楼 qq423399099 的回复:你sizeof(float)和sizeof(double)看一下，是不是4字节和8字节 如果是的话，你如果用scanf("%f", &a);那么a这个double变量只被写入了4字节的数据 输出的时候自然就输出一坨垃圾值了也就是说11输入时实际只有一部分。那11具体占多大内存，怎样看，然后选择合适的类型？

user: user-3
content: "%f" 对应 float  %lf 对应 double

user: user-4
content: 楼主可以看一下不同变量类型所占的内存大小的区别，还是有点用的

user: user-5
content: 1楼正解，很多初学者用double时都按照%f来用，其实是lf，注意是L不是数字1

user: user-6
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-7
content: 你sizeof(float)和sizeof(double)看一下，是不是4字节和8字节 如果是的话，你如果用scanf("%f", &a);那么a这个double变量只被写入了4字节的数据 输出的时候自然就输出一坨垃圾值了

user: user-0
content: 引用 2 楼 qq423399099 的回复:输入改成scanf("%lf", &a); 输出随意。为什么会输出这样的乱码

user: user-0
content: 引用 1 楼 user-8 的回复:%f -> float %lf -> double为什么会输出这样的乱码

user: user-7
content: 输入改成scanf("%lf", &a); 输出随意。

user: user-8
content: %f -> float %lf -> double
user-0 提问: 为什么这个地方exit(1)会被提示 exit was not declared in this scope

回复:
user: user-1
content: I了I了 这个bug把我整懵逼了

user: user-2
content: exit在头文件 <stdlib.h>里  http://en.cppreference.com/w/c/program/exit

user: user-3
content: 加上头文件stdlib.h

user: user-0
content: 引用 1 楼 qq423399099 的回复:加上头文件stdlib.h 版主好啊。我又回来了。 这是教程上的原代码，他的确没有stdlib.h这个头文件
user-0 提问: 请教结构体处理问题

回复:
user: user-0
content: 好，我试试看怎么能让编译器支持动态分配函数，多谢指教

user: user-1
content: 别怕，动态分配，分配多少都是你自己可以决定的，这样才能物尽其用…… 用得好就跟你定义多种struct基本一样省内存，代码还整洁。

user: user-0
content: 因为程序用在单片机中，资源有限，我怕用动态分配会有问题，比如内存大小不够之类的问题，不知道还有没有其他办法呢？

user: user-1
content: 数据在中间根本不是问题，你可以“包头+数据+包尾”又或者“数据+包尾”完全放在结构体最后的数组里，注意最后的解析就好

user: user-1
content: 那请楼主先告诉我，你的编译器支持什么动态分配内存的函数？

user: user-0
content: 柔性数组需要用到malloc 函数，我用的KEIL编译器，不支持啊，还有就是柔性数组必须放在结构的最后成员，可我的数据是在中间的，包头+数据+包尾，数据是可变的，我发送的时候也是发送结构体，如果用较大的数组定义数据的话，比如u8 data[100]，如果数据只有10个字节，那么剩余的90个字节也要发出去，这就有悖协议了。

user: user-1
content: http://blog.csdn.net/ce123/article/details/8973073 建议用柔性数组

user: user-2
content: 建议用字符串传输，在两端进行编解码。比如可以都编码为BCD字符串
user-0 提问: 散列表的优点在哪里呢

回复:
user: user-1
content: 平均约一次查找，即可找到要找的元素

user: user-2
content: 最主要的优点：这样查找效率高，计算一下哈希值就可以直接找到对应的元素，而不需要逐个去比较

user: user-0
content: 明白了 谢谢各位

user: user-3
content: 把散列表的名字改为哈希，再去琢磨。

user: user-4
content: 数组  优点：插入块如果知道坐标可以快速去地存取  缺点：查找慢,删除慢,大小固定  有序数组  优点：比无序数组查找快  缺点：删除和插入慢，大小固定  栈  优点：提供后进先出的存取方式  缺点：存取其他项很慢  队列  优点：提供先进先出的存取方式  缺点：存取其他项都很慢  链表  优点：插入快，删除快  缺点：查找慢  二叉树  优点：查找，插入，删除都快（如果数保持平衡）  缺点：删除算法复杂  红-黑树  优点：查找，插入，删除都快，树总是平衡的  缺点：算法复杂   2-3-4树  优点：查找，插入，删除都快，树总是平衡的。类似的树对磁盘存储有用  缺点：算法复杂   哈希表  优点：如果关键字已知则存取速度极快，插入块  缺点：删除慢，如果不知道关键则存取很慢，对存储空间使用不充分  堆  优点：插入，删除块，对最大数据的项存取很快  缺点：对其他数据项存取很慢  图  优点：对现实世界建模  缺点：有些算法慢且复杂

user: user-5
content: 分开储存的是链表....hash表是连续储存目的是将搜索时间复杂度降到O(1),  而一般数组搜索时间复杂度O(n)，二叉树是O(log(n))，哪个效率一看就知道了
user-0 提问: 新手求助 一个二叉排序树的问题

回复:
user: user-1
content: 不好意思 你的这个程序实在有点费解 搞不懂返回true 有什么用 。你可以看看我以前提问过的一个帖子 也是关于删除的 里面的那个程序比较简洁明了

user: user-0
content: 引用 2 楼 user-1 的回复:我也是刚刚学，不太懂你的意思。 你是说 删除只有一个孩子的结点时只是删除了这个结点，而没有把他的父节点连到他上面吗？ 我想说的是 这是一个递归程序，“现在”执行的删除操作是在许多个 查找 操作后进行的，当你的 删除操作执行完了后，会返回一个结点（当是 删除只有一个孩子的结点 时，这个结点是他的孩子结点），这一步的递归就退出了，这个结点又被赋给另一个结点（这个结点就是他的父亲）。这是个递归程序没错 是递归寻找到是否和key相等  相等就删除  我的意思是 如果这个要删除的结点是 左结点为空 或者右结点为空的时候 删除了这个结点要把后边的连上去 而不破坏排序二叉树的性质  那    *p = (*p)->lchild; 的意思就是*p指向左孩子  然后 然后free掉了q  那这个要删除结点的父结点 并没有连下去  就是不明白这点

user: user-0
content: 引用 2 楼 user-1 的回复:我也是刚刚学，不太懂你的意思。 你是说 删除只有一个孩子的结点时只是删除了这个结点，而没有把他的父节点连到他上面吗？ 我想说的是 这是一个递归程序，“现在”执行的删除操作是在许多个 查找 操作后进行的，当你的 删除操作执行完了后，会返回一个结点（当是 删除只有一个孩子的结点 时，这个结点是他的孩子结点），这一步的递归就退出了，这个结点又被赋给另一个结点（这个结点就是他的父亲）。我想想

user: user-1
content: 我也是刚刚学，不太懂你的意思。 你是说 删除只有一个孩子的结点时只是删除了这个结点，而没有把他的父节点连到他上面吗？ 我想说的是 这是一个递归程序，“现在”执行的删除操作是在许多个 查找 操作后进行的，当你的 删除操作执行完了后，会返回一个结点（当是 删除只有一个孩子的结点 时，这个结点是他的孩子结点），这一步的递归就退出了，这个结点又被赋给另一个结点（这个结点就是他的父亲）。

user: user-0
content: 也就是  要删除的结点 左结点为空 或则右结点为空的时候  怎么连上去的？？？ 这句代码连不上去啊 *p = (*p)->lchild; 只是*p指向了lchild而已 他的双亲指向的结点(q)还是被释放了 求大神帮忙！！！
user-0 提问: 9-((total-1)%10)  和 10-total%10为什么结果一样呢？

回复:
user: user-1
content: 引用 4 楼 dustpg 的回复:#include <stdio.h>   int main() {     int total = 10;     int a = 9 - ((total - 1) % 10);     int b = 10 - total % 10;     printf("a: %d, b: %d", a, b); }  x % 10值域是0~9, 9 - (x % 10) 值域是0~9, 10-(x%10) 值域是1~10， 怎么是一样的... ++

user: user-2
content: 引用 4 楼 dustpg 的回复:#include <stdio.h>   int main() {     int total = 10;     int a = 9 - ((total - 1) % 10);     int b = 10 - total % 10;     printf("a: %d, b: %d", a, b); }  x % 10值域是0~9, 9 - (x % 10) 值域是0~9, 10-(x%10) 值域是1~10， 怎么是一样的...

user: user-3
content: total = k * 10 + r total - 1 = k * 10 + r - 1  total % 10 = r (total - 1) % 10 = r - 1  10 - total % 10 = 10 - r 9 - ((total-1)%10) = 9 - (r-1)  = 9- r+1 = 10 - r  所以相等

user: user-4
content: #include <stdio.h>   int main() {     int total = 10;     int a = 9 - ((total - 1) % 10);     int b = 10 - total % 10;     printf("a: %d, b: %d", a, b); }  x % 10值域是0~9, 9 - (x % 10) 值域是0~9, 10-(x%10) 值域是1~10， 怎么是一样的...

user: user-0
content: 就是这两个表达式在编译器中结果相等，我想问问为什么结果相等，怎么用数学方法解释

user: user-5
content: 想问什么？说清楚点

user: user-3
content: 你想说 9-((total-1)%10)  在C89 和 C99 结果不一样?
user-0 提问: 求表达式在C89和C99下的值

回复:
user: user-0
content: 引用 6 楼 renwotao2009的回复:-std=c89 -std=c99 谢谢啦！。。。。。。。。

user: user-1
content: -std=c89 -std=c99

user: user-2
content: 你就编一个一模一样的程序  然后分别用支持c89的编译器编译运行 再用支持c99的编译器编译运行 比较结果就可以了

user: user-0
content: 就是有两个题目，表达式一模一样，分别让我求在C89中和C99中的值，我不知道怎么去编写程序

user: user-2
content: 什么分别求结果? 说不清楚?

user: user-0
content: 在编辑器里面怎么分别求得结果呢？

user: user-2
content: 基本没区别  出了 %运算符操作数小于0的情况  C89 和 C99 略有差异  其他情况都是一样的
user-0 提问: 提交OJ系统提示超时

回复:
user: user-1
content: 你们的OJ好神奇，这样的程序居然是超时。 大部分OJ应该都会判为Wrong Answer。

user: user-0
content: 题目是控制台输入  答案int CreateMGraph(MGraph &G) {    int va,vb,va1,vb1; 	int i,j,k,l; 	scanf("%d,%d",&G.numNodes,&G.numEdges); /* 输入顶点数和边数 */ 	fflush(stdin); 	for(i = 0;i <G.numNodes;i++) /* 读入顶点信息,建立顶点表 */ 		scanf("%d",&G.vexs[i]); 	for(i = 0;i <G.numNodes;i++) 		for(j = 0;j <G.numNodes;j++) 			G.arc[i][j].adj=0;	/* 邻接矩阵初始化 */ 	for(k = 0;k <G.numEdges;k++) /* 读入numEdges条边，建立邻接矩阵 */ 	{ 		scanf("%d,%d",&va,&vb); 	va1=0; 	vb1=0; 	if(G.vexs[0]){ 		for(l=0;l<G.numNodes&&G.vexs[l];l++){ 			if(va==G.vexs[l]) 			va1=1; 			if(vb==G.vexs[l]) 			vb1=1; 		} 		if(va1==0){ 			G.vexs[l]=va; 			if(vb1==0)G.vexs[l+1]=vb; 		} 		else  			if(vb1==0)G.vexs[l]=vb; 	} 	else { 		G.vexs[0]=va; 		G.vexs[1]=vb; 	} 	i=LocateVex(G,va); 	j=LocateVex(G,vb); 	G.arc[i][j].adj=1; 	} 	return 1; }     搞得很复杂很繁琐的样子，话说不可以直接赋值吗，就G.arc[va][vb].adj=1难道不行？？？

user: user-2
content: 控制台输入（输出） 改成文件输入输出 人工输入非常耗时 控制台输出，也比文件输出慢很多 你的数据不大，只是数据录入，不可能超时的
user-0 提问: 怎样用notepad++运行C程序

回复:
user: user-1
content: 个人感觉如果想自己组装编译环境IDE，可以下个code::blocks(不自带GCC)的那种，然后再单独下载一个GCC，最后根据需要，自己组装成IDE环境。

user: user-2
content: 引用 10 楼 qq_35069633 的回复:引用 9 楼 renwotao2009 的回复:notepad++是编辑器，gcc是编译器，你得配合用才叫可视化编译环境怎样配合？  网上有讲解，楼主与其那么麻烦不如直接装个code::blocks或者VS用

user: user-0
content: 引用 9 楼 renwotao2009 的回复:notepad++是编辑器，gcc是编译器，你得配合用才叫可视化编译环境怎样配合？

user: user-3
content: 引用 10 楼 qq_35069633 的回复:引用 9 楼 renwotao2009 的回复:notepad++是编辑器，gcc是编译器，你得配合用才叫可视化编译环境怎样配合？下载gcc，配置notepad++的编译环境，网上有资料可参考

user: user-3
content: notepad++是编辑器，gcc是编译器，你得配合用才叫可视化编译环境

user: user-0
content: 怎样设置，然后就可以进行编译跟运行呢

user: user-0
content: 有 VC++ 跟 dev C++ 了。Notepad ++看上去好用些 ，而且通用其他大部分语言。

user: user-4
content: http://www.zhuantilan.com/jiqiao/46016.html

user: user-5
content: notepad++ 只是个文本编辑工具。

user: user-6
content: 还是这个吧，只有几十M，自带VC6和TC编译器，可设置： C与C++程序设计学习与实验系统 2013.3

user: user-2
content: 你还得有编译器啊！！

user: user-7
content: 你就折腾吧...

user: user-8
content: notepad之类的编辑器本身是不能编译c程序的，需要有专门的编译器，比如gcc。然后需要设置编译指令来编译。
user-0 提问: 关于*p++和*- -p的问题

回复:
user: user-1
content: 应该是一致的， 只是你理解的栈顶， 和作者说的栈顶不同 作者说的栈顶元素，就是最后一个入栈的元素 栈顶就是最后入栈元素的位置 你理解的栈顶应该是当前的栈指针位置为栈顶  而实际上 很多堆栈都是向下生长的 和作者演示的堆栈不一样 假设用 数组模拟堆栈 int a[40] ; int *sp =a+40-1; //一种方式 初始化为第一个可以存放的元素位置 *sp-- =x;//入栈   x=*++sp; //出栈  //栈顶元素 是sp 上面一个元素 //判满  bool isfull(){return sp== a-1;}; //判空 bool isempty(){return sp== a+40-1;}; int *sp =a+40; //另一种方式 初始化为栈外一个元素的位置 *--sp =x;//入栈 x=*sp++;//出栈 栈顶元素 就是 sp所指元素 //判满  bool isfull(){return sp==a;}; //判空 bool isempty(){return sp== a+40;};  这只是两种不同的实现方式， 栈顶元素表示方法本质上是一致的， 都是最后一次入栈的元素。

user: user-0
content: 引用 5 楼 qq423399099 的回复:栈顶指针一般都是指向栈顶元素的下一个位置。 所以要取栈顶元素，需要让栈顶指针先减1再取值才行。（所以这样注释完全OK） PS：谁也没说过栈顶指针一定要指着栈顶元素啊？ 哦哦，我看懂了，原来栈指针是指向栈顶下个位置的，谢谢～

user: user-2
content: 栈顶指针一般都是指向栈顶元素的下一个位置。 所以要取栈顶元素，需要让栈顶指针先减1再取值才行。（所以这样注释完全OK） PS：谁也没说过栈顶指针一定要指着栈顶元素啊？

user: user-0
content: 引用 2 楼 qq423399099 的回复:*--p;当然是先执行--然后再*取值 其实你从上面的入栈也能看出来，它是先将值入栈，然后p才++，也就是说入栈玩，p指向的地方是没有值的 所以出栈的时候自然要先--然后才能取到值 这个我也懂得，只是第二句代码运行方式感觉跟注释写的不太一样，是这样吗？

user: user-0
content: 引用 1 楼 user-3 的回复:[quote=引用 楼主 zhenqiu_chen 的回复:] 但是按照注释的说法，是把栈顶元素弹出栈并赋给val，然后栈指针才减1, 这也是符合出栈的过程的。 看不出有这个说法[/quote] pop top of stack into val 这个说把栈顶元素pop到val里面，应该是这个意思吧。

user: user-2
content: *--p;当然是先执行--然后再*取值 其实你从上面的入栈也能看出来，它是先将值入栈，然后p才++，也就是说入栈玩，p指向的地方是没有值的 所以出栈的时候自然要先--然后才能取到值

user: user-3
content: 引用 楼主 zhenqiu_chen 的回复:但是按照注释的说法，是把栈顶元素弹出栈并赋给val，然后栈指针才减1, 这也是符合出栈的过程的。 看不出有这个说法
user-0 提问: 当/运算符和%运算符的操作数是负数时

回复:
user: user-1
content: 这个算是简单的数学的问题吧。。。。。。

user: user-2
content: 11%5的结果是1 11%-2的结果是1 -11%-5的结果是-1 -11%5的结果是-1  参见《c primer plus》第5章 5.3.2节

user: user-0
content: 引用 4 楼 罗博士的回复:[quote=引用 3 楼 u012061345 的回复:] 除号操作符并不复杂，结果是确定的。  取余操作符只要记得一条：取余的结果与被除数的符号一致。  早期的C++98标准中，如果取余运算符的两个运算数是非负的，余数的符号是不做规定的，所以不同的编译器有可能不同。  但是在C语言以及新的C++标准中，这一条已经没有了。取余的结果应该保持一致。  早期的C89标准也是不规定的。不过C99、C11、C++11、C++14都已经规定死了。[/quote] 谢谢(*°∀°)=3

user: user-3
content: a % -b = a + a / b > 0 -a % -b = -a - a / b < 0

user: user-3
content: a > 0 ,b > 1 : a % b  = a - a / b > 0 -a % b = -a + a / b < 0

user: user-4
content: 引用 3 楼 u012061345 的回复:除号操作符并不复杂，结果是确定的。  取余操作符只要记得一条：取余的结果与被除数的符号一致。  早期的C++98标准中，如果取余运算符的两个运算数是非负的，余数的符号是不做规定的，所以不同的编译器有可能不同。  但是在C语言以及新的C++标准中，这一条已经没有了。取余的结果应该保持一致。  早期的C89标准也是不规定的。不过C99、C11、C++11、C++14都已经规定死了。

user: user-4
content: 除号操作符并不复杂，结果是确定的。  取余操作符只要记得一条：取余的结果与被除数的符号一致。  早期的C++98标准中，如果取余运算符的两个运算数是非负的，余数的符号是不做规定的，所以不同的编译器有可能不同。  但是在C语言以及新的C++标准中，这一条已经没有了。取余的结果应该保持一致。

user: user-0
content: 除法应该是商与分母相乘吧。假如-9/7，结果可能为-2.也可能为5，是为什么呢？

user: user-5
content: 首先先说余数，在C语言中余数的符号是和被除数的符号相同。即： (-10)%3==-1; 10%(-3)==1; (-10)%(-3)==-1; 做除法的时候，商是令其与分子相乘的积的绝对值不超过分母的绝对值且最接近的那个数， 所以 (-10)/3==-3; 10/(-3)==-3; (-10)/(-3)==3;  余数与被除数（即分子的符号）相同；先将各个带符号的数全部取正值再做除法，再根据负号的个数确定商的符号
user-0 提问: 这个图里的三角函数 要怎么用c语言打出来

回复:
user: user-1
content: 引用 4 楼 youzi15 的回复:  如果atan是 -1的子集    我用atan 会不会不精确？  lz看清图片写的没有.....我的理解上函数f(x)，指定一个x, 有一个确定的 f(x),  但是图片上假定了多个f(x), 高等数学我已经忘光了, 所以不知道合不合法.  反正atan返回的是-π/2 ~ π/2, 而不是任意角度

user: user-2
content: 关键看取值范围，atan取值范围是(-π/2,+π/2)，根据你的需要+-kπ

user: user-0
content: 如果atan是 -1的子集    我用atan 会不会不精确？

user: user-3
content: 这是反函数的写法 f-1 表示 f 的反函数  tan-1  数学上习惯用 tg-1---->arctg  C语言 tan（x） 表示tg( x) atan(x) 表示 arctg(x) atan2 (x,y) ===>表示 arctg(y/x)  这样的好处是  1）不会出现x=0 ，结果为无穷大，因而无法求出的问题 2）更精确 比 arctg(y/x) 先求出 y/x 再求  反三角函数更精确 ，因为 tg，一个周期内，有两个无穷大点， 这个点 附近的值，对应的 y/x 数据巨大，  表示为double 也是不精确地 所以计算结果也是不精确地，

user: user-0
content: -1 和atan 一样吗      我看到别人说 atan是 -1的子集 这是乍回事

user: user-2
content: #include<stdio.h> #include<math.h> int main() {   float y,x;   scanf("%f%f",&y,&x);   printf("%f\n",atan(y/x));   return 0; }
user-0 提问: 用CodeBlocks运行一个写的C语言程序有错误，一直找不出错在哪里，求大神帮忙指点一下啊

回复:
user: user-1
content: input()函数里面，char m;，m没有赋初值

user: user-2
content: Input函数声明的语句后面少了分号  int Input(Person p[],int n);

user: user-3
content: input函数的声明后面少了一个分号

user: user-4
content: 听版主的，听赵老湿的，提问要掌握提问的技巧。

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

回复:
user: user-1
content: scanf("%s%s", &stu[i].xuehao, &stu[i].name);把两个&去掉试试，换成scanf("%s%s", stu[i].xuehao, stu[i].name);

user: user-0
content: 引用 7 楼 赵4老师的回复:printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0]; 谢谢老师指导，蒽，以后注意

user: user-2
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];

user: user-0
content: 引用 3 楼 user-4的回复:#include<stdio.h> #define X 3 #define Y 2  struct student { 	char xuehao[10]; 	char name[10]; 	int cj[X]; 	float pj; };  int main() { 	int i, j; 	struct student stu[Y]; 	printf("请输入学号，姓名：\n"); 	for (i = 0; i < Y; i++){ 		fflush(stdin); 		scanf("%s%s", &stu[i].xuehao, &stu[i].name); 		stu[i].pj = 0.0; 	} 	printf("请输入成绩：\n"); 	for (i=0;i<Y;i++){ 		for (j = 0; j < X; j++) 		{ 			scanf("%d", &stu[i].cj[j]); 			stu[i].pj = stu[i].pj + stu[i].cj[j] ; 		} 	} 	for (i = 0; i < Y; i++) 	{	 		stu[i].pj = stu[i].pj /X; 		printf("%s\t%s\t", stu[i].xuehao, stu[i].name); 		printf("%f\n",stu[i].pj); 	} 	return 0; } 大概改了一下，不过这么写逻辑有点混乱。另外，建议for循环中即使只有一条语句也是用花括号，否则很容易导致自己逻辑错误 谢谢谢谢指导，明白了

user: user-1
content: 引用 2 楼 sinat_35121480的回复:[quote=引用 1 楼 qq_35178267的回复:]scanf("%s%s", &stu[i].xuehao, &stu[i].name);把两个&去掉试试，换成scanf("%s%s", stu[i].xuehao, stu[i].name); 这样还是不对的，结果是运行不了的[/quote] 第二个循环改一下吧 for(i=0；i<Y;i++) {         for(j=0;j<X;j++)          scanf("%d",&stu[i].cj[j]); }

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

user: user-4
content: #include<stdio.h> #define X 3 #define Y 2  struct student { 	char xuehao[10]; 	char name[10]; 	int cj[X]; 	float pj; };  int main() { 	int i, j; 	struct student stu[Y]; 	printf("请输入学号，姓名：\n"); 	for (i = 0; i < Y; i++){ 		fflush(stdin); 		scanf("%s%s", &stu[i].xuehao, &stu[i].name); 		stu[i].pj = 0.0; 	} 	printf("请输入成绩：\n"); 	for (i=0;i<Y;i++){ 		for (j = 0; j < X; j++) 		{ 			scanf("%d", &stu[i].cj[j]); 			stu[i].pj = stu[i].pj + stu[i].cj[j] ; 		} 	} 	for (i = 0; i < Y; i++) 	{	 		stu[i].pj = stu[i].pj /X; 		printf("%s\t%s\t", stu[i].xuehao, stu[i].name); 		printf("%f\n",stu[i].pj); 	} 	return 0; } 大概改了一下，不过这么写逻辑有点混乱。另外，建议for循环中即使只有一条语句也是用花括号，否则很容易导致自己逻辑错误

user: user-0
content: 引用 1 楼 qq_35178267的回复:scanf("%s%s", &stu[i].xuehao, &stu[i].name);把两个&去掉试试，换成scanf("%s%s", stu[i].xuehao, stu[i].name); 这样还是不对的，结果是运行不了的
user-0 提问: 关于信号处理的问题

回复:
user: user-1
content: 下面几种情况，可以把信号发送到某个指定的线程。 A..某个特定硬件指令执行后(在该线程内执行的),产生的信号，将会发送到该线程内。比如SIGBUS，SIGFPE，SIGILL，SIGSEGV。 B.当线程尝试向一个broken pipe写数据时，会产生一个SIGPIPE. C.使用pthread_kill()或者pthread_sigqueue()。这些函数允许一个线程发送信号到另一个线程（同一进程中）。  其他情况都是把信号发送到整个进程（比如，kill()和sigqueue()）。

user: user-2
content: 《Windows核心编程》

user: user-3
content: 信号是给进程的，不是给线程的。
user-0 提问: 使用指针按字符串长度排序到崩溃的困惑

回复:
user: user-1
content: if(strlen(s1[i])>strlen(s1[j]));这句后面多了分号  单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  更应该学会按赵4老师说的做。

user: user-3
content: 自己应该学会调试

user: user-0
content: 自己顶帖，坐等高人。

user: user-4
content: 代码还没完全理解，但4楼说的有道理，if后面搞了个分号，那其下面的大括号内的语句就在for内每次都执行了，没有条件给其限制了
user-0 提问: 小白c语言文件读取问题 fscanf就是读不出数据 

回复:
user: user-1
content: 如果是写文本文件，打开文件标记那里加上 t   http://en.cppreference.com/w/c/io/fopen

user: user-2
content: 文件写完后要fclose(fp); 把内容从缓冲区写入到文件才行  #include <stdio.h>  //函数f1,从键盘读入n个实数,将其写到一个文件上,文件名由用户输入 void f1() { 	int	n = 0; 	double data = 0; 	char name[20]; 	gets(name); 	FILE *fp; 	fp = fopen(name, "w+"); 	if (!fp) 	{ 		printf("Cannot open such a file"); 	} 	printf("请输入存入数字个数:"); 	scanf("%d", &n); 	for (int i = 0; i < n; i++) 	{ 		scanf("%lf", &data); 		fprintf(fp, "%.2lf\n", data); 	} 	fclose(fp); }  void f2() { 	int n = 0; 	printf("请输入要读取的数字的个数\n"); 	scanf("%d", &n); 	getchar(); 	double a[100] = {0}; 	char name[20]; 	printf("请输入要读取的文件名\n"); 	gets(name); 	FILE *fp; 	 	fp = fopen(name, "r"); 	if (!fp) 	{ 		printf("Cannot open such a file"); 	} 	for (int i = 0; i < n; i++) 	{    		int j = 0; 		j = fscanf(fp,"%lf",&a[i]); 		printf("%d ",j); 		printf("%lf",a[i]); 	}  }  int main(int argc, char* argv[]) { 	f1(); 	f2(); 	return 0; }

user: user-0
content: fscanf的返回值一直是-1 到底是哪里出了问题呢？

user: user-0
content: #include <stdio.h>  //函数f1,从键盘读入n个实数,将其写到一个文件上,文件名由用户输入 void f1() { 	int	n = 0; 	double data = 0; 	char name[20]; 	gets(name); 	FILE *fp; 	fp = fopen(name, "w+x"); 	if (!fp) 	{ 		printf("Cannot open such a file"); 	} 	printf("请输入存入数字个数:"); 	scanf("%d", &n); 	for (int i = 0; i < n; i++) 	{ 		scanf("%lf", &data); 		fprintf(fp, "%.2lf\n", data); 	} }  void f2() { 	int n = 0; 	printf("请输入要读取的数字的个数\n"); 	scanf("%d", &n); 	getchar(); 	double a[100] = {0}; 	char name[20]; 	printf("请输入要读取的文件名\n"); 	gets(name); 	FILE *fp; 	fp = fopen(name, "r"); 	if (!fp) 	{ 		printf("Cannot open such a file"); 	} 	for (int i = 0; i < n; i++) 	{    		int j = 0; 		j = fscanf(fp,"%lf",&a[i]);     	printf("%d ",j); 		printf("%lf",a[i]); 	}  }  int main(int argc, char* argv[]) { 	f1(); 	f2(); 	return 0; }
user-0 提问: 请问怎么通过预编译实现同一段语句的多次调用啊？

回复:
user: user-1
content: 代码生成参考：//codegen.c // 输入一组字符串，比如 // aa ss ddd dd 33 dd // 然后自动生成一个函数 int A(const char*); // 实现A("aa")返回0  A("ss")返回1 依次类推 #include <stdio.h> int main(int argc,char **argv) {     int i;     if (argc<2) {         printf("%s p1 [p2 ...] [>result.c]\nGenerate code int A(const char *a); 0==A(\"p1\") 1==A(\"p2\") ...",argv[0]);         return 1;     }     //printf("#include <string.h>\n");     printf("int A(const char *a) {\n");     for (i=0;i<argc-1;i++) {         printf("    if (0==strcmp(a,\"%s\")) return %d;\n",argv[i+1],i);     }     printf("    return -1;\n");     printf("}\n");     return 0; } //C:\test\Debug>codegen.exe //codegen.exe p1 [p2 ...] [>result.c] //Generate code int A(const char *a); 0==A("p1") 1==A("p2") ... //C:\test\Debug>codegen.exe aa ss ddd dd 33 dd //int A(const char *a) { //    if (0==strcmp(a,"aa")) return 0; //    if (0==strcmp(a,"ss")) return 1; //    if (0==strcmp(a,"ddd")) return 2; //    if (0==strcmp(a,"dd")) return 3; //    if (0==strcmp(a,"33")) return 4; //    if (0==strcmp(a,"dd")) return 5; //    return -1; //} // //c:\test\Debug>codegen.exe aa ss ddd dd 33 dd >result.c // //c:\test\Debug>type result.c //int A(const char *a) { //    if (0==strcmp(a,"aa")) return 0; //    if (0==strcmp(a,"ss")) return 1; //    if (0==strcmp(a,"ddd")) return 2; //    if (0==strcmp(a,"dd")) return 3; //    if (0==strcmp(a,"33")) return 4; //    if (0==strcmp(a,"dd")) return 5; //    return -1; //} //

user: user-2
content: 看来，想象力是创造力的源泉，虽然 实现比较麻烦 使用起来，还是很方便的  引用 6 楼 luciferisnotsatan 的回复:你这还不如用个循环。。。。。。  没要玩宏的话，可以看 http://bbs.csdn.net/topics/370167484 只有想不到，没有做不到的 不过，确实不如循环，因为编译器优化，也有这种能力

user: user-1
content: 所以说，宏和模板都比不上代码生成。

user: user-2
content: 也许可以 搞复杂点  #define  fun1 fun() #define  fun2 fun(), fun() #define  fun3 fun(),fun(),fun()  #define repCall(f,n) f##n repCall(fun,3)   没试验过 不知道成不成

user: user-3
content: 你这还不如用个循环。。。。。。  没要玩宏的话，可以看 http://bbs.csdn.net/topics/370167484

user: user-4
content: 和直接调用没什么多大区别的~

user: user-2
content: for(int i=0;i<3;i++) {      fun(); }  可能会展开成 fun();fun();fun();

user: user-2
content: 这个不需要预编译语句，编译器会自动展开循环

user: user-5
content: 不使用循环那没有，你就只能写成：  #define deffun (fun();fun();fun();fun();fun();fun();fun();fun();fun();fun();)  然后调用时：  deffun

user: user-6
content: 这是什么鬼，为什么要这样做呢？有方法，最好还是用函数去循环调用，别乱用预编译啊。
user-0 提问: 这两个普利姆算法哪里不同？

回复:
user: user-1
content: 实现同一功能可以写出不同的代码，但代码的执行效率可能完全不同

user: user-2
content: 第一个是最直白的写法，效率低。 第二个做了一个标准的优化，在每一次加入点的时候，更新一下未加入点到已加入点的最短距离。效率高。

user: user-3
content: 一个无耻的说法就是比较一下哪里不同。
user-0 提问: 关于padding bits

回复:
user: user-1
content: http://www.cnblogs.com/zhaoyl/archive/2012/04/21/2461077.html

user: user-0
content: 引用 5 楼 paschen 的回复:http://www.cnblogs.com/zhaoyl/archive/2012/04/21/2461077.html谢谢二楼和版主

user: user-2
content: 你的具体情况我不知道，猜想是类似下面的情况： 比如数据有10位(value)，占用第0~9位；如果有要求必须把符号位(sign)放在第31位，那就需要在中间填上21位无意义的内容(padding)

user: user-2
content: padding一般是填充。他本身的内容没用，作用是占用一些空间使得有用的东西处在合适的位置上，达到内存对齐之类的效果。  举例： struct { char c; int i; }; 这里的c占用1个字节，为了让后面的i处在4字节对齐的位置，编译器通常会在c和i中间填进3个字节，这就是padding bytes

user: user-0
content: 没人么。。。。

user: user-0
content: 有人么。。。
user-0 提问: 浮点数做逻辑判断的效率是不是比整型做逻辑判断的效率低？

回复:
user: user-1
content: 浮点处理器使用前后，需要处理处理器状态 因此指令越少，效率越低 指令多的时候，不必整数部件差  其中比较 就是一种低效操作 因为只需要几条指令 所以 效率偏低  浮点部件执行数学运算，很有效率 但不宜 只有少量计算 大量数学运算，效率反而高

user: user-2
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！

user: user-3
content: 整数的效率肯定要高一些

user: user-4
content: 做四则运算，浮点数效率肯定比整型低？一般四则混合运算，没有特殊指令集的话, 现代CPU的浮点计算效率比整型高......不要想这些基本代码的效率，因为考虑的远远 没有编译器/硬件本身多
user-0 提问: 结构体作为函数参数，但是修改后为什么数值不一样？

回复:
user: user-0
content: 我是想用结构体当做指针，然后进行修改后，在输出

user: user-1
content: 哦 把字符当作字符串输出，是严重的错误 *（who）-> name ////这里的 优先级运算符 （） 不起任何作用，纯属骗人的 ===>* who -> name  ==>*(who->name)

user: user-2
content: 字符串拷贝用strcpy  #include <stdio.h> #include <stdlib.h> #include <string.h> struct stu{  	char name[5]; 	int id; 	char sex[10]; }; void test(stu* who){  	who->id=23;  	strcpy(who->name, "bhj");  	strcpy(who->sex, "dkh");  	printf("%d %s %s\n",who->id,who->name,who->sex); } int main(){  	stu s1={"a",12,"m"};  	test(&s1);   	return 0; }

user: user-3
content: *(who)-> 这个代码是什么？？ ->操作符 的操作对象本身就是对结构体指针，你加个*以后，就是这个结构体的第一个元素的地址的内容了 也就是name[0]了（可能说得不大准确，大概就是这个意思了），反正就是语法已经乱了 所以才会报错“无法从 const char [4] 转换成 char”

user: user-4
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  struct stu{ 	char name[5]; 	int  id; 	char sex[10]; };  void test(struct stu *who){ 	who->id=23; 	who->name[0]='b'; 	who->name[1]='h'; 	who->name[2]='j'; 	who->sex[0]='d'; 	who->sex[1]='k'; 	who->sex[2]='h'; 	printf("%d %s %s\n",who->id,who->name,who->sex); }  int main(){ 	stu s1={"a",12,"m"}; 	test(&s1); 	return 0; }  不知道你想要干嘛，只是改的没错了
user-0 提问: c语言中的time函数获得机器时间

回复:
user: user-1
content: “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？

user: user-0
content: 是多算了一个月，，，

user: user-2
content: #include <time.h> #include <stdio.h>  int sum() { 	int p = 1970; 	int i; 	int sum=0; 	for (i = 0; i < 46; i++) { 		if (p % 4 == 0 && p % 400 != 0) { 			sum = sum +  366; 		} 		else { 			sum = sum +  365;  		} 		p++; 	} 	sum = sum + 31/*一月*/ 		+ 29/*二月*/ 		+ 31/*三月*/ 		+ 30/*四月*/ 		+ 31/*五月*/ 		+  3/*六月*/; 	time_t pu; 	long f = (int)time(&pu); 	f = f / (3600*24); 	printf("%ld\n",f); 	printf("sum=%d",sum); 	return sum;  }  int main (){ 	sum(); 	return 0; }

user: user-3
content: 楼主你自己多算了一个月吧，sum = sum + 185; 1月1日到6月3日应该是：31+29+31+30+31+3=155
user-0 提问: linux下ping一个字符串都能通？

回复:
user: user-1
content: 这台服务器管理的域叫做sdfsdf 改host文件 echo "0.0.0.0 sdfsdf" >> /etc/hosts

user: user-0
content: 引用 3 楼 user-1 的回复:是一个本地域名 怎么个意思？那如何让他ping不通

user: user-1
content: 是一个本地域名

user: user-0
content: 这是个无效的域名。也会识别？

user: user-1
content: 一个域名而已
user-0 提问: 如何读取行列都不定的整数集文件

回复:
user: user-1
content: fp = fopen("G:\\ExpQuery", "r");     vector<vector<int> > query_list;     while(1) {         vector<int> aarr;         int a;         while(1){             fscanf(fp,"%d",&a);             aarr.push_back(a);             if(feof(fp)) break;             if(fgetc(fp)=='\n') break;         }         query_list.push_back(aarr);         if(feof(fp)) break;     }     fclose(fp);

user: user-2
content: 引用 2楼我是你的主体 的回复:我是这么想但具体操作不太会，也不知道怎么处理换行（检测换行符也不太会处理（总之就是不会文件相关操作用ifstream读，fread也行 建议楼主自己先写一些代码，然后单步调试，遇到问题了再发上来。 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-0
content: 我是这么想但具体操作不太会，也不知道怎么处理换行（检测换行符也不太会处理（总之就是不会文件相关操作

user: user-2
content: 每行都存成一个vector 一行行读，每行读到一个数字就push_back到对应的vector里