Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C语言探讨，请各位大神教一下

回复:
user: user-0
content: 输入二个十进制的整数（包括负数），把这二个数通过一些方法转化为二进制（8位机补码形式），输出转化后的二进制数，然后用加法得到这二个二进制数的加法结果（8位机补码形式），并输出.

user: user-1
content: 仅供参考#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() {     int i,v;     char bs[33];     char b[33];     char hs[9];     char h[9];     char s[4];     char *e;  // 十进制整数转二进制串；     i=1024;     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("i=%d,bs=%s\n",i,bs); // 十进制整数转十六进制串；     i=1024;     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串     strcpy(s,"a汉");     i=0;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉

user: user-2
content: 计算机中都是二进制，输出即可

user: user-3
content: scanf后的变量值就是二进制补码的形式 如果是字符串表示的10进制数，使用atoi转换

user: user-4
content: 不知所云！  引用 楼主 u013035720 的回复:用C语言：输入二个十进制的数字用一些方法输出相应的二进制数而且是8位机补码，并且输出那二个二进制数的和.
user-0 提问: Linux C关于获取局域网内当前所有已用IP

回复:
user: user-1
content: 引用 9 楼 zustchf 的回复:现在的想法是发送arp包，广播的话，可以特定的地址然后让收到数据包的设备回复吗？ 请问楼主解决了吗 我现在在做一个小盒子通过网线接入局域网，要想在局域网获取一个可用ip地址，怎么办，因为他接入局域网时是没有ip地址的，如果没开启DHCP，怎么办是要给他先随便设一个ip吗？

user: user-0
content: 最后还是决定用ARP了，就是在发送过程中会有一些奇怪的包出来，是发给路由器的，但是会被本地设备接收到，会严重影响效率，不知道这个问题怎么解决

user: user-2
content: 使用sniffer软件。

user: user-0
content: 现在的想法是发送arp包，广播的话，可以特定的地址然后让收到数据包的设备回复吗？

user: user-3
content: arping

user: user-4
content: 引用 2 楼 zustchf 的回复:[quote=引用 1 楼 user-5 的回复:] ping 该网段内的所有ip,ping不通的就是没有使用的。  效率太低，相对于用ping的方法，用arp的方法会更好，我是想找一个效率高一点的方法[/quote] 如果有arp防火墙，arp不管用

user: user-0
content: 引用 1 楼 user-5 的回复:ping 该网段内的所有ip,ping不通的就是没有使用的。  效率太低，相对于用ping的方法，用arp的方法会更好，我是想找一个效率高一点的方法

user: user-5
content: ping 该网段内的所有ip,ping不通的就是没有使用的。

user: user-0
content: 引用 3 楼 maoshuoqiong 的回复:[quote=引用 2 楼 zustchf 的回复:] [quote=引用 1 楼 user-5 的回复:] ping 该网段内的所有ip,ping不通的就是没有使用的。  效率太低，相对于用ping的方法，用arp的方法会更好，我是想找一个效率高一点的方法[/quote] 如果有arp防火墙，arp不管用[/quote]  是的，这是一个问题，ping也是可以被阻止的

user: user-0
content: 引用 4 楼 user-5 的回复:那就给局域网发送广播包，谁没有回应对应的IP就没有使用。  这个广播包应该怎么发，我也是想这么做的，但是我困惑的是广播包发出去了，怎么让包自己回复？

user: user-5
content: 引用 2 楼 zustchf 的回复:[quote=引用 1 楼 user-5 的回复:] ping 该网段内的所有ip,ping不通的就是没有使用的。  效率太低，相对于用ping的方法，用arp的方法会更好，我是想找一个效率高一点的方法[/quote]那就给局域网发送广播包，谁没有回应对应的IP就没有使用。
user-0 提问: fgetc()

回复:
user: user-0
content: 引用 8 楼 turingo 的回复:我的理解就是当前字符，如果当前没有字符了，它就是EOF特殊字符。  [quote=引用 7 楼 ztzi321 的回复:] [quote=引用 5 楼 turingo 的回复:] 把EOF理解为特殊的字符就好了。  [quote=引用 4 楼 ztzi321 的回复:] [quote=引用 1 楼 turingo 的回复:] 1、当前所指; 2、能。  [quote=引用 楼主 ztzi321 的回复:] 1.返回的是下一个字符还是当前所指字符？ 2.fgetc()能返回空格类字符吗？[/quote] “fgetc()函数返回来自stream(流)中的下一个字符,如果到达文件尾或者发生错误时返回EOF”如何理解？[/quote][/quote]这是应该说的不是当前字符吧？[/quote][/quote]是不是读取当前字节，把指针移到下一个字符位置？是这样理解吗？

user: user-1
content: 一个文件刚刚打开，何为第一个字符，何为下一个字符？

user: user-2
content: 我的理解就是当前字符，如果当前没有字符了，它就是EOF特殊字符。  引用 7 楼 ztzi321 的回复:[quote=引用 5 楼 turingo 的回复:] 把EOF理解为特殊的字符就好了。  [quote=引用 4 楼 ztzi321 的回复:] [quote=引用 1 楼 turingo 的回复:] 1、当前所指; 2、能。  [quote=引用 楼主 ztzi321 的回复:] 1.返回的是下一个字符还是当前所指字符？ 2.fgetc()能返回空格类字符吗？[/quote] “fgetc()函数返回来自stream(流)中的下一个字符,如果到达文件尾或者发生错误时返回EOF”如何理解？[/quote][/quote]这是应该说的不是当前字符吧？[/quote]

user: user-0
content: 引用 5 楼 turingo 的回复:把EOF理解为特殊的字符就好了。  [quote=引用 4 楼 ztzi321 的回复:] [quote=引用 1 楼 turingo 的回复:] 1、当前所指; 2、能。  [quote=引用 楼主 ztzi321 的回复:] 1.返回的是下一个字符还是当前所指字符？ 2.fgetc()能返回空格类字符吗？[/quote] “fgetc()函数返回来自stream(流)中的下一个字符,如果到达文件尾或者发生错误时返回EOF”如何理解？[/quote][/quote]这是应该说的不是当前字符吧？

user: user-0
content: 引用 5 楼 turingo 的回复:把EOF理解为特殊的字符就好了。  [quote=引用 4 楼 ztzi321 的回复:] [quote=引用 1 楼 turingo 的回复:] 1、当前所指; 2、能。  [quote=引用 楼主 ztzi321 的回复:] 1.返回的是下一个字符还是当前所指字符？ 2.fgetc()能返回空格类字符吗？[/quote] “fgetc()函数返回来自stream(流)中的下一个字符,如果到达文件尾或者发生错误时返回EOF”如何理解？[/quote][/quote]"fgetc()函数返回来自stream(流)中的下一个字符"我说的是这句？

user: user-2
content: 把EOF理解为特殊的字符就好了。  引用 4 楼 ztzi321 的回复:[quote=引用 1 楼 turingo 的回复:] 1、当前所指; 2、能。  [quote=引用 楼主 ztzi321 的回复:] 1.返回的是下一个字符还是当前所指字符？ 2.fgetc()能返回空格类字符吗？[/quote] “fgetc()函数返回来自stream(流)中的下一个字符,如果到达文件尾或者发生错误时返回EOF”如何理解？[/quote]

user: user-0
content: 引用 1 楼 turingo 的回复:1、当前所指; 2、能。  [quote=引用 楼主 ztzi321 的回复:] 1.返回的是下一个字符还是当前所指字符？ 2.fgetc()能返回空格类字符吗？[/quote] “fgetc()函数返回来自stream(流)中的下一个字符,如果到达文件尾或者发生错误时返回EOF”如何理解？

user: user-0
content: 引用 2 楼 ForestDB 的回复:何为下一个，何为当前？ fgetc( FILE *stream)是stream所指的字符还是它的下一个？

user: user-3
content: 字符是表象，其对应字节值才是本质。

user: user-3
content: 所指字符。 刚打开文件时ftell返回0 fgetc返回第0个字符（如果文件长度为0则返回EOF）  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

user: user-2
content: 是的  引用 10 楼 ztzi321 的回复:[quote=引用 8 楼 turingo 的回复:] 我的理解就是当前字符，如果当前没有字符了，它就是EOF特殊字符。  [quote=引用 7 楼 ztzi321 的回复:] [quote=引用 5 楼 turingo 的回复:] 把EOF理解为特殊的字符就好了。  [quote=引用 4 楼 ztzi321 的回复:] [quote=引用 1 楼 turingo 的回复:] 1、当前所指; 2、能。  [quote=引用 楼主 ztzi321 的回复:] 1.返回的是下一个字符还是当前所指字符？ 2.fgetc()能返回空格类字符吗？[/quote] “fgetc()函数返回来自stream(流)中的下一个字符,如果到达文件尾或者发生错误时返回EOF”如何理解？[/quote][/quote]这是应该说的不是当前字符吧？[/quote][/quote]是不是读取当前字节，把指针移到下一个字符位置？是这样理解吗？[/quote]

user: user-1
content: 何为下一个，何为当前？

user: user-2
content: 1、当前所指; 2、能。  引用 楼主 ztzi321 的回复:1.返回的是下一个字符还是当前所指字符？ 2.fgetc()能返回空格类字符吗？
user-0 提问: C语言的结构中可以定义成员函数吗？

回复:
user: user-1
content: http://sinojelly.blog.51cto.com/479153/281184

user: user-1
content: 引用 3 楼 u010676349 的回复:[quote=引用 2 楼 zhxianbin 的回复:] 可以用函数指针的形式实现  typedef struct {     int a;     void (*func)(int param); } aaa; 好办法！调用的时候，是用aaa.func呢还是aaa->func？[/quote]  都不是，应该是这样：  aaa  var_aaa; var_aaa.func;  或者   aaa  *pvar_aaa; pvar_aaa->func;  你用类也要实例化，除非static 函数

user: user-2
content: 引用 5 楼 u010676349 的回复:[quote=引用 2 楼 zhxianbin 的回复:] 可以用函数指针的形式实现  typedef struct {     int a;     void (*func)(int param); } aaa; 很快发现一个缺点：就是如果是Ｃ++的成员函数，在调用本对象的成员变量的时候（比如a)，直接用a就行了。而这种方法，恐怕在使用a的时候，还需要加一个结构变量名，也就是aaa.a吧？[/quote] 这是必然的，因为你在用一门语言模仿另一门语言 如果用c中的一些技巧就可以达成和c++完全相同的效果，那c++跟c有什么区别？

user: user-0
content: 引用 2 楼 zhxianbin 的回复:可以用函数指针的形式实现  typedef struct {     int a;     void (*func)(int param); } aaa; 很快发现一个缺点：就是如果是Ｃ++的成员函数，在调用本对象的成员变量的时候（比如a)，直接用a就行了。而这种方法，恐怕在使用a的时候，还需要加一个结构变量名，也就是aaa.a吧？

user: user-0
content: 引用 2 楼 zhxianbin 的回复:可以用函数指针的形式实现  typedef struct {     int a;     void (*func)(int param); } aaa; 好办法！调用的时候，是用aaa.func呢还是aaa->func？

user: user-1
content: 可以用函数指针的形式实现  typedef struct {     int a;     void (*func)(int param); } aaa;

user: user-3
content: C没有成员函数。
user-0 提问: 谁来编一下这道c语言题，我会把错误的原因告诉你

回复:
user: user-1
content: 仅供参考#include <afxdisp.h> #include <stdio.h> #include <stdlib.h> int main(int argc, TCHAR* argv[]) {     COleDateTime t;     COleDateTimeSpan ts;     CString s,fmt;     int nYear;     int nMonth;     int nDay;     int nHour;     int nMin;     int nSec;     int lDays;     int nHours;     int nMins;     int nSecs;     int i,N;     // initialize MFC and print and error on failure     if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {         printf("Fatal Error: MFC initialization failed\n");         return 1;     }     if (argc<13) {         printf("Usage:%s sYYYY sMM sDD shh smm sss pDD phh pmm pss n {SQL|YYYY|YY}\n",argv[0]);         return 2;     }     if (stricmp(argv[12],"SQL")==0) fmt="%Y-%m-%d %H:%M:%S";     else if (stricmp(argv[12],"YYYY")==0) fmt="%Y%m%d %H%M%S";     else if (stricmp(argv[12],"YY")==0) fmt="%y%m%d %H%M%S";     else {         printf("Usage:%s sYYYY sMM sDD shh smm sss pDD phh pmm pss n {SQL|YYYY|YY}\n",argv[0]);         return 3;     }     nYear =atoi(argv[ 1]);     nMonth=atoi(argv[ 2]);     nDay  =atoi(argv[ 3]);     nHour =atoi(argv[ 4]);     nMin  =atoi(argv[ 5]);     nSec  =atoi(argv[ 6]);     lDays =atoi(argv[ 7]);     nHours=atoi(argv[ 8]);     nMins =atoi(argv[ 9]);     nSecs =atoi(argv[10]);     N     =atoi(argv[11]);     if (N<=0) {         printf("Usage:%s sYYYY sMM sDD shh smm sss pDD phh pmm pss n {SQL|YYYY|YY}\n",argv[0]);         return 4;     }     t=COleDateTime( nYear, nMonth, nDay, nHour, nMin, nSec);     ts=COleDateTimeSpan( lDays, nHours, nMins, nSecs );     for (i=1;i<=N;i++) {         s=t.Format(fmt);         printf("%08d %s\n",i,s);         t=t+ts;     }     return 0; }

user: user-2
content: 不就是一个求日期与2000年1月1日之间的天数么？ 先判断日期是否合法或小于2000年， 然后写个函数计算就可以了，还要有个闰年的判断函数

user: user-3
content: 咦！~~  这LZ什么意思呢？  他是说我们一定会做错，还是说这个题就没有正确答案吗？ 关注下！~~~
user-0 提问: 帮忙看看

回复:
user: user-0
content: 谢了啊，我明白了

user: user-1
content: 其实已经写进去了，不过是二进制的，操作系统在读的时候，发现这不是可以打印的格式，所以会输出空格。 查看下文件的大小，就知道是否写入了。  如果你想写文本的话，用fprintf可以解决。  参考这里：http://stackoverflow.com/questions/4299877/fwrite-problem-cannot-write-in-binary-file

user: user-2
content: “什么都没有”取决于你怎么“看”。

user: user-3
content: 引用 2 楼 u010396781 的回复:试过了，文件创建成功，文件里面什么也没有  检查下fwrite函数的返回值，看看，写是否成功了！

user: user-4
content: 如何确认的没有，应该在函数退出后察看二进制格式的文件

user: user-5
content: 你用二进制查看文件就清楚了。  引用 2 楼 u010396781 的回复:试过了，文件创建成功，文件里面什么也没有

user: user-6
content: FILE* fp = fopen("1.txt","wb");

user: user-7
content: 写一个别的数试试,比如 int n=49;

user: user-0
content: 试过了，文件创建成功，文件里面什么也没有

user: user-5
content: 单步调试看看，是否创建文件就没有成功，或者是写进去了，你自己觉得是乱码而已。  引用 楼主 u010396781 的回复:#include <stdio.h>  int main() { 	FILE* fp = fopen("1.txt","w"); 	if(fp == NULL) 		return 0; 	int n=1;  	fwrite(&n,sizeof(n),1,fp); 	return 0; }  为什么写不进去啊
user-0 提问: 定义变量的位置不同导致结果出问题，搞不明白原因

回复:
user: user-0
content: 谢谢你们的解答吖，明白了，如果放在外面的话，一旦里面置0就不能再置回1了

user: user-1
content: 引用 2 楼 ns2250225 的回复:那我放外面不是假定他是素数吗？ 如果某个数是素数，那么这个flag就修改了，而且在下一次循环时没有得到重置。

user: user-2
content: 另外一个通用的方法是，遇到迷糊的地方在纸上画画图帮助理解。  引用 2 楼 ns2250225 的回复:那我放外面不是假定他是素数吗？

user: user-3
content: 遇到这种情况，就要调试了，快点学会调试可以节省很多时间

user: user-4
content: lz 理解 for 语句的执行顺序码？

user: user-5
content: 这样说吧,你把flag放在里面每次重新进行循环的时候flag都会进行一次flag=1,的初始化. 如果你把flag放在外面,你自己看你的循环体计算过程,i先是等于2; 而J<I的时候是不进行循环的. 所以第一次循环,根据if(flag)判断出正确,所以先输出了2;第二次i是3;第一个判断if(i%j==0)不成立, 所以又输出了一个3;但是当i=4的时候,if(i%j==0)的判断正确了,当正确的时候你给flag付了新 的值,所以flag变成了0; 接下来无论怎么循环flag都是0了对吧. 因此if(flag){printf("%d",i)};是不是不再进行输出了, if(flag)这个判断是指flag等于1的时候,他才会执行,而你的flag经过第三次循环的时候 已经被改为了0.

user: user-2
content: 注意是每个数，你放在外面那么只是对第一个数而言。  引用 2 楼 ns2250225 的回复:那我放外面不是假定他是素数吗？

user: user-6
content: 第三次循环,i=4,j=2时,i%j==0,flag被清零,如果flag=1在外面,flag将永远是0 应该改成 for(i=2;i<=100;i++,flag=1)

user: user-0
content: 那我放外面不是假定他是素数吗？

user: user-2
content: 从逻辑上来讲就是要放在里面的，意思是对于每个数i，都要先假定它是素数flag=1。  引用 楼主 ns2250225 的回复:为什么int flag=1放在for外面就出错了，结果只显示2 3，而把int flag=1放在for里面又正常了，显示100内的素数   #include<stdio.h>    int main()    {         int i,j;        int flag=1;        for(i=2;i<=100;i++)            {                   for(j=2;j<i;j++)                    {                     if(i%j==0){flag=0;break;}                  }              if(flag) printf("%d ",i);           }      return 0;   }
user-0 提问: 这样的地址是否是连续的？

回复:
user: user-1
content: 是。。。。。

user: user-2
content: 目前动态分配的空间地址在逻辑上是连续的-方便管理，提高效率

user: user-3
content: 举个例子，在Windows中，堆是通过他的堆管理器的HeapCreate创建的。而堆内的虚拟地址是通过VirtualAlloc申请的一大块虚拟地址空间。你在调用new/malloc的时候，实际上是间接调用Windows API函数HeapAlloc分配你需要大小虚拟地址空间，堆管理器有他自身的算法来保证连续地址的分配，而无论这段空间是从所创建的哪个堆分配出来的，都是连续的，当空间不足以分配你需要的大小时，HeapAlloc再次调用VirtualAlloc申请更大的虚拟地址空间。  由于虚拟地址空间与物理地址是一个映射关系，那么虚拟地址空间连续，物理地址空间不一定连续！应该说绝大多数时候都不可能是连续的。但是可以保证，new/malloc出的一段虚拟地址是连续的

user: user-4
content: 不需要探究，这是王八的屁股-龟腚。  引用 5 楼 wangyaninglm 的回复:[quote=引用 3 楼 turingo 的回复:] 逻辑上是连续的，但是物理上不一定。   [quote=引用 楼主 wangyaninglm 的回复:]   m_pmatrix=new int[m_vexnum*m_vexnum];   不是new的地址是在堆上，是堆上一片的连续空间么？[/quote] 是不是应该向赵老师，学习输出一下这些所有元素的地址，深入探究一下。。。[/quote]

user: user-0
content: 引用 3 楼 turingo 的回复:逻辑上是连续的，但是物理上不一定。   [quote=引用 楼主 wangyaninglm 的回复:]   m_pmatrix=new int[m_vexnum*m_vexnum];   不是new的地址是在堆上，是堆上一片的连续空间么？[/quote] 是不是应该向赵老师，学习输出一下这些所有元素的地址，深入探究一下。。。

user: user-5
content: 逻辑上肯定是连续的

user: user-4
content: 逻辑上是连续的，但是物理上不一定。   引用 楼主 wangyaninglm 的回复:  m_pmatrix=new int[m_vexnum*m_vexnum];   不是new的地址是在堆上，是堆上一片的连续空间么？

user: user-6
content: 是连续的！ 支持通过地址移动来访问数据的！

user: user-7
content: 一次性new的当然是连续的
user-0 提问: 有没有什么好的  算法案例书籍，推荐推荐

回复:
user: user-0
content: 引用 2 楼 max_min_ 的回复:上面就有案例的！。。  版主   有没有 其他的，，我想看看 算法

user: user-0
content: 引用 1 楼 wusuopuBUPT 的回复:推荐刘汝佳的《算法入门经典》，《算法艺术与信息学竞赛》（黑书），我们学校ACM培训用的书。 豆瓣链接：http://book.douban.com/tag/%E5%88%98%E6%B1%9D%E4%BD%B3  我想要的是  纯  案例的，，，这个是案例  多吗？

user: user-1
content: 上面就有案例的！。。

user: user-2
content: 推荐刘汝佳的《算法入门经典》，《算法艺术与信息学竞赛》（黑书），我们学校ACM培训用的书。 豆瓣链接：http://book.douban.com/tag/%E5%88%98%E6%B1%9D%E4%BD%B3
user-0 提问: linux 平台下的一些开源项目

回复:
user: user-1
content: 引用 6 楼 zhao4zhong1 的回复:《Linux C编程一站式学习》 赵老师这个回复很赞！！！

user: user-2
content: linux 下找不开源的才难好吧

user: user-3
content: 开源网站找找。

user: user-4
content: 《Linux C编程一站式学习》

user: user-5
content: 其实Linux下的东西基本就是开源的。 httpd，postfix，named⋯⋯ 你把主要网络协议的服务器和客户端的代码都看看

user: user-6
content: 学习linux网络编程一定要看的源代码   手动编写的一个HTTP协议的目录浏览和文件下载服务器： http://bbs3.chinaunix.net/viewthread.php?tid=892147&extra=page%3D1%26amp%3Bfilter%3Ddigest libevent的学习 http://www.wangafu.net/~nickm/libevent-book/ lighttpd-1.4.20源码分析分析 http://bbs3.chinaunix.net/viewthread.php?tid=1369986&extra=page%3D1%26amp%3Bfilter%3Ddigest  linux学习之路建议：http://bbs3.chinaunix.net/viewthread.php?tid=1070966&extra=page%3D1%26amp%3Bfilter%3Ddigest

user: user-7
content: Miro(http://www.getmiro.com/) is a popular, free, and open internet TV application.  引用 楼主 goldbeef 的回复:问下 linux平台下有什么比较经典的 开源小项目？   比如说代码量在 在10万行左右，偏网络编程，或IPC之类的， 不太注意GUI设计。

user: user-8
content: jQuery吧

user: user-9
content: 楼主有兴趣一起研究axel吗？我这几天在看
user-0 提问: C程序 如何新建一个数据库？

回复:
user: user-1
content: 可以这样，先弄一个模板，再简单地文件复制就行了

user: user-0
content: 引用 1 楼 user-2 的回复:mdb是access建的文件,最好用它的接口进行访问.  如果你非要自己搞,也可以用c, 创建结构体(结构体按照mdb的格式进行设计),打开文件,写入结构体,关闭文件. 这种方式进行.  我用 ADO 操作的

user: user-2
content: mdb是access建的文件,最好用它的接口进行访问.  如果你非要自己搞,也可以用c, 创建结构体(结构体按照mdb的格式进行设计),打开文件,写入结构体,关闭文件. 这种方式进行.
user-0 提问: 矩阵转置问题！！

回复:
user: user-1
content: 根本不需要什么辅助空间，根据d的取值直接用2维数组输出就可以了，一共就4种情况

user: user-2
content: 把矩阵，看成直线族（一个矩形的各边和内部的点组成） ---实际是点族，坐标就是索引值 a00 的坐标是 （0，0）， 坐标旋转d度以后，求新的矩阵的大小 矩形旋转后，各边和坐标轴平行的矩形的，外接矩形的大小。 也就是原矩形顶点坐标，旋转后的最大最小坐标构成的新矩形的大小。 ----，和每个点的新坐标。可能要加偏移量（减去最小值）。  用新的大小，构造一个新的矩阵 在新矩阵中，每个点初始化为定值（比如 0，负无穷，或者正无穷） 然后把矩阵的每个数据放入对应的坐标位置，形成新的矩阵。

user: user-3
content: 不知道更低复杂度的怎么搞，暂时只能想到O(N*N)空间和O(N*N)时间复杂度的方法了，N是矩阵的行数，对付这种规模的数据应该够用了： （1）旋转90度 =>  逐次将第i行，拷贝到第N-1-i列 （2）旋转180度 => 逐次将第i行，反向拷贝到第N-1-i行 （3）旋转270度 => 逐次将第i行，反向拷贝到第N-1-i列 （4）旋转360度<=> 旋转0度 （5）旋转d度  <=> 旋转(d/90 % 4)*90度

user: user-4
content: http://wenku.baidu.com/link?url=1a14RJdb1zmI59D5ILp8m1JMnK9O3cjBGdxCrbla74Hkrp98vrc3M9CFfVKZ-CC_u-YiAx8Tv2a4VCIWxuwSyL4YwWoXRomckrO8NWRo-AO 在其基础上考虑一下d,然后考虑空格

user: user-4
content: d是90的倍数，这干嘛用？
user-0 提问: 服务器是怎么实现几万甚至更多用户同时使用的？

回复:
user: user-1
content: 引用 12 楼 houzhenghui123 的回复:[quote=引用 11 楼 xiaohuh421 的回复:] 一般都会用到分布式, 分担压力. 多服务器,多进程,多线程,多核 一台服务器不行就两台，两台不行三台，只要架构设计好，扩展性好，连接是无上限的[/quote]  该两位的建议不可取, 对于几万个在线用户,如果只是维护连接的话,肯定不需要多个服务器分布!!!

user: user-2
content: 引用 11 楼 xiaohuh421 的回复:一般都会用到分布式, 分担压力. 多服务器,多进程,多线程,多核 一台服务器不行就两台，两台不行三台，只要架构设计好，扩展性好，连接是无上限的

user: user-3
content: 一般都会用到分布式, 分担压力. 多服务器,多进程,多线程,多核

user: user-4
content: 引用 1 楼 zapperstab 的回复:hash_map,key为fd,value为一个结构体，存放你所需的信息。效率不是问题  我觉得使用hash_map更好。red-black tree的计算量是O(logn)，但是hash_map平均为O(1)。当然前提是hash bucket有足够的大小。

user: user-5
content: 引用 5 楼 xosion 的回复:[quote=引用 1 楼 zapperstab 的回复:] hash_map,key为fd,value为一个结构体，存放你所需的信息。效率不是问题 有什么库？还是自己定义struct value hashfunc(long key)这样的一个函数吗？[/quote] 我也不清楚，服务器端我一般用C++的，hash表不好写，但是楼上所说的红黑树是个好选择，C++ STL的map就是红黑树

user: user-6
content: 引用 7 楼 xosion 的回复:[quote=引用 4 楼 truelance 的回复:] 效率不是问题,一般都是hash查找, 你不会认为是遍历吧 我以为是B树。。。。[/quote]  B树是适用于在硬盘上查找数据的数据结构, 如果被查找的数据能完全放在内存甚至cache中, B树不是好的选择, 甚至不如红黑树.

user: user-0
content: 引用 4 楼 truelance 的回复:效率不是问题,一般都是hash查找, 你不会认为是遍历吧 我以为是B树。。。。

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:参考apache相关源代码。 代码量太大了。。。。海里捞针啊

user: user-0
content: 引用 1 楼 zapperstab 的回复:hash_map,key为fd,value为一个结构体，存放你所需的信息。效率不是问题 有什么库？还是自己定义struct value hashfunc(long key)这样的一个函数吗？

user: user-6
content: 效率不是问题,一般都是hash查找, 你不会认为是遍历吧

user: user-7
content: 一一映射一般用map（基于tree或者hash）

user: user-8
content: 参考apache相关源代码。

user: user-5
content: hash_map,key为fd,value为一个结构体，存放你所需的信息。效率不是问题
user-0 提问: 我比较喜欢c语言，我希望大家能给我推荐一个编辑器，

回复:
user: user-0
content: 你们推荐的都不错，谢谢大家

user: user-1
content: 编辑器必须是SourceInsight

user: user-2
content: 既然不错，为何不给分呢？  引用 8 楼 stackreader 的回复:你们推荐的都不错，谢谢大家

user: user-3
content: VS2008+VC助手，Windows上很方便 Linux上用VI Eclipse也有C++插件支持自动补全的

user: user-2
content: Code::Blocks(http://www.codeblocks.org/)，开源跨平台。  引用 楼主 stackreader 的回复:我现在用sublime，感觉没有一个全局的代码提示，就是比如说加载类库里面的方法进行只能提示这些的

user: user-4
content: vs,vc都蛮好的，如果你真的想学好C的话，用tc吧，他会给你养成良好的编程习惯的！

user: user-5
content: 用qtCreator写C的我是一个人吗

user: user-0
content: 谢谢各位，我是linux下的，

user: user-6
content: vs系列+插件
user-0 提问: 为什么我的代码编译不出a.out 文件，？也没有报编译错误，请大牛们给个明路

回复:
user: user-1
content: 重点是要链接pthread库文件，另外main函数最好这样写： int main(int argc, char* argv[])  引用 6 楼 stackreader 的回复:[quote=引用 2 楼 turingo 的回复:] 需要链接pthread库文件，例如： g++ main.cpp -lpthread  [quote=引用 楼主 stackreader 的回复:] #include <stdio.h> #include <string.h> #include <pthread.h>  extern void *printMessage(void *msg);  int main(int argc, char const *argv[]) {  	pthread_t t1,t2; 	int p1,p2; 	char *msg1 = "this is thread one"; 	char *msg2 = "this is thread two"; 	p1 = pthread_create(&t1,NULL,printMessage,msg1); 	p2 = pthread_create(&t2,NULL,printMessage,msg2);  	pthread_join(t1,NULL); 	pthread_join(t2,NULL); 	char *msg = "this is a fuck test"; 	printf("%s\n", msg); 	return 0; }  void *printMessage(void *msg){  	char *message= (char*)msg; 	printf("%s\n", message);  return NULL; } [/quote]谢谢，我的是 .c文件，我之前也是那样编译的同步过，今天早上可以了  谢谢二位[/quote]

user: user-2
content: 引用 5 楼 stackreader 的回复:[quote=引用 3 楼 user-2 的回复:]  //没有编译错误的话，不会没有a.out可执行文件吧  g++ -o main main.cpp -lphtread  //试试能不能生成main可执行文件谢谢，我的是 .c文件，我之前也是那样编译的同步过，今天早上可以了[/quote]  gcc -o main main.cpp -lphtread

user: user-0
content: 引用 2 楼 turingo 的回复:需要链接pthread库文件，例如： g++ main.cpp -lpthread  [quote=引用 楼主 stackreader 的回复:] #include <stdio.h> #include <string.h> #include <pthread.h>  extern void *printMessage(void *msg);  int main(int argc, char const *argv[]) {  	pthread_t t1,t2; 	int p1,p2; 	char *msg1 = "this is thread one"; 	char *msg2 = "this is thread two"; 	p1 = pthread_create(&t1,NULL,printMessage,msg1); 	p2 = pthread_create(&t2,NULL,printMessage,msg2);  	pthread_join(t1,NULL); 	pthread_join(t2,NULL); 	char *msg = "this is a fuck test"; 	printf("%s\n", msg); 	return 0; }  void *printMessage(void *msg){  	char *message= (char*)msg; 	printf("%s\n", message);  return NULL; } [/quote]谢谢，我的是 .c文件，我之前也是那样编译的同步过，今天早上可以了  谢谢二位

user: user-0
content: 引用 3 楼 user-2 的回复: //没有编译错误的话，不会没有a.out可执行文件吧  g++ -o main main.cpp -lphtread  //试试能不能生成main可执行文件谢谢，我的是 .c文件，我之前也是那样编译的同步过，今天早上可以了

user: user-2
content: //没有编译错误的话，不会没有a.out可执行文件吧  g++ -o main main.cpp -lphtread  //试试能不能生成main可执行文件

user: user-1
content: 需要链接pthread库文件，例如： g++ main.cpp -lpthread  引用 楼主 stackreader 的回复:#include <stdio.h> #include <string.h> #include <pthread.h>  extern void *printMessage(void *msg);  int main(int argc, char const *argv[]) {  	pthread_t t1,t2; 	int p1,p2; 	char *msg1 = "this is thread one"; 	char *msg2 = "this is thread two"; 	p1 = pthread_create(&t1,NULL,printMessage,msg1); 	p2 = pthread_create(&t2,NULL,printMessage,msg2);  	pthread_join(t1,NULL); 	pthread_join(t2,NULL); 	char *msg = "this is a fuck test"; 	printf("%s\n", msg); 	return 0; }  void *printMessage(void *msg){  	char *message= (char*)msg; 	printf("%s\n", message);  return NULL; }

user: user-0
content: 自己顶一个先！！
user-0 提问: 关于select（）函数的问题

回复:
user: user-1
content: 在Windows上，Select忽略第一个参数 Unix/Linux上，第一个参数写成sockfd + 1，系统从最小的描述符遍历到MAX

user: user-2
content: 引用 1 楼 hnwyllmm 的回复:在Windows上，Select忽略第一个参数 Unix/Linux上，第一个参数写成sockfd + 1，系统从最小的描述符遍历到MAX  我也是这样理解的。。
user-0 提问: 控制台程序，如何实现按 ESC 键退出？

回复:
user: user-1
content: int ch; while(true) {    ch=getch();    if(27==ch)      break; }

user: user-2
content: 不能用标准IO，要用控制台IO。

user: user-3
content: 引用 1 楼 turingo 的回复: while(true) {     ch = getch();     if(ch == 27)  /* ESC */         break; }                     [quote=引用 楼主 u011642451 的回复:] 我有这么一个 思路：  while(true) {    if(ESC 键按下)      break; }  请给点代码提示吧，谢谢！[/quote]  非常感谢！

user: user-4
content: 用cin.get()应该就可以了吧——我这个是C++的，C里面应该有类似的

user: user-5
content: 1楼正解。。。

user: user-6
content: linux没有getch这个函数，只能使用getchar，可以这样使用，具体参考stty命令的用法      system ("/bin/stty raw");    int ch = getchar();     if(ch == 27)  /* ESC */         break;     system ("/bin/stty cooked");

user: user-0
content: 引用 1 楼 turingo 的回复: while(true) {     ch = getch();     if(ch == 27)  /* ESC */         break; }    [quote=引用 楼主 u011642451 的回复:] 我有这么一个 思路：  while(true) {    if(ESC 键按下)      break; }  请给点代码提示吧，谢谢！[/quote]  不好意思，是我的疏忽，谢谢，我代码写错了，吧getch 写成了 getchar 所以搞错了  哎……熬夜后脑子到底是不行了……

user: user-7
content: getchar 和 getch 不一样的

user: user-0
content: 上面写错了，不是getchar 是 getch

user: user-0
content: ESC 键，控制台程序根本就不响应这个键 我的程序如下：  int main() { 	int ch=0; 	while(true) 	{ 		if(kbhit()) 		{ 			ch = getchar(); 			if(27==ch) 				break; 		} 	} 	return 0; }  按ESC 键，根本就没有反应

user: user-0
content: 引用 1 楼 turingo 的回复: while(true) {     ch = getch();     if(ch == 27)  /* ESC */         break; }   呵呵，我早试过了，不行

user: user-8
content: while(true) {     ch = getch();     if(ch == 27)  /* ESC */         break; }  引用 楼主 u011642451 的回复:我有这么一个 思路：  while(true) {    if(ESC 键按下)      break; }  请给点代码提示吧，谢谢！

user: user-9
content: //The _getch function reads a single character from the console without echoing. //Function can not be used to read CTRL+Break. //When reading a function key or an arrow key, //_getch must be called twice; the first call returns 0 or 0xE0, //and the second call returns the actual key code. #include <conio.h> #include <windows.h> void main() {     unsigned short k;      while (1) {         Sleep(100);         k=getch();         if (27==k) break;//按Esc键退出         if (0==k||0xe0==k) k|=getch()<<8;//非字符键         cprintf("%04x pressed.\r\n",k);     } }
user-0 提问: setjmp和信号的结合

回复:
user: user-1
content: signal函数，内部和setjmp，longjmp的实现，有一定的关系。 处理不好，会有冲突。

user: user-2
content: 两种异常处理机制不相容 跟 两种防火墙杀毒软件不相容 类似。

user: user-3
content: 当 setjmp 和 longjmp 是一起使用时，它们提供一种方法来执行非本地 goto. 它们通常用来传递给错误处理或恢复以前被调用例程中的代码的执行控制，而无需使用标准的调用或返回约定。 警告说明警告  但是，因为setjmp和 longjmp不支持 c + + 对象语义，并且因为它们可能会降低性能，防止对局部变量的优化，我们建议您不要使用它们在 c + + 程序中。 我们建议使用 try/ catch改为构造。  如果您决定使用 setjmp/ longjmp在 c + + 程序中，还包括 SETJMP。H 或 SETJMPEX。H 以确保正确 c + + 异常处理的函数之间的互动。 如果您使用 /EH 进行编译，本地对象的析构函数调用堆栈展开过程。 如果您使用/EHs编译，以及您的函数调用的函数，它使用一个 nothrow 并使用函数nothrow调用 longjmp，然后析构函数展开可能不会发生，具体取决于优化程序。  在可移植代码中，当非本地goto调用 longjmp执行时，正确销毁的基于帧的对象可能不可靠。   http://technet.microsoft.com/zh-cn/interopmigration/yz2ez4as
user-0 提问: 有关c语言图像处理的图片大小的问题

回复:
user: user-1
content: 直接写入图片文件名调试看看。  引用 4 楼 jinmengjue1989 的回复:引用 3 楼 turingo 的回复:只有单步调试看看。我的ROW 和COL改了编译时没有错的，只是不出来Input the path of the BMP file:没法输入路径，而是出来Press any key to continue,这是为什么啊？

user: user-2
content: 320 是 32 的整数倍，任何因为“位图数据对齐，而产生的问题”，都不存在；  解决这个问题的方案，就是修改 “位图数据对齐，没有正确处理”的错误； 使得任何宽度的位图，都不会有对齐错位的问题。

user: user-0
content: 引用 5 楼 turingo 的回复:直接写入图片文件名调试看看。  引用 4 楼 jinmengjue1989 的回复:引用 3 楼 turingo 的回复:只有单步调试看看。我的ROW 和COL改了编译时没有错的，只是不出来Input the path of the BMP file:没法输入路径，而是出来Press any key to continue,这是为什么啊？直接写是可以的，但是写路径这样就是不行了，把ROW和COL改成比240和320小的就运行正常，要是改大了，就是不行，按理说这就是定义了数组的大小啊？为什么不可以呢？

user: user-3
content: 看楼主的意思，printf("Input the path of the BMP file:\n");   这个没有打出来。可能是楼主本地编译器对堆栈大小有限制。 a[ROW][COL]这个栈数据过大超出编译器的允许最大限制程序加载不起来。 试试改改编译器的设置

user: user-4
content: 参考MSDN98\SAMPLES\VC98\SDK\GRAPHICS\GDI\MANDEL\*.*

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

user: user-2
content: main()里面有个魔数 190  把这个190 的来历搞清楚，也许就解决了。

user: user-5
content: 我用楼主的代码在我的电脑上编了一下，没有楼主所说的现象啊

user: user-0
content: 引用 8 楼 lm_whales 的回复:320 是 32 的整数倍，任何因为“位图数据对齐，而产生的问题”，都不存在；  解决这个问题的方案，就是修改 “位图数据对齐，没有正确处理”的错误； 使得任何宽度的位图，都不会有对齐错位的问题。但是我改成其他的32的倍数也是不行的啊？比如：480*640，这是为什么啊？求指点！

user: user-0
content: 引用 3 楼 turingo 的回复:只有单步调试看看。我的ROW 和COL改了编译时没有错的，只是不出来Input the path of the BMP file:没法输入路径，而是出来Press any key to continue,这是为什么啊？

user: user-1
content: 只有单步调试看看。

user: user-0
content: 自己顶，求高手指点下！！

user: user-0
content: bmp.h是： /*BMP.h*/   #ifndef BMP_H_INCLUDED   #define BMP_H_INCLUDED      typedef unsigned short WORD;   typedef unsigned long DWORD;   typedef long LONG;   typedef unsigned char BYTE;      typedef struct tagBITMAPFILEHEADER   {       WORD bfType;       DWORD bfSize;       WORD bfReserved1;       WORD bfReserved2;       DWORD bfOffBits;   }BITMAPFILEHEADER;      typedef struct tagBITMAPINFOHEADER   {       DWORD biSize;       LONG biWidth;       LONG biHeight;       WORD biPlanes;       WORD biBitCount;       DWORD biCompression;       DWORD biSizeImage;       LONG biXPelsPerMeter;       LONG biYPelsPerMeter;       DWORD biClrUsed;       DWORD biClrImportant;   }BITMAPINFOHEADER;      typedef struct tagRGBQUAD   {       BYTE rgbBlue;       BYTE rgbGreen;       BYTE rgbRed;       BYTE rgbReserved;   }RGBQUAD;      typedef struct tagBITMAPINFO   {       BITMAPINFOHEADER bmiHeader;       RGBQUAD bmiColors[1];   }BITMAPINFO;      #endif
user-0 提问: 输入输出问题

回复:
user: user-0
content: 还是不成啊，怎么弄

user: user-0

user: user-1
content: #include <stdio.h> #include <stdlib.h> typedef struct node { char word; int weight; struct node *left,*right; }HUFFNODE;  int main(void) { HUFFNODE *root,*p; HUFFNODE **F; int i,n,w; char c; printf("请输入叶子个数："); scanf("%d",&n); F=(HUFFNODE **)malloc(n*sizeof(HUFFNODE *)); printf("请输入叶子信息：\n"); for(i=0;i<n;i++) { p=(HUFFNODE *)malloc(sizeof(HUFFNODE)); printf("请输入第%d个叶子的字符",i+1); scanf("%c\n",&c); printf("请输入第%d个叶子的权值",i+1); scanf("%d\n",&w); p->word=c; p->weight=w; p->left =NULL; p->right =NULL; F[i]=p; }     return 0; }  引用 楼主 u010013126 的回复:#include <stdio.h> #include <stdlib.h> typedef struct node { 	char word; 	int weight; 	struct node *left,*right; }HUFFNODE;  int main(void) { 	HUFFNODE *root,*p; 	HUFFNODE **F; 	int i,n,w; 	char c; 	printf("请输入叶子个数："); 		scanf("%d",&n); 	F=(HUFFNODE **)malloc(n*sizeof(HUFFNODE *)); 	printf("请输入叶子信息：\n"); 	for(i=0;i<n;i++) 	{ 		p=(HUFFNODE *)malloc(sizeof(HUFFNODE)); 		printf("请输入第%d个叶子的字符",i+1); 		scanf("%c",&c); 		printf("请输入第%d个叶子的权值",i+1); 		scanf("%d",&w); 		p->word=c; 		p->weight=w; 		p->left =NULL; 		p->right =NULL; 		F[i]=p; 	}     return 0; } 这个输入输出有问题，为何不行，帮我解决一下

user: user-0
content: 在输入一个后就不成了，程序运行不成啊

user: user-2
content: 什么问题？  建议： 1 检查 scanf返回值！确认每次输入的数的类型是匹配的        2 处理下每次输入的回车符的干扰！
user-0 提问: c语言，如何在输入的字符串中找到中文字符？

回复:
user: user-1
content: 中文是两个字节，需要这样配套查找：  while(*str) { 	/** 中文字符，每次加两个字节 */ 	if(*str & 0x80) 	{ 		str++; 		str++; 	} 	/** 英文字符，每次加一个字节 */ 	else 	{ 		str++; 	} }  引用 楼主 u013022580 的回复:如题。 我查到可以通过if(b[0]>0x80)判断，结果发现行不通。。。 谢谢啦~
user-0 提问: 函数的参数列表里为啥不能用常量？

回复:
user: user-1
content: 忘记说了，const可以直接转为non-const，前提是发生拷贝，也就是值传递。

user: user-1
content: non-const可以自动转为const，但const不能直接转为non-const

user: user-2
content: 在作为参数时, 数组和指针是等价的. 所以你在函数里修改了值, 函数外的值也会发生变化.

user: user-3
content: void add(int data[], int addend[], int* result); 函数定义是 int data[] 参数是const int data[] 类型都不一样啊 不知道你怎么能够编译通过的啊

user: user-4
content: 传入的是数组的地址，当然不能修改data中的内容，而且你的函数设计和调用明显矛盾，明明是常量数据为何又要去修改它，真是匪夷所思！  引用 楼主 u012931864 的回复:定义了一个函数是这样的： void add(int data[], int addend[], int* result); 引用是这样的: const int data[]={1,2,3,4,5,6},addend[]={6,5,4,3,2,1}; ..... int main(void) {    ...   add(data,addend,result);   ... } 函数的具体实现里对data和addend里元素的值做了改变，可是这与外面的data和addend数组无关啊～
user-0 提问: C语言如何从特殊的地方截取字符串

回复:
user: user-1
content: 引用 1 楼 turingo 的回复: #include <string.h> #include <stdio.h>  int main() { 	char text[] = "VL04a+80ms+VL04b+10ms+VL04c"; 	char* d = "+"; 	char* p = strtok(text, d); 	while(p != NULL) 	{ 		printf("%s\n", p); 		p = strtok(NULL, d); 	}  	return 0; }   这 无疑是用strtok函数最为方便了！

user: user-2
content: #include <string.h> #include <stdio.h>  char string[] = "VL04a+80ms+VL04b+10ms+VL04c"; char seps[]   = "+"; char *token;  void main( void ) { 	printf( "%s\n\nTokens:\n", string ); 	/* Establish string and get the first token: */ 	token = strtok( string, seps ); 	while( token != NULL ) 	{ 		/* While there are tokens in "string" */ 		printf( " %s\n", token ); 		/* Get next token: */ 		token = strtok( NULL, seps ); 	} }

user: user-3
content: #include <string.h> #include <stdio.h>  int main() { 	char text[] = "VL04a+80ms+VL04b+10ms+VL04c"; 	char* d = "+"; 	char* p = strtok(text, d); 	while(p != NULL) 	{ 		printf("%s\n", p); 		p = strtok(NULL, d); 	}  	return 0; }  引用 楼主 tanqiyingk 的回复:例如：    有字符串：'VL04a+80ms+VL04b+10ms+VL04c'  我需要将字符串从有加号的地方截开变成5个字符串 那么5个字符串分别是： 'VL04a' '80ms' 'VL04b' '10ms' 'VL04c' 请懂的朋友解答下，谢谢！！
user-0 提问: c语言求指教

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h>  int i,flag,max,j,k,t[257]; char c,s[257]; int main(){     scanf("%c",&c);     max=1;     while(c!='?'){         flag=0;         for (i=1;i<=max;i++)             if(s[i]==c){                 t[i]++;                 flag=1;                 break;             }         if (flag==0){             max++;             s[max]=c;             t[max]=1;         }         scanf("%c",&c);     }     for (i=1;i<max;i++)         for(j=i+1;j<=max;j++)             if (t[i]<t[j]){                 k=t[i];                 t[i]=t[j];                 t[j]=k;                 c=s[i];                 s[i]=s[j];                 s[j]=c;             }     for(i=1;i<=max;i++)         printf("%c:%d\n",s[i],t[i]);     return 0; }  引用 楼主 u012427887 的回复:、输入一个字符串，以‘？’结束，统计各字母出现的次数，并按字母出现的多少输出（先输出字母出现多的，次数相同的按字母表顺序输出，不出现的字母不输出）。

user: user-2
content: 比较简单的出题目！ 可以自己先动手写写！
user-0 提问: 编写好了一个c程序，想给做个界面，可以输入输出的那种！有没有什么简单的方法啊？简单的界面就可以了！

回复:
user: user-0
content: 引用 8 楼 BlackKOL 的回复:引用 7 楼 max_min_ 的回复:[quote=引用 4 楼 jinmengjue1989 的回复:] [quote=引用 2 楼 user-5 的回复:] 可以考虑使用MFC创建一个基于对话框的小程序。有没有什么简单的方法啊？感觉MFC上手太慢了，也不知道应该把这个程序放在哪个类下面，因为急着用，没有时间了！ 学Qt去吧！不要搞MFC了！[/quote]  掏钱让人写吧, 还搞什么自己开发[/quote]这不是不会才学呢么，至于说话这么难听不啊！

user: user-1
content: 引用 7 楼 max_min_ 的回复:引用 4 楼 jinmengjue1989 的回复:[quote=引用 2 楼 user-5 的回复:] 可以考虑使用MFC创建一个基于对话框的小程序。有没有什么简单的方法啊？感觉MFC上手太慢了，也不知道应该把这个程序放在哪个类下面，因为急着用，没有时间了！ 学Qt去吧！不要搞MFC了！[/quote]  掏钱让人写吧, 还搞什么自己开发

user: user-2
content: 引用 4 楼 jinmengjue1989 的回复:引用 2 楼 user-5 的回复:可以考虑使用MFC创建一个基于对话框的小程序。有没有什么简单的方法啊？感觉MFC上手太慢了，也不知道应该把这个程序放在哪个类下面，因为急着用，没有时间了！ 学Qt去吧！不要搞MFC了！

user: user-3
content: 就命令行吧。 你可以让用户输入目录路径，然后便利目录

user: user-0
content: 引用 2 楼 user-5 的回复:可以考虑使用MFC创建一个基于对话框的小程序。有没有什么简单的方法啊？感觉MFC上手太慢了，也不知道应该把这个程序放在哪个类下面，因为急着用，没有时间了！

user: user-4
content: 如果是我，用VB6弄个窗口界面，用Shell函数调用C生成的exe。 用文本文件在VB6和C之间传递信息。  不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。

user: user-5
content: 可以考虑使用MFC创建一个基于对话框的小程序。

user: user-0
content: 自己顶下，求高手指点！！
user-0 提问: Linux下执行程序后生成的文件，用cat打开正常，用emeditor打开就是会出现一些乱码

回复:
user: user-1
content: 编译不一致造成的吧！而且只是我们看到乱码而已！

user: user-2
content: 可能是cat的时候是UTF-8的编码，而emeditor编辑的时候是另外一种编码。  引用 楼主 bobbyzhu9505 的回复:cat文件，显示的是： spawn su root: パスワード: [root@{HOST_NAME} {FOLDER_NAME}]# sh FT__SWITCH_001_037_SUB2.sh [root@{HOST_NAME} {FOLDER_NAME}]# exit exit  emeditor打开，显示的是： spawn su root パスワード: ]0;cob@localhost:{FTTP_WORKDIR}/cobolsrc/cobol_lnx_v1/Win-Linux/max_path[?1034h[root@{HOST_NAME} {FOLDER_NAME}]# sh FT__SWITCH_001_037_SUB1.sh ]0;cob@localhost:{FTTP_WORKDIR}/cobolsrc/cobol_lnx_v1/Win-Linux/max_path[root@{HOST_NAME} {FOLDER_NAME}]# exit exit  上面红色的就是不应该有的，哪位大神帮忙看看啊

user: user-3
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
user-0 提问: 关于通信中select的问题

回复:
user: user-1
content: 引用 5 楼 shijie_nanjing 的回复:[quote=引用 3 楼 max_min_ 的回复:] 一直阻塞阿！轮询检测文件描述符是否可读，可写或者异常！ 还是不太懂，能不能详细解释下可读可写变化？ [/quote] lz看过《unix网络编程》吗？里面有很详细的介绍，或者google一下也可以 概况的说一下，套接字满足以下任一条件可读： 1.普通意义上的可读，即接收区字节数大于等于其低水位标记 2.读半部关闭，即对方发了一个FIN分节过来，套接字可读但是读操作返回0 3.监听套接字且连接不为0 4.该socket上有错误，读操作返回-1  以上四点都可以让select返回

user: user-2
content: 引用 8 楼 shijie_nanjing 的回复:[quote=引用 6 楼 max_min_ 的回复:] [quote=引用 5 楼 shijie_nanjing 的回复:] [quote=引用 3 楼 max_min_ 的回复:] 一直阻塞阿！轮询检测文件描述符是否可读，可写或者异常！ 还是不太懂，能不能详细解释下可读可写变化？ [/quote] google下select函数的基本用法！[/quote] google我都查过了，还是不太懂。换句话问，我就想知道什么时候有返回值？什么时候一直死等？可读可写是指的文件描述符的一种设定，还是说有数据需要读写？[/quote] 轮询的是第一个传起来的socket的访问，有可读的数据了，或者准备好的写数据，或者捕获到的异常，就返回了！

user: user-0
content: 引用 6 楼 max_min_ 的回复:[quote=引用 5 楼 shijie_nanjing 的回复:] [quote=引用 3 楼 max_min_ 的回复:] 一直阻塞阿！轮询检测文件描述符是否可读，可写或者异常！ 还是不太懂，能不能详细解释下可读可写变化？ [/quote] google下select函数的基本用法！[/quote] google我都查过了，还是不太懂。换句话问，我就想知道什么时候有返回值？什么时候一直死等？可读可写是指的文件描述符的一种设定，还是说有数据需要读写？

user: user-3
content: 我的理解是获取了IO

user: user-2
content: 引用 5 楼 shijie_nanjing 的回复:[quote=引用 3 楼 max_min_ 的回复:] 一直阻塞阿！轮询检测文件描述符是否可读，可写或者异常！ 还是不太懂，能不能详细解释下可读可写变化？ [/quote] google下select函数的基本用法！

user: user-0
content: 引用 3 楼 max_min_ 的回复:一直阻塞阿！轮询检测文件描述符是否可读，可写或者异常！ 还是不太懂，能不能详细解释下可读可写变化？

user: user-0
content: 引用 3 楼 max_min_ 的回复:一直阻塞阿！轮询检测文件描述符是否可读，可写或者异常！  可读，可写是指socket的设定，还是说socket有接续侧，有数据可以读取？ socket有个shutdown方法，可以关闭读写，shutdown的时候会触发select吗？

user: user-2
content: 一直阻塞阿！轮询检测文件描述符是否可读，可写或者异常！

user: user-4
content: 不是变化，是文件描述符对应的socket可读或者可写。

user: user-5
content: 顶。。。。。。。。。。。
user-0 提问: 新手求教书上的题目 小写的a根据附录A中的ASCII表找出对应的数值 97对应的是a（a上面有2点上面）

回复:
user: user-1
content: 引用 2 楼 nice_cxf 的回复:a 十进制 102 十六进制61 A 十进制 62 十六进制41 9 十进制 54 十六进制39 ...... 这什么破书啊，0x61=97,0x41=65,0x39=57 顶啊。楼主自己都没算一下十进制和十六进制的结果能不能对上吗？

user: user-2
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？

user: user-3
content: 你在自己电脑上测试一下就知道是谁错了

user: user-4
content: a 十进制 102 十六进制61 A 十进制 62 十六进制41 9 十进制 54 十六进制39 ...... 这什么破书啊，0x61=97,0x41=65,0x39=57

user: user-5
content: printf("%d",'a');//用这个打印出来时多少就是多少
user-0 提问: TC2.0 下定时器使用  DOS

回复:
user: user-1
content: 在DoxBox下运行

user: user-1
content: /***NOTE:     This is an interrupt service routine.  You can NOT compile this     program with Test Stack Overflow turned on and get an executable     file which will operate correctly. */  #include <stdio.h> #include <dos.h> #include <conio.h>  #define INTR 0X1C    /* The clock tick interrupt */  #ifdef __cplusplus     #define __CPPARGS ... #else     #define __CPPARGS #endif  void interrupt ( *oldhandler)(__CPPARGS);  int count=0;  void interrupt handler(__CPPARGS) { /* increase the global counter */    count++;  /* call the old routine */    oldhandler(); }  int main(void) { /* save the old interrupt vector */    oldhandler = getvect(INTR);  /* install the new interrupt handler */    setvect(INTR, handler);  /* loop until the counter exceeds 20 */    while (count < 20)       printf("count is %d\n",count);  /* reset the old interrupt handler */    setvect(INTR, oldhandler);     return 0; }
user-0 提问: 有点不懂这个小代码

回复:
user: user-1
content: C/C++默认都是从右向左求值运算的，至于值为什么不同，是编译器实现不同，这种非正常的写法，标准没有规定，是未定义的

user: user-2
content: 我是来水钱的！！

user: user-3
content: 蛋疼的编码方式。

user: user-4
content: 同意2楼所言。一个语句里最多一个++操作。

user: user-5
content: 入栈顺序不同，结果不同~

user: user-6
content: 有些傻逼公司或者学校的考试就喜欢这种问题，似乎显得自己多么牛B，其实这种问题毫无研究价值。不同的编译器的实现不一定相同。当你以为在VC6.0下理解了他的含义，然后惊人的发现原来在VS2008下答案不是这样的。。。瞬间心理防线彻底被摧毁！！！  不要在同一句代码当中操作同一个变量！！!

user: user-7
content: 引用 2 楼 KANDANKK 的回复:引用 1 楼 sundq12 的回复:不要研究这种代码，会把你带到坑里去的。为什么？ 这种代码的结果取决于编译器读取函数参数时是从左至右还是从右至左，严重降低了代码的移植性。只有蛋疼的人才会人为创造不爽。  类似的这种蛋疼的代码分为两种： 1. 上述不可移植性的，属于垃圾代码； 2. 有固定的执行方式，但人看的时候要去查C语言优先级的，降低了代码易读性，不推荐。但这种东西面试什么的特别喜欢倒腾。

user: user-8
content: printf中是从最右边i++开始计算的，至于值为什么是那样的，这个要了解编译器的编译机制

user: user-9
content: 怎么还这么多人纠结这个。 ++i;先加，再运算 i++;先运算，再加 知道就这个道理就行了。  强烈鄙视那些，以这些东西面试的面试官...

user: user-10
content: 不折腾！折腾误国误民！！

user: user-11
content: 看置顶贴吧，里面说的很详细，主要是顺序点的确定决定的

user: user-11
content: 不同编译器，不同环境结果不同，我这里是7,7,7

user: user-12
content: 别说不同编译器 ，就是相同编译器，不同编码选项，都会有不同的结果，比如debug和release.

user: user-13
content: 看置顶贴吧，这是未定义行为。这种自己都不能说出执行顺序的语句不要写。 这种语句，不同的编译器，有不同的解释，执行结果是不一样的，你没必要研究这个。

user: user-14
content: 引用 2 楼 KANDANKK 的回复:引用 1 楼 sundq12 的回复:不要研究这种代码，会把你带到坑里去的。为什么？没有意义。

user: user-15
content: 参考http://bbs.csdn.net/topics/370153775  引用 楼主 KANDANKK 的回复:#include<stdio.h> void main() {int i=7; printf("%d\n%d\n%d\n",++i,--i,i++); } 为什么是7,6,7，而不是7,6,8？

user: user-0
content: 引用 1 楼 sundq12 的回复:不要研究这种代码，会把你带到坑里去的。为什么？

user: user-14
content: 不要研究这种代码，会把你带到坑里去的。
user-0 提问: 如何发帖---给新手们

回复:
user: user-1
content: 善待每一个热心帮助的人，即使没有帮你解决当下问题！

user: user-2
content: 尽量先自己调试，如果调试过仍无法解决可以google。如果已google，先注明我已google过，但没有找到合适的答案。  详情见，C++版置顶贴：提问的智慧

user: user-3
content: 如果是语法问题，最好自己看书或 google

user: user-3
content: 发帖前自己先仔细想想，动手做做
user-0 提问: 关于 offset address 的问题，求解大神

回复:
user: user-0
content: 引用 10 楼 zhao4zhong1 的回复:如果a的地址是0x00001000,那么偏移四个字节地址是0x00001004 如果b的地址是0x00001004,那么偏移一个字节地址是0x00001005还是胸章多的牛，那个版主回答的太不认真了

user: user-1
content: 引用 楼主 u011959714 的回复:int a=0; char b=0; 如果a的地址是0x00001000,那么偏移一步（四个字节）地址是多少（0x00001100吗）；偏移一位（8个二进制位），地址是多少（0x00001001吗）  如果b的地址是0x00002000,那么偏移一步（一个字节）地址是多少（0x00001008吗）；偏移一位（8个二进制位），地址是多少（0x00001001吗） 楼主，这0x是16进制的前缀啊。0x1100-0x1000=0x100=256. 另外内存里面貌似是没有按位偏移的。想玩按位取值的话，只有基于byte的运算了。

user: user-2
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-2
content: 如果a的地址是0x00001000,那么偏移四个字节地址是0x00001004 如果b的地址是0x00001004,那么偏移一个字节地址是0x00001005

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

user: user-3
content: 地址对应的最小单位应该是字节

user: user-0
content: 引用 1 楼 worldy 的回复:int +4 char +1这个知道，我问的是地址的值，编译器测不出来

user: user-4
content: int +4 char +1

user: user-5
content: 地址的最小单位是 byte, 位是没有所谓地址的，只能对位所在的变量求 &

user: user-0
content: 高手

user: user-0
content: 没人吗 ？在线等

user: user-6
content: 引用 2 楼 u011959714 的回复:[quote=引用 1 楼 worldy 的回复:] int +4 char +1这个知道，我问的是地址的值，编译器测不出来[/quote]用编译器断电调试，然后watch变量即可看到。
user-0 提问: 数据结构c语言。函数问题

回复:
user: user-1
content: 代码的容错性，健壮性， 不是靠语言自身，或者库函数实现的； 而是靠程序员自己实现的。  你的程序，自己没有考虑容错性，健壮性。 问题当然要自己解决。

user: user-2
content: 咦？我怎么又来了！

user: user-2
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 whlie (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： whlie (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-3
content: while (!feof(fp)) 如果文件为空的话，由于这个条件应该不会开始循环吧？那么最后返回的应该是一个空的head指针啊。

user: user-2
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 whlie (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： whlie (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。  另外请检查fscanf函数的返回值！

user: user-4
content: q=(Vlist)malloc(sizeof(V)); memset(q, 0 , sizeof(V));

user: user-5
content: q=(Vlist)malloc(sizeof(V));//在分配内存之后，使用bzero初始化分配的内存，就不会为有乱码了

user: user-6
content: 顺序读肯定是要读到出错为止，最后一个节点删除不就得了...

user: user-7
content: q=(Vlist)calloc(sizeof(V));

user: user-0
content: 二楼，这个不能用啊……
user-0 提问: 求改正！

回复:
user: user-1
content: 引用 5 楼 u012848622 的回复:这是题目要; 编写用指针变量作为函数参数实现两个数的交换的函数，主函数输入两个个数都为10的数组A，B，调用所编写的函数交换数组A，B中对应元素的值。  #include<stdio.h>  void swap(int a[],int b[]); int main() { 	int i; 	int a[10],b[10]; 	int *p; 	int *q; 	p=a; 	q=b; 	printf("please enter 10 score to a[]"); 	for(i=0;i<10;i++) 	{ 		scanf("%d",&a[i]); 		getchar(); 	}	 	printf("please enter 10 score to b[]"); 	for(i=0;i<10;i++) 	{ 		scanf("%d",&b[i]); 		getchar(); 	} 	swap(a ,b); 	for(i=0;i<10;i++) 	{ 		printf("%d",a[i]); 	} 	printf("\n"); 	for(i=0;i<10;i++) 	{ 		printf("%d",b[i]); 	} }  void swap(int a[], int b[]) { 	int i,temp; 	for(i=0; i < 10; i++) 	{ 		temp = a[i]; 		a[i] = b[i]; 		b[i] = temp; 	}  }

user: user-0
content: 这是题目要; 编写用指针变量作为函数参数实现两个数的交换的函数，主函数输入两个个数都为10的数组A，B，调用所编写的函数交换数组A，B中对应元素的值。

user: user-2
content: swap(int a[10],int b[10]); ==> for(int i=0;i<10;i++) swap(a[i],b[i];  swap(int a[],int b[]) { int temp; temp=*p; *p=*q; *q=temp; }  ==> swap(int* a,int *b) { int temp; temp=*a; *a=*b; *b=temp; }

user: user-3
content: 好多问题，不能直视啊！#include<stdio.h>  void swap(int* p,int *q);//前置声明  int main(){//K&R风格的太老了吧，建议改成这种，还有{忘了写了 	int i; 	int a[10],b[10]; 	int *p; 	int *q; 	p=a; 	q=b; 	printf("please enter 10 score to a[]"); 	for(i=0;i<10;i++) 	{ 		scanf("%d",&a[i]); 	} 	printf("please enter 10 score to b[]"); 	for(i=0;i<10;i++) 	{ 		scanf("%d",&b[i]); 	} 	swap(a,b);//传递数组，只要数组名就可以了，你那个传递的是a[10]的值，不是一串数组               //a[10]还超过最大上限了，溢出了 	for(i=0;i<10;i++) 	{ 		printf("%d",a[i]); 	} 	printf("\n"); 	for(i=0;i<10;i++) 	{ 		printf("%d",b[i]); 	} 	return 0; } void swap(int* p,int *q)//你定义的是a,b，哪里来的p、q { 	int temp; 	for(int i=0;i<10;i++,p++,q++){//你那个只能交换a[0]和b[0]，但不能交换整个数组 		temp=*p; 		*p=*q; 		*q=temp; 	} }

user: user-4
content: 你能不能认真一点，都不知道你要问什么，还有你能不能把代码格式化一下呀，这样的贴有人回答就怪了。

user: user-5
content: swap(int a[10],int b[10]);想交换最后两个元素请用 a[9],b[9]; 想交换两个数组中的所有元素请改写交换函数，使用正确的指针调用方式 ----------------------------------------------------------------- 发帖请先注明自己的意图，有问题的地方

user: user-6
content: 引用 3 楼 Adol1111 的回复:好多问题，不能直视啊！#include<stdio.h>  void swap(int* p,int *q);//前置声明  int main(){//K&R风格的太老了吧，建议改成这种，还有{忘了写了 	int i; 	int a[10],b[10]; 	int *p; 	int *q; 	p=a; 	q=b; 	printf("please enter 10 score to a[]"); 	for(i=0;i<10;i++) 	{ 		scanf("%d",&a[i]); 	} 	printf("please enter 10 score to b[]"); 	for(i=0;i<10;i++) 	{ 		scanf("%d",&b[i]); 	} 	swap(a,b);//传递数组，只要数组名就可以了，你那个传递的是a[10]的值，不是一串数组               //a[10]还超过最大上限了，溢出了 	for(i=0;i<10;i++) 	{ 		printf("%d",a[i]); 	} 	printf("\n"); 	for(i=0;i<10;i++) 	{ 		printf("%d",b[i]); 	} 	return 0; } void swap(int* p,int *q)//你定义的是a,b，哪里来的p、q { 	int temp; 	for(int i=0;i<10;i++,p++,q++){//你那个只能交换a[0]和b[0]，但不能交换整个数组 		temp=*p; 		*p=*q; 		*q=temp; 	} } +1
user-0 提问: 菜鸟自学C编的一个程序，但是一运行就提示停止工作，望大神指导！

回复:
user: user-1
content: for(i=0;i<n;i++)         {p=BT;         for(j=1;j<dpth;j++)         {             if(p->state)              { p->state=0;                p=p->rtree;}              else              {                  p->state=1;                  p=p->rtree;                  }             }         printf("%d",p->data); n输入是做什么用的？另外无论节点状态如何，都是往右面节点走，逻辑出错了吧？

user: user-1
content: for(i=2;i<=m-1;i++)     {         p=NULL;         p=(tlink)malloc(sizeof(treenode));         p->data=i;         p->state=0;         p->ltree=p->rtree=NULL;         EnQueue(Q,p);         if(EmptyQueue(Q))         q=Gettop(Q);         if(p&&q)        { if(m%2==0)q->ltree=p;         else q->rtree=p;}         if(i%2==1)DeQueue(Q);     } 这段代码的本意是想做什么？创建一个Queue吗？ 另外，能不能先把你的代码排一下啊？看得头痛。。。

user: user-2
content: 你单步跟踪执行下. 对程序的调试是程序员的基本功.

user: user-3
content: 我调试代码一般打个断点，或者加个测试语句，看一下和自己预期的是否有问题

user: user-0
content: n是小球的个数！

user: user-0
content: 多谢各位了！刚开始练，代码格式什么的没在意！多谢！
user-0 提问: 一个很简单的贪心问题，看下为什么会超时啊

回复:
user: user-1

user: user-0
content: 引用 1 楼 user-2 的回复:题目中的输入描述第一句是"You will be given a number of cases in the input.",但样例输入缺了这个数.而LZ程序是按错误的样例输入编写的,即没有处理第一个数.  http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1161中的样例输入与题目中的描述是一致的.建议LZ试一下增加处理case数的处理. 应该不是这个问题的了

user: user-2
content: 题目中的输入描述第一句是"You will be given a number of cases in the input.",但样例输入缺了这个数.而LZ程序是按错误的样例输入编写的,即没有处理第一个数.  http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1161中的样例输入与题目中的描述是一致的.建议LZ试一下增加处理case数的处理.

user: user-2
content: 如下修改可在ZO上AC：  #include <stdio.h> #include <stdlib.h> #include<string.h>  int h; int fi[30]; int di[30]; int ti[30]; int num;  void regret() {     int tem=0;     int max=0;     int remain;     /*删int fish[30]={0};*/     int anstime[30]={0};     int temtime[30]={0};     int i,j;     int fishnum;     int cur;     for(i=0;i<num;i++)     {        memset(temtime, 0, sizeof(temtime));/*加*/        remain=h;        fishnum=0;        for(j=0;j<=i;j++)          remain-=ti[j];        /*删 memcpy(fish,fi,sizeof(fi));*/        if (remain < 0) continue; /*加. 如果没有此行,当remain<0导致下面死循环而超时*/        while(remain)        {            cur=0,tem=0; /*改 tem=fish[0]*/            for(j=0;j<=i;j++)/*改 for(j=1;j<=i;j++)*/            {                if(tem<fi[j]-di[j]*temtime[j]) /*改 if(tem<fish[j])*/                {                    tem=fi[j]-di[j]*temtime[j];                    cur=j;                }            }             /*删 fish[cur]-=di[cur];*/            fishnum+=tem;            /*删             if(fish[cur]<0)               fish[cur]=0;*/            temtime[cur]++;            remain--;        }        if(fishnum>max)        {            max=fishnum;            memcpy(anstime,temtime,sizeof(anstime));        }        /*memset(temtime,0,sizeof(temtime));*/     }     for(i=0;i<num-1;i++)     printf("%d, ",anstime[i]*5);     printf("%d\n",anstime[num-1]*5);     printf("Number of fish expected: %d\n",max);     memset (anstime,0,sizeof(anstime)) ; }  int main() {     int i;     int t0, t1; /*加*/     scanf("%d", &t0); /*加*/     while (t0--) /*加*/     { /*加*/       t1 = 0; /*加*/       scanf("%d",&num);       while(num)       {           if (t1++) printf("\n"); /*加*/           scanf("%d",&h);           h=h*12;           for(i=0;i<num;i++)             scanf("%d",&fi[i]);           for(i=0;i<num;i++)             scanf("%d",&di[i]);           for(i=1;i<num;i++)              scanf("%d",&ti[i]);           regret();           memset (fi,0,sizeof(fi)) ;           memset (di,0,sizeof(di)) ;           memset (ti,0,sizeof(ti)) ;           scanf("%d",&num);       } /*加*/       if (t0 > 0) printf("\n"); /*加*/     }     return 0; }
user-0 提问: 函数行参中的*&同时出现什么意思

回复:
user: user-1
content: C的伪码； C++的引用。

user: user-2
content: //char (*(*x[3])())[5];//x是什么类型的变量? // //分析C语言声明，关键是搞清楚这个变量是个什么东西（函数、指针、数组）， //是函数那么剩下的就是他的参数和返回值， //是指针那剩下部分是说明他指向什么， //是数组剩下的部分就是说明数组的成员是什么类型。 //解析C语言声明规则： //从左侧第一个标识符开始，按照优先级进行结合。*表示是..的指针，const表示只读的，volatile表示可变的，[]表示是数组，()表示是函数。 // //x和[3]结合说明是一个大小为3的数组，该数组指向了一个指针，该指针指向一个函数，该函数的无参数，返回一个指针，该指针指向一个大小为5的char型数组 #include <stdio.h> #include <typeinfo.h> char num[5]; char (*x00())[5] {     return # } int main() {     char (*x000)[5];//返回值     char (*(x00)())[5];//函数原型，参数为空，返回值为指针     char (*(*x0)())[5];//数组的元素，是个函数指针     char (*(*x[3])())[5];//是个数组，大小为3      x0 = x00;     x[0] = x0;     x[1] = x0;     x[2] = x0;     printf("typeid(x).name() is %s\n",typeid(x).name());     return 0; } //typeid(x).name() is char (* (__cdecl**)(void))[5]

user: user-3
content: 版主精辟，是指针的引用

user: user-4
content: 引用 4 楼 zaixiankaifa 的回复:先取地址再解引用不懂没事，但不能不懂装懂。 你说的先取地址再解引用应该是这个样子的。int a; int* p=&a;//取地址 int b=*p;//解引用 int b=*(&a);//合并的写法 这个和那个根本就没关系，这是C++里的引用，是对一个指针的引用，别误导别人啊。

user: user-5
content: 先取地址再解引用

user: user-4
content: 前者是指针，后者是引用。配合使用还是比较多的，比如在链表里面。举个例子吧： void create(Node *node){//改成Node *&node再试试     ……     node = (Node*)malloc(sizeof(Node));     …… }  int main(){     Node *p=NULL;     create(p);     ……//你可以观察下，执行后的p是否有分配空间     return 0; } 这里的问题，主要是指针本身是值传递的形式，他所指向的空间才是地址传递的。所以实参指针，和形参指针不是一个东西。如果你针对形参指针本身的操作，而不是里面的内容的话，那是无效的，因为你改变的只是一个局部变量。  解决方法就是把实参指针的地址一起传递过去，或者把这个指针return回去，还有就是你看到的传递指针的引用。关于C++的引用自己去了解下吧。简单来说就是引用变量和实际的参数是绑定在一起的，只是一个别名，两者是一个东西。

user: user-6
content: HL只是一个变量名而已！ LNode *&Hl; // 传的参数为LNode *类型变量的引用而已！ 因为LNode *a本身没有分配地址，所以传引用初始化的时候分配地址，当然传双指针也是可以的！

user: user-7
content: 对LNode指针的引用，逻辑上，相当于  LNode**

user: user-8
content: 指针的引用，你可以把指针看成了普通变量，然后加上引用，就会明白了。 当然，指针的引用int *&是正确的，切记别写成这样int &*  这种写法是错误的
user-0 提问: 大家帮忙看看这段代码，有几个问题

回复:
user: user-0
content: 另一个问题也弄明白了，，279行输入后没有接收回车

user: user-0
content: 引用 1 楼 u012840458 的回复:第264行==写成了=嗷，嗷。忘了这个

user: user-1
content: 引用 1 楼 u012840458 的回复:第264行==写成了=

user: user-2
content: 第264行==写成了=