Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: Linux下C语言获得系统时间的方法

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <string.h> #ifdef WIN32     #include <windows.h>     #include <io.h> #else     #include <unistd.h>     #include <sys/time.h>     #include <pthread.h>     #define  CRITICAL_SECTION   pthread_mutex_t     #define  _vsnprintf         vsnprintf #endif //Log{ #define MAXLOGSIZE 20000000 #define MAXLINSIZE 16000 #include <time.h> #include <sys/timeb.h> #include <stdarg.h> char logfilename1[]="MyLog1.log"; char logfilename2[]="MyLog2.log"; static char logstr[MAXLINSIZE+1]; char datestr[16]; char timestr[16]; char mss[4]; CRITICAL_SECTION cs_log; FILE *flog; #ifdef WIN32 void Lock(CRITICAL_SECTION *l) {     EnterCriticalSection(l); } void Unlock(CRITICAL_SECTION *l) {     LeaveCriticalSection(l); } #else void Lock(CRITICAL_SECTION *l) {     pthread_mutex_lock(l); } void Unlock(CRITICAL_SECTION *l) {     pthread_mutex_unlock(l); } #endif void LogV(const char *pszFmt,va_list argp) {     struct tm *now;     struct timeb tb;      if (NULL==pszFmt||0==pszFmt[0]) return;     _vsnprintf(logstr,MAXLINSIZE,pszFmt,argp);     ftime(&tb);     now=localtime(&tb.time);     sprintf(datestr,"%04d-%02d-%02d",now->tm_year+1900,now->tm_mon+1,now->tm_mday);     sprintf(timestr,"%02d:%02d:%02d",now->tm_hour     ,now->tm_min  ,now->tm_sec );     sprintf(mss,"%03d",tb.millitm);     printf("%s %s.%s %s",datestr,timestr,mss,logstr);     flog=fopen(logfilename1,"a");     if (NULL!=flog) {         fprintf(flog,"%s %s.%s %s",datestr,timestr,mss,logstr);         if (ftell(flog)>MAXLOGSIZE) {             fclose(flog);             if (rename(logfilename1,logfilename2)) {                 remove(logfilename2);                 rename(logfilename1,logfilename2);             }         } else {             fclose(flog);         }     } } void Log(const char *pszFmt,...) {     va_list argp;      Lock(&cs_log);     va_start(argp,pszFmt);     LogV(pszFmt,argp);     va_end(argp);     Unlock(&cs_log); } //Log} int main(int argc,char * argv[]) {     int i; #ifdef WIN32     InitializeCriticalSection(&cs_log); #else     pthread_mutex_init(&cs_log,NULL); #endif     for (i=0;i<10000;i++) {         Log("This is a Log %04d from FILE:%s LINE:%d\n",i, __FILE__, __LINE__);     } #ifdef WIN32     DeleteCriticalSection(&cs_log); #else     pthread_mutex_destroy(&cs_log); #endif     return 0; } //1-78行添加到你带main的.c或.cpp的那个文件的最前面 //81-85行添加到你的main函数开头 //89-93行添加到你的main函数结束前 //在要写LOG的地方仿照第87行的写法写LOG到文件MyLog1.log中
user-0 提问: 【急】新人求教，文件读写出现错误的指针

回复:
user: user-0
content: 谢啦~已经ok了~  引用 2 楼 user-1 的回复:楼主你改写这段代码然后重新编译下 while(fscanf(fp1,"%d %d\n",coef,e)==2)           //把这句代码改为while(fscanf(fp1,"%d %d\n",&coef,&e)!=EOF)

user: user-1
content: 楼主你改写这段代码然后重新编译下 while(fscanf(fp1,"%d %d\n",coef,e)==2)           //把这句代码改为while(fscanf(fp1,"%d %d\n",&coef,&e)!=EOF)

user: user-0
content: 文件里面输入了  1 1 ，希望能读出来系数和指数，但是为什么根本不能读=A=
user-0 提问: 关于printf的问题

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

user: user-0
content: 引用 6 楼 angel_su 的回复:每个分支都要return，不要拼人品... if (mid*mid - y < -0.001 ) {         return mysqrt (mid, end, y);     } else if (mid*mid - y > 0.001) {         return mysqrt (start, mid, y);     } else {... 果然是return的问题导致的，可是为什么会这样呢？那样调用的话最终还是到最后一个“return mid”啊？

user: user-2
content: 每个分支都要return，不要拼人品... if (mid*mid - y < -0.001 ) {         return mysqrt (mid, end, y);     } else if (mid*mid - y > 0.001) {         return mysqrt (start, mid, y);     } else {...

user: user-3
content: 重复打印了，把mysqrt（）里面的printf去掉

user: user-0
content: 引用 2 楼 JiMoKuangXiangQu 的回复:[quote=引用 1 楼 user-5 的回复:] %f和double类型不匹配 这是种可能，如果是这样，只需修改成%lf即可。 但也有可能函数mysqrt的计算方法有问题。[/quote] 不是lf的问题。。。

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

user: user-4
content: 引用 1 楼 user-5 的回复:%f和double类型不匹配 这是种可能，如果是这样，只需修改成%lf即可。 但也有可能函数mysqrt的计算方法有问题。

user: user-5
content: %f和double类型不匹配
user-0 提问: 写了一个类似atol的函数，不出结果

回复:
user: user-1
content: 引用 5 楼 qingtianjushi 的回复:[quote=引用 3 楼 starytx 的回复:] 为啥要用int*来返回，不是什么时候都要动态开辟空间的，这是我的代码示例，仅供参考 int char_TO_int(char * st) { 	//printf("i am in char to int \n"); 	if (st == NULL || strlen(st) == 0) 	{ 		return 0; 	}  	char *p = st + strlen(st) - 1;  // p指向最后一个有效字符 	int nIndex = 0;    	int nResult = 0; 	while (p >= st) 	{ 		if (*p > '0' && *p <'9') // 是数字字符 		{ 			nResult += (*p - '0') * pow(10.0 ,nIndex); 			nIndex++; 		} 		else	// 如果有非数字字符，重置标记，这样的效果就是只转换最左边的数字字符，如果遇到非数字则丢弃随后的字符,也可以做其他处理（比如直接终止，返回0） 		{ 			nResult = 0; 			nIndex = 0; //			return 0;     		} 		p--; 	}  	return nResult; }  您写的这个好像和我要的结果不一致。我的意思是，char m[]={"3458976120"};     这些数据是Char类型的吧，我们是不能直接用来做数值运算的，因为3的ASCII值不是3.所以需要转换成 数值3 。  实现  atol()    的功能。不过非常感谢您的回复[/quote]没明白你的意思。你不是想把字符串“123”转换成int值为123吗？

user: user-0
content: 引用 3 楼 starytx 的回复:为啥要用int*来返回，不是什么时候都要动态开辟空间的，这是我的代码示例，仅供参考 int char_TO_int(char * st) { 	//printf("i am in char to int \n"); 	if (st == NULL || strlen(st) == 0) 	{ 		return 0; 	}  	char *p = st + strlen(st) - 1;  // p指向最后一个有效字符 	int nIndex = 0;    	int nResult = 0; 	while (p >= st) 	{ 		if (*p > '0' && *p <'9') // 是数字字符 		{ 			nResult += (*p - '0') * pow(10.0 ,nIndex); 			nIndex++; 		} 		else	// 如果有非数字字符，重置标记，这样的效果就是只转换最左边的数字字符，如果遇到非数字则丢弃随后的字符,也可以做其他处理（比如直接终止，返回0） 		{ 			nResult = 0; 			nIndex = 0; //			return 0;     		} 		p--; 	}  	return nResult; }  您写的这个好像和我要的结果不一致。我的意思是，char m[]={"3458976120"};     这些数据是Char类型的吧，我们是不能直接用来做数值运算的，因为3的ASCII值不是3.所以需要转换成 数值3 。  实现  atol()    的功能。不过非常感谢您的回复

user: user-0
content: 引用 2 楼 gongheguoyingpai11 的回复:这个程序有很多的问题 细节问题暂不讨论 就int *p2=(int *)malloc(10);    这个语句你分配十个字节的空间 但是p2并定义为了int型指针 这样 for(i=0;i<10;i++) {  printf("num is %d \n",*p2++); } 这里p2++每次以int类型为4个字节为准的话 这样p2每次相当于移动4个字节  而你总共只分配10个字节 一定会发生内存错误  如果想分配一块可以容纳10个整形数的空间 应该是(int*)malloc(sizeof(int) * 10)  我把分配地址的语句改为(int*)malloc(sizeof(int) * 10)，这个后。程序就运行正常了。您用上面用的For，我感觉不如用malloc，因为到时候可以释放。用For分配得先初始化地址，又长期占用。

user: user-1
content: 为啥要用int*来返回，不是什么时候都要动态开辟空间的，这是我的代码示例，仅供参考 int char_TO_int(char * st) { 	//printf("i am in char to int \n"); 	if (st == NULL || strlen(st) == 0) 	{ 		return 0; 	}  	char *p = st + strlen(st) - 1;  // p指向最后一个有效字符 	int nIndex = 0;    	int nResult = 0; 	while (p >= st) 	{ 		if (*p > '0' && *p <'9') // 是数字字符 		{ 			nResult += (*p - '0') * pow(10.0 ,nIndex); 			nIndex++; 		} 		else	// 如果有非数字字符，重置标记，这样的效果就是只转换最左边的数字字符，如果遇到非数字则丢弃随后的字符,也可以做其他处理（比如直接终止，返回0） 		{ 			nResult = 0; 			nIndex = 0; //			return 0;     		} 		p--; 	}  	return nResult; }

user: user-2
content: 这个程序有很多的问题 细节问题暂不讨论 就int *p2=(int *)malloc(10);    这个语句你分配十个字节的空间 但是p2并定义为了int型指针 这样 for(i=0;i<10;i++) {  printf("num is %d \n",*p2++); } 这里p2++每次以int类型为4个字节为准的话 这样p2每次相当于移动4个字节  而你总共只分配10个字节 一定会发生内存错误  如果想分配一块可以容纳10个整形数的空间 应该是(int*)malloc(sizeof(int) * 10)

user: user-3
content: 这个代码我只看得冒汗，还是没看懂
user-0 提问: 不知道为什么这个程序无法调试？

回复:
user: user-0
content: 貌似还是搞不定，蛋蛋的忧桑。

user: user-1
content: 不清楚，唉，http://blog.csdn.net/milkcu/article/details/8856768 http://hi.baidu.com/lwpping/item/320da61970fcd1653e87ce31

user: user-2
content: add break point in the first line in main

user: user-3
content: 引用 2 楼 u014082409 的回复:我明白，我的意思是这个程序编译通过后，输入build excute，一点显示都没有。这是为什么？应该不要输入啥的吧？貌似也没有输入函数之类的。 while((c = getchar())!=EOF){

user: user-4
content: 重建所有 或者安装SP 或者重装VS

user: user-0
content: 我明白，我的意思是这个程序编译通过后，输入build excute，一点显示都没有。这是为什么？应该不要输入啥的吧？貌似也没有输入函数之类的。

user: user-4
content: 确认编译链接通过，按F11键
user-0 提问: 这个问题没想明白，大家帮帮忙

回复:
user: user-1
content: 引用 1 楼 user-3 的回复:scanf("%s",string1); 改成 gets(string1);  记得scanf遇到空格时会结束 引用 1 楼 user-3 的回复:scanf("%s",string1); 改成 gets(string1);  记得scanf遇到空格时会结束 +1 但是最好使用fgets()可以防止溢出

user: user-2
content: scanf("%[^\n]",string1);

user: user-3
content: scanf("%s",string1); 改成 gets(string1);  记得scanf遇到空格时会结束
user-0 提问: C 函数入参地址 为何都相同？ 

回复:
user: user-1
content: mark一下，下班在看

user: user-2
content: 引用 8 楼 leslietuang 的回复:[quote=引用 5 楼 mujiok2003 的回复:]  va_list ap未必是一个地址， 所以不能%p  这 是否说明  不同平台对va_list相关内容  有不同的实现？[/quote]  肯定

user: user-0
content: 引用 5 楼 mujiok2003 的回复:va_list ap未必是一个地址， 所以不能%p  这 是否说明  不同平台对va_list相关内容  有不同的实现？

user: user-0
content: 这 是否说明  不同平台对va_list相关内容  有不同的实现？

user: user-2
content: http://codepad.org/3S7X0Bcz

user: user-2
content: va_list ap未必是一个地址， 所以不能%p

user: user-0
content: 引用 3 楼 baipv008 的回复:ap不会依次指向每个参数的地址，而是始终指向起始变参的起始地址吧。  求解释， 这个va_list 的实现细节 是怎样的？

user: user-3
content: ap不会依次指向每个参数的地址，而是始终指向起始变参的起始地址吧。

user: user-4
content: 引用 1 楼 zhao4zhong1 的回复:计算机组成原理→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-5
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-0 提问: [SWU]关于指针的问题

回复:
user: user-1
content: 对于打开文件是否成功是需要测试的，办法是检测fopen的返回值是否为NULL（参见fopen的手册）。

user: user-2
content: fscanf, fwscanf Read formatted data from a stream.  int fscanf( FILE *stream, const char *format [, argument ]... );  int fwscanf( FILE *stream, const wchar_t *format [, argument ]... );  Function Required Header Compatibility  fscanf <stdio.h> ANSI, Win 95, Win NT  fwscanf <stdio.h> or <wchar.h> ANSI, Win 95, Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  Each of these functions returns the number of fields successfully converted and assigned; the return value does not include fields that were read but not assigned. A return value of 0 indicates that no fields were assigned. If an error occurs, or if the end of the file stream is reached before the first conversion, the return value is EOF for fscanf or WEOF for fwscanf.  Parameters  stream  Pointer to FILE structure  format  Format-control string  argument  Optional arguments  Remarks  The fscanf function reads data from the current position of stream into the locations given by argument (if any). Each argument must be a pointer to a variable of a type that corresponds to a type specifier in format. format controls the interpretation of the input fields and has the same form and function as the format argument for scanf; see scanf for a description of format. If copying takes place between strings that overlap, the behavior is undefined.  fwscanf is a wide-character version of fscanf; the format argument to fwscanf is a wide-character string. These functions behave identically otherwise.  Generic-Text Routine Mappings  TCHAR.H Routine  _UNICODE & _MBCS Not Defined _MBCS Defined _UNICODE Defined  _ftscanf fscanf fscanf fwscanf    For more information, see Format Specification Fields – scanf functions and wscanf Functions.  Example  /* FSCANF.C: This program writes formatted  * data to a file. It then uses fscanf to  * read the various data back from the file.  */  #include <stdio.h>  FILE *stream;  void main( void ) {    long l;    float fp;    char s[81];    char c;     stream = fopen( "fscanf.out", "w+" );    if( stream == NULL )       printf( "The file fscanf.out was not opened\n" );    else    {       fprintf( stream, "%s %ld %f%c", "a-string",                 65000, 3.14159, 'x' );        /* Set pointer to beginning of file: */       fseek( stream, 0L, SEEK_SET );        /* Read data back from file: */       fscanf( stream, "%s", s );       fscanf( stream, "%ld", &l );        fscanf( stream, "%f", &fp );       fscanf( stream, "%c", &c );        /* Output data read: */       printf( "%s\n", s );       printf( "%ld\n", l );       printf( "%f\n", fp );       printf( "%c\n", c );        fclose( stream );    } }   Output  a-string 65000 3.141590 x   Stream I/O Routines  See Also   _cscanf, fprintf, scanf, sscanf
user-0 提问: 关于hook遇到任务管理器后出现的问题

回复:
user: user-1
content: 是不是因为任务管理器的类名也是IE开头的呀，他的名字是iexp。。。什么的吧

user: user-2
content: 在http://www.codeproject.com搜“hook”

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:MessageBox(NULL,"IE启动","提示",MB_OK); 改为  MessageBox(NULL,text,"提示",MB_OK);//看看text到底是什么内容  text里面是类名呀，IE浏览器开头两个字母是IE，跟这个没什么关系的，如果改成你那样也会崩，会出现很多对话框，上面写着#22305

user: user-0
content: text里面是类名呀，IE浏览器开头两个字母是IE，跟这个没什么关系的，如果改成你那样也会崩，会出现很多对话框，上面写着#22305

user: user-2
content: MessageBox(NULL,"IE启动","提示",MB_OK); 改为  MessageBox(NULL,text,"提示",MB_OK);//看看text到底是什么内容
user-0 提问: 关于数组增长的奇怪的问题！

回复:
user: user-0
content: 各位网友，问题的答案已经找到了。 问题所处：SIZE=SIZE*2; pp=(int *)realloc(e_a->arr,SIZE); 问题：realloc(e_a->arr,SIZE)中的SIZE应该是SIZE*sizeof(int); ps:...终于找到了。。这一上午再加上晚上2个小时。。只能说自己活该了。。

user: user-0
content: realloc函数先检查ptr指向的内存块的大小，如果size比原来的小，那么realloc修改内存块头信息，缩短这块内存。剩下的部分就释放了。如果size比原来的大，那么看这块之后的空闲区域是否足够让原块扩展。够的话就修改内存块头信息。 不够就另外分配一块区域，复制原块内容然后释放原块的空间。 无论是否分配了新的空间，返回地址是真正有效的那块空间的地址。也就是只有在需要分配新空间时，才返回与ptr不同的地址。   我的理解是：realloc函数返回的是一个有效的头地址。tuzhutuzhu网友，你的意思是：realloc函数返回的新增部分的地址？

user: user-0
content: 多谢各位网友的指教，其实我并不是一遇到BUG就贴上来的，我从9点开始调试，但是因为自己时初学者，用了一个上午也没什么进展，所以觉得虽然问题要靠自己解决，但是闭门造车也是不对的，所以就发了上来看看大家有没有什么指教。再次多谢大家的指教。

user: user-1
content: realloc函数返回的是指向追加分配的内存空间的地址，LZ的代码中这行不合适吧 e_a->arr=pp;

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

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

回复:
user: user-1
content: 函数可以返回指针，但要弄明白的是，函数中声明的变量将在函数返回时失效，我是指内存分配。 使用函数时，只需填入变量作为参数，调用时将复制这些变量的值，这就是所谓的传值。

user: user-2
content: 仅仅是输出来，可以改代码： num     = strlen(str2); 为 num     = sizeof(str2)/sizeof(str2[0])

user: user-0
content: 恩，楼上正解！

user: user-3
content: #include <stdio.h>  //库函数 strcpy 大概就是这么实现的 char *stringcopy(char *from, char *to)  {         char *dst  = to;                     while(*from!='\0'){                   *to     = *from;                   from++;                   to++;           }           *to     = '\0';          return dst;// 把to没有改动的原值，传回去就可以了   } int main(){ char a[]="From "； char b[80]= "To "; printf("a =%s,b = %s\n",a,b); printf("%s",stringcopy(a,b+3));); printf("a =%s,b = %s\n",a,b); return 0; }

user: user-4
content: 你可以想：让函数返回值是字符串的地址。

user: user-0
content: 第二个问题已经解决   我需要但是对于第一个问题，我还需要多研究一下。
user-0 提问: 新手，求各位大神帮忙

回复:
user: user-1
content: #include <stdio.h>  int main() { 	int a; 	scanf("%d",&a); 	 	while(a>0) 	{ 		printf("%d",a%10); 		a=a/10; 	} 	return 0; } 没考虑任何特殊情况～

user: user-2
content: 把數分解，還有沒有別的辦法哦？

user: user-2
content: 把數分解，還有沒有別的辦法哦？

user: user-3
content: 编程能力都是在自己思考调试程序和查找资料中慢慢积累起来的 不自己思考，练习代码，永远都学不会编程滴。
user-0 提问: 七年之痒——我还适合编程吗？

回复:
user: user-1
content: 有钱难买“我乐意”！

user: user-2
content: 引用 38 楼 beiye90 的回复:引用 34 楼 my_live_123 的回复:同岁同一个专业，我没有你搞那么花，一直坚持C/C++，一直在路上C/C++就业方向好像很渺茫啊！ 往“地狱”走的，没有往“天堂”去！还好吧，底层竞争者相对上层来说要少的多，就业要看自己的功力！

user: user-3
content: 我27岁开始编程

user: user-4
content: 感觉LZ支教呗耽误了4年！

user: user-4
content: 引用 34 楼 my_live_123 的回复:同岁同一个专业，我没有你搞那么花，一直坚持C/C++，一直在路上C/C++就业方向好像很渺茫啊！

user: user-5
content: 干这一行，个人喜欢是最好。

user: user-6
content: 我都30多快40了，都在写程序，怕毛啊。  如果你家庭经济允许，做做自己想做的事情就是，何必怕前怕后的。

user: user-2
content: 这个社会估计需要一点：看谁能坚持的跑下去！哪怕起初是错误的方向，一直走下去，到最后，即使社会不认可，也是自己的成功！正如你说的那样：不后悔自己的一千个日日夜夜！come on，选择目的地，背上背包，启程吧，骚年！

user: user-2
content: 同岁同一个专业，我没有你搞那么花，一直坚持C/C++，一直在路上

user: user-7
content: 引用 26 楼 aa573915483 的回复:[quote=引用 24 楼 linux_hsylar 的回复:] 本人88年，有些C/C++基础，现在在北京培训C/C++的，只要对编程感兴趣，其他一切都不是问题， 楼主，加油！[/quote]哈哈，有什么问题麽？

user: user-8
content: 年龄不是问题，关键是有没有决心。楼主确定自己想做程序吗？因为这是要投入不少时间和精力的。

user: user-9
content: 能做连连看，还可以。

user: user-10
content: 引用 24 楼 linux_hsylar 的回复:本人88年，有些C/C++基础，现在在北京培训C/C++的，只要对编程感兴趣，其他一切都不是问题， 楼主，加油！

user: user-11
content: 嗯，只要你不放弃梦想，什么都有可能。

user: user-12
content: 耐心，坚持，在自己认为合适的领域持续投入几年，绝对有所收获。 本人搞C++，从2002年在学校看C语言和C++语言程序设计算起，现在已经十来个年头了。至今虽然可以对c++的大部分领域都通晓，但是还是觉得很多地方不懂，还需要继续积累。 任何一门技术和语言，只要深入了解，你就会发现自己懂的越来越少，学习的兴致也会被提起。但是最怕的就是浅尝辄止，总是认为自己学某个技术已经掌握了很多东西了，应该没啥问题了，此时危险，犹如井底之蛙。。

user: user-13
content: 老实说楼主目前的水平很菜，不过没什么，我当年水平更菜。编程之路很漫长，需要时间积累。

user: user-14
content: 楼主现在做什么工作？

user: user-15
content: 楼主有天赋,性格却不适合 程序能写得倍儿棒的,大多有点偏执狂  浅尝则止怕是不行哦

user: user-7
content: 本人88年，有些C/C++基础，现在在北京培训C/C++的，只要对编程感兴趣，其他一切都不是问题， 楼主，加油！

user: user-16
content: 精诚所至，金石为开。兴趣是最好的老师，当然每学一样东西时都得专一才好。我完全是出于兴趣，没有任何功利心，所以也就没有什么压力，当然动力也就不会太大。愿与楼主共勉！
user-0 提问: 问个的问题,请各位拯救我这个白痴吧

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

user: user-2
content: 2楼已经把该说的都说了。把另外一个for循环也贴出来应该更明了一些

user: user-3
content: lz这话问的。。。多个等号，那就是里边的循环多执行了一次，所以肯定会多输出一个 * ，至于为啥输到那儿了，那就是你其他的代码（应该是嵌套for循环方面）的问题了
user-0 提问: sscanf如何获得扫描的剩余部分？

回复:
user: user-1
content: 引用 楼主 RunApp 的回复:rt，例如在网络通信里，需要做数据包拼接，而且有的时候数据一起来。这时用sscanf扫描，不知道应该怎么获得它的结束位置，以便下一次调用sscanf使用。  比较乱不知说清楚没有。 引用 1 楼 zhao4zhong1 的回复:#include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.   长见识了，正解～

user: user-1
content: 引用 楼主 RunApp 的回复:rt，例如在网络通信里，需要做数据包拼接，而且有的时候数据一起来。这时用sscanf扫描，不知道应该怎么获得它的结束位置，以便下一次调用sscanf使用。  比较乱不知说清楚没有。  长见识了，正解～～

user: user-1
content: int sscanf(const char *buffer,const char *format,[argument ]...); 这个函数原型可以看出，无法满足你的要求，因为无法改变const buffer，也无法知道究竟是吃了buffer多少个字符  个人愚见：这两种方案你看看 1.封包的时候，sprintf("%ns")来固定长度，不够则填充，解包时用%ns扫描 2.采用RTSP协议处理方式，商定每个可识别串都用 CR LF结束

user: user-2
content: #include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.
user-0 提问: 编程挑战题，求最大公倍数的那个题，输出为空值，在vc6.0上没有问题

回复:
user: user-0
content: 引用 4 楼 logiciel 的回复:printf("Case %d: %d\n\n",i+1,y[i]); 以上语句将多输出一行空行。如果题目没有要求有空行，试改为： printf("Case %d: %d\n",i+1,y[i]);题目有这个，昨天测试了下好像是f赋值的那句有问题，根本没有执行。

user: user-1
content: 为什么in t  nu m[]是整型的却给它赋值为浮点数呢，你可以把用到／的地方定义为double试一试

user: user-1
content: 求最大公约数何必那么麻烦

user: user-2
content: printf("Case %d: %d\n\n",i+1,y[i]); 以上语句将多输出一行空行。如果题目没有要求有空行，试改为： printf("Case %d: %d\n",i+1,y[i]);

user: user-0
content: 引用 2 楼 liutao_12345 的回复:int ys( int a, int b) {     int s,temp;     if (b > a)     {         temp=a;         a=b;         b=temp;     }      s = a % b;  	if(s == 0) 		return b; 	else 		ys(b,s); } 不是这个原因。

user: user-3
content: int ys( int a, int b) {     int s,temp;     if (b > a)     {         temp=a;         a=b;         b=temp;     }      s = a % b;  	if(s == 0) 		return b; 	else 		ys(b,s); }

user: user-3
content: int ys( int a, int b) {     int s,temp;     if (b > a)     {         temp=a;         a=b;         b=temp;     }      s = a % b;  	if(s == 0) 		return b; 	else 		ys(b,s); }
user-0 提问: 用vs运行从程序，用了double型想输出的答案是1.6但是还是不一样

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

user: user-2
content: 引用 8 楼 mujiok2003 的回复:[quote=引用 7 楼 u012421456 的回复:] [quote=引用 6 楼 mujiok2003 的回复:] [quote=引用 4 楼 u012421456 的回复:] double就是改用该用%lf，如果是%f会有警告，可能会造成数据丢失  %f是正确的。 [/quote] 这话怎么说[/quote]  1. printf:  %f ---- > double (因为float会转换double) %Lf ---> long double 2. scanf:  %f --- float* %lf .... double*  %Lf ... long double*  不要弄混了。 具体可以看看标准[/quote]  哦，你说的对，我简单试了试，发现这里用%f 和%lf都行，都没有警告   谢谢指点啊

user: user-3
content: printf("total is %g\n", d);  使用 %g 可以显示得好看点

user: user-4
content: 引用 7 楼 u012421456 的回复:[quote=引用 6 楼 mujiok2003 的回复:] [quote=引用 4 楼 u012421456 的回复:] double就是改用该用%lf，如果是%f会有警告，可能会造成数据丢失  %f是正确的。 [/quote] 这话怎么说[/quote]  1. printf:  %f ---- > double (因为float会转换double) %Lf ---> long double 2. scanf:  %f --- float* %lf .... double*  %Lf ... long double*  不要弄混了。 具体可以看看标准

user: user-2
content: 引用 6 楼 mujiok2003 的回复:[quote=引用 4 楼 u012421456 的回复:] double就是改用该用%lf，如果是%f会有警告，可能会造成数据丢失  %f是正确的。 [/quote] 这话怎么说

user: user-4
content: 引用 4 楼 u012421456 的回复:double就是改用该用%lf，如果是%f会有警告，可能会造成数据丢失  %f是正确的。

user: user-2
content: lz以后还是仔细检查后再上论坛问吧

user: user-2
content: double就是改用该用%lf，如果是%f会有警告，可能会造成数据丢失

user: user-2
content: # include <stdio.h> # include <windows.h> void main() { 	double a = 1.0; 	double d = 0.2*a + 0.4*a + a; 	printf("totall is %lf\n",d);  //最好是%lf 	system("pause"); }

user: user-5
content: %d是整数，double应该是%f

user: user-6
content: printf("totall is %f\n",d);// %d---->%f输出格式弄错了吧
user-0 提问: 啊哈C语言（坐在马桶上都能读懂的编程入门书）pdf最新版

回复:
user: user-1
content: 很不错的入门教程。

user: user-2
content: 最好不要这么学，呵呵呵

user: user-3
content: 刚学C语言，支持一下。

user: user-4
content: 看截图好像不错，虽然不一定会用得到，但先留个名，有需要了再看

user: user-5
content: 恩，很有特点！

user: user-6
content: 说是一物即不中。  计算机组成原理→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对应的汇编并单步执行观察相应内存和寄存器变化。）  想要从本质上理解C指针，必须学习汇编以及C和汇编的对应关系。 从汇编的角度理解和学习C语言的指针，原本看似复杂的东西就会变得非常简单！ 指针即地址。“地址又是啥？”“只能从汇编语言和计算机组成原理的角度去解释了。” 但我又不得不承认：  有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物；  而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。  不要企图依赖输出指针相关表达式的值【比如printf("%p\n",...)】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=...】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。  这辈子不看内存地址和内存值；只画链表、指针示意图，画堆栈示意图，画各种示意图，甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗？本人深表怀疑！ 这辈子不种麦不收麦不将麦粒拿去磨面；只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头，压面条，烤面包，……能从本质上理解面粉、理解面食吗？本人深表怀疑！！  提醒： “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 （Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。） 想要从本质上理解C指针，必须学习C和汇编的对应关系。” 不是一回事！  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  十字链表交换任意两个节点C源代码（C指针应用终极挑战）http://download.csdn.net/detail/zhao4zhong1/5532495

user: user-7
content: 马桶编程专用

user: user-8
content: 很有特点，非常不错！  引用 楼主 ahalei 的回复:分享一个超萌超简单的C语言入门。 http://download.csdn.net/detail/ahalei/7017315

user: user-0
content: 分享一个超萌超简单的C语言入门。 http://download.csdn.net/detail/ahalei/7017315  先来截个图给大家看看

user: user-9
user-0 提问: 什么时候用宏，什么时候用函数？

回复:
user: user-1
content: 引用 1 楼 user-13 的回复:在你能力强大到来csdn仅为娱乐之后才考虑是否该使用函数型的宏。 支持大侠 我是能用函数时最好不用宏，具体也还没理解

user: user-2
content: 能用函数时最好不用宏， 不利理解也不利调试。

user: user-3
content: 编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E

user: user-4
content: 其实两种方法都能达到目的，用宏的好处在于程序某个值需要修改，只要把宏定义改了就行了

user: user-5
content: 给几个宏的例子， 1） 当你需要定义C++那样使用引用的时候       如果使用指针，可能显得很不好理解       而C有没有引用，这样的数据类型，此时可以使用宏。       比如 DSP定义寄存器宏        #define register_xxx  (*(DWORD*)  0xXXXXXXXXXXXX）  2） 当你需要定义通用代码的时候 ，C没有模板，直接定义通用函数比较麻烦        比如      #define  abs(x)  ((x)<0)? - (x) : (x)) 3) 另外，如果需要，可以定义宏来精简代码      比如，曾经看到有人这么写代码      #define for_inc(i,start,end)  for((i) =(start);(i)<(end);(i)++)      #define for_dec(i,start,end)  for((i) =(start);(i)>(end);(i)--)      #define swap(type,a,b) do{ type t  = a; a = b; b = t;}while(0)   PS： 一般简短的，逻辑不复杂，但是经常使用的代码，可以定义为宏 宏调用，生成的代码，比较长，但是速度较快，效果等同于C++inline----- inline 就是C++ 用来替换宏的 函数调用代码，生成的代码比较短，但是运行速度，不如宏，这点其实就是C++inline和非 inline的区别

user: user-6
content: 我是这样理解的：首先他们是有区别的，第一函数可以没有返还值，而宏则必须要有返回值，第二编译时的过程是不同的，函数是通过函数调用实现的，而宏是在.o文件连接时把代码粘上去的（替换宏的引用）。举个例子： #define FUN 2+2 ,main()函数中有如下代码--printf("%d",FUN-FUN)，结果是4而不是0，因为它的执行过程是这样的FUN-FUN相当于2+2-2+2=4。从第二点可以看出用宏代替函数时会有很多的不确定性。具体什么时候用宏什么时候用函数，我不能给出明确的答案，但是我建议定义别名时用宏，需要用到某种操作时用函数。        希望能帮到你，不用谢。

user: user-7
content: 一般都可以用函数替换function alike macro

user: user-8
content: 宏定义不占运行时间，只占编译时间。而函数调用则占运行时间。 问：1.处理相同事件，谁的效率高？2.运行与编译是什么？有何区别？ 答：把函数定义成宏形式，原理和内联函数一样，如果函数体内代码短小，又经常调用，宏效率高，反之使用函数调用。

user: user-9
content: 宏更多的用于维护一些常量 这样便于维护 因为对一般人来说用宏替代函数 那一般不是新手就是大牛

user: user-10
content: 虽然很多经典名著都说宏不好 但是很多经典库中都使用很多宏

user: user-11
content: 功能简单，调用次数较多的情况下，或者处于一个循环中时，用的就比较好

user: user-12
content: 1.当你的程序中出现大量有意义的常数的时候，例如0x0312,0x0313，这个时候你可以把它们定义为宏 2.当你的程序需要一个开关量用来控制是否开启某个功能，你要定义一个宏 3.一些简单的小功能，比如，两个数比较大小，取某个数中第n位的值等等，你需要定义一个宏 等等

user: user-13
content: 在你能力强大到来csdn仅为娱乐之后才考虑是否该使用函数型的宏。
user-0 提问: w

回复:
user: user-1
content: 我好像搞错了 不行你看了以后不行我再看看

user: user-1
content: # include<stdio.h> # include <windows.h> int m, k; double n; int main() { 	float a; 	scanf("%lf %d %d", &n, &m, &k);  	float f(int m); 	a = f(m); 	printf("%.2f\n", a); 	system("pause"); 	return 0; } float f(int m) {	 	double y;  //这里还是也用double吧 	if(m == 1) 		y = k / (1+12*n); 	else 		y = (f(m-1)+k) / (1+12*n); 	return y; }  /*楼主你8行三个数据类型最好用空格分开，  还有，你已经在上面定义了n是double，怎么这里又用%ld输入啊？改成%lf试试*/ 看看行不行
user-0 提问: POJ1328 贪心算法

回复:
user: user-0
content: 过了→_→ 乃白赚了20分~

user: user-0
content: 瓦擦   ········哇擦擦擦擦擦擦擦·······································

user: user-1
content: 注意要输出“Case”而不是“case"。        printf("case %d: %d\n",x,num);       printf("case %d: -1\n",x); 改为：       printf("Case %d: %d\n",x,num);       printf("Case %d: -1\n",x); 即可AC。
user-0 提问: 关于C语言中switch与exit问题

回复:
user: user-0
content: 引用 3 楼 zhccl 的回复:fork调用一次，返回两次。fork成功之后会增加一个进程，并且在子进程调用exe系列函数之前，两个进程运行同一样代码。 因为，在两个进程中的返回不一样～父进程里返回子进程的PID，子进程返回0，等于现在两个进程都准备运行switch代码了，子进程进case0，调用了execl（...）之后，子进程和父进程运行的代码就不一样了；父进程switch，进default。。。明白了。

user: user-1
content: 那是两个进程啊，你断点在一个进程里，另一个进程还是在运行的。

user: user-2
content: fork调用一次，返回两次。fork成功之后会增加一个进程，并且在子进程调用exe系列函数之前，两个进程运行同一样代码。 因为，在两个进程中的返回不一样～父进程里返回子进程的PID，子进程返回0，等于现在两个进程都准备运行switch代码了，子进程进case0，调用了execl（...）之后，子进程和父进程运行的代码就不一样了；父进程switch，进default。。。

user: user-3
content: case0是子进程，default是父进程。fork之后，父子进程各自执行的
user-0 提问: 关于mfc 获取编辑框中的数字问题

回复:
user: user-1
content: 引用 2 楼 u010517717 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] f=e;这句还没执行呢亲！ 噗。。。犯傻了。。。。[/quote] 没关系！我也傻过。

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:f=e;这句还没执行呢亲！ 噗。。。犯傻了。。。。

user: user-1
content: f=e;这句还没执行呢亲！
user-0 提问: Windows 平台 eslipse+CDT+MinGW  环境配置问题 求教！

回复:
user: user-1
content: 引用 2 楼 flowersthese 的回复:[quote=引用 1 楼 user-1 的回复:] 是不是只写了个.h文件,貌似得有个.c或者.cpp文件才能开始编译 我hello world就是一个 cpp hello world.cpp[/quote]  hello world.cpp有空格的话在命令行下不行吧,你要文件名是这个的话怕是不行,"hello world.cpp"才行 另外我搜了一下,出问题的貌似也是文件名上的问题,全文复制给你,你看看变通下 先试试不仅eclipse能不能编译,确定编译器能用先,要是在命令行下输入gcc没反应,建议你把gcc所在目录加进windows的path里  "记录一下，装完eclipse和cdt后helloworld编译出现nothing to build for project helloworld。google了一把，发现我的main文件后面没有加.cpp，rename成main.cpp后成功编译。"

user: user-0
content: 引用 1 楼 user-1 的回复:是不是只写了个.h文件,貌似得有个.c或者.cpp文件才能开始编译 我hello world就是一个 cpp hello world.cpp

user: user-1
content: 是不是只写了个.h文件,貌似得有个.c或者.cpp文件才能开始编译
user-0 提问: 一个关于段错误的问题  大神求助啊~！~！~！~！~！~

回复:
user: user-0
content: struct ofp_action_header actions[0]    这种结构该怎么给他开辟空间啊

user: user-0
content: 我又修改了一下    主函数加上了两个开辟内存的语句    但是执行最后一句printf的时候还是会报段错误   不执行printf就不报错   这是为什么呢 void main() { 	struct sine_sw_flow *f; 	 	struct sine_sw_flow_actions *sf;	 	struct ofp_action_output *oa; 	int i;						 	f = calloc(1, sizeof (struct sine_sw_flow));	 	sf = f->sf_acts;	 	oa = (struct ofp_action_output *)sf->actions; 	sf = calloc(1, sizeof (struct sine_sw_flow_actions)); 	oa = calloc(1, sizeof (struct ofp_action_output));  	oa->type = 1; 	oa->len = 8; 	oa->port = 1; 	oa->max_len = 32768; 	sf->actions_len = sizeof(struct ofp_action_output); 	f->cookie = 0; 	f->priority = 1; 	f->idle_timeout = 32768; 	f->hard_timeout = 32768; 	f->used = 1; 	f->created = 1; 	f->byte_count = 0; 	f->packet_count = 0; 	for(i = 0; i < 10; i++) 		f->key.flow.sid[i]=0xffff; 	for(i = 0; i < 8; i++) 		f->key.flow.nid_src[i]=0xffff; 	for(i = 0; i < 8; i++) 		f->key.flow.nid_dst[i]=0xeeee; 	printf("%d",f->sf_acts->actions_len); }

user: user-0
content: sizeof *f 错了吗？我改成了 sizeof(struct sine_sw_flow)还是不行    我定位错误发生在 oa = (struct ofp_action_output *)sf->actions; oa->type = 1; oa->len = 8; oa->port = 1; oa->max_len = 32768; sf->actions_len = sizeof(struct ofp_action_output); 这几句    把这几句注释掉就没有段错误了    可是这几句为什么错了呢？？？？

user: user-1
content: sf = f->sf_acts;	sf_acts这个是NULL，都没分配内存

user: user-2
content: Windows： 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。 Linux： 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令

user: user-3
content: sizeof *f，这个错了，你得到的是一个指针的size
user-0 提问: 动态数组。。求帮助

回复:
user: user-1
content: m = (int *)malloc(sizeof(int)*1)才分配一个int单元，m[j++]都越界了。  引用 楼主 yuanwei285 的回复:/* *输入一个数，求出它所有质因数并存到数组中，并打印 */ #include <stdio.h> #include <stdlib.h>   void main() { 	int mm,i,j;  	int *m; 	printf("Please input one number :"); 	scanf("%d",&mm);   	 	while(mm>0) 	{ 		for(i=1,j=0;i<=mm;i++) 		{ 			if((mm%i) == 0){ 				m = (int *)malloc(sizeof(int)*1);  // 找到一个质因数分配一个数组长度 				m[j++]=i ; 			} 		} 		break; 	}	 	         for(i=0;i<sizeof(m);i++) 	  printf("%d",m[i]);    打印的结果为什么是一个随机数啊？新手。。
user-0 提问: 请教一个关于VC数据库语句的问题

回复:
user: user-0
content: 自己顶一下，大家帮帮忙呀

user: user-0
content: 自己顶一下，大家帮帮忙呀

user: user-0
content: 楼上的，还不是行呀，按你说的，m_FieldsPtr = &(kk.ID_Record->Fields); 出现错误了，你看看图片，

user: user-1
content: &m_FieldsPtr = kk.ID_Record->Fields; 改为 m_FieldsPtr = &(kk.ID_Record->Fields);

user: user-2
content: error C2440: '=' : cannot convert from 'FieldsPtr' to 'Fields **'  很明显是等号两边的数据类型不一致，不能赋值导致的错误 &m_FieldsPtr = kk.ID_Record->Fields;  m_FieldsPtr本来就是指针类型，再取地址就成了二级指针，即就是'Fields **‘，你把一个一级指针和一个二级指针相互赋值肯定会出错啊

user: user-0
content: 不行呀，如果要是向你那样写的话，运行到m_FieldsPtr = kk.ID_Record->Fields;句子后，会出现错误，就是附件的。

user: user-3
content: //&m_FieldsPtr = kk.ID_Record->Fields; m_FieldsPtr = kk.ID_Record->Fields;   ??
user-0 提问: 数据结构C语言版怎样自学？

回复:
user: user-1
content: 引用先说明不是为了考试，已经工作了，对编程很感兴趣，所以想看书深入了解和操作  编程的“编”就是要动手的意思， 不能只看书。

user: user-2
content: 程序＝算法＋数据结构 《数据结构（C语言版）》 《算法精解（C语言实现）》

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:为什么要有数据结构这个东东？ 因为要将现实世界或者抽象理论中的各种数据保存在计算机外存（光盘、硬盘、U盘……）或内存（ROM、RAM、SRAM……）里面的二进制字节数组中。 然后让CPU这个只会执行预先保存好的加减乘除移位条件转移……等机器指令的家伙按照人的意志去处理这些数据。至于具体如何处理就是所谓算法。  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 明白大概意思了，但有一个疑问，请确认这样理解对不对，数据结构是固定的？算法是活的？ 要想灵活运用算法必先掌握数据的固定结构？还是说数据结构是不断变化的，算法也是活的？

user: user-2
content: 为什么要有数据结构这个东东？ 因为要将现实世界或者抽象理论中的各种数据保存在计算机外存（光盘、硬盘、U盘……）或内存（ROM、RAM、SRAM……）里面的二进制字节数组中。 然后让CPU这个只会执行预先保存好的加减乘除移位条件转移……等机器指令的家伙按照人的意志去处理这些数据。至于具体如何处理就是所谓算法。  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

user: user-3
content: 多练习多画结构和逻辑图。  引用 楼主 u013933163 的回复:先说明不是为了考试，已经工作了，对编程很感兴趣，所以想看书深入了解和操作。  ​之前看过C语言和汇编，然后看2小时严蔚敏的数据结构C语言版，晕晕乎乎的完全不懂，求助能帮指点下如何能学好数据结构？
user-0 提问: 编写一个程序读入一行输入，然后反向打印该行

回复:
user: user-0
content: 引用 1 楼 piaobotudou 的回复:LENGTH = 20 输入回车了，但是循环没有退出来。所以还在等待输入d对奥，我说怎么回事。明白了，谢谢。

user: user-1
content: LENGTH = 20 输入回车了，但是循环没有退出来。所以还在等待输入
user-0 提问: C语言挑战题目！求大神挑战！编写产生210个2.300到1.800范围内的随机数的程序,并且以降序排序

回复:
user: user-1
content: what a big challenge!

user: user-2
content: #include<stdio.h> #include<stdlib.h> void BubbleSort(int arr[], int n) {      int i = 0, j =0;           for(i = 0; i < n; i++)        for(j = 0; j < n - 1 - i; j++)        {              if(arr[j] <arr[j + 1])              {                        arr[j] = arr[j] ^ arr[j+1];                        arr[j+1] = arr[j] ^ arr[j+1];                        arr[j] = arr[j] ^ arr[j+1];              }                     }      }  void main() { 	float a[210]={0}; 	int i=0; 	for(i=0;i<210;i++) 	{ 		a[i]=1.800+0.500*rand()/(RAND_MAX+1.0); 	} 	BubbleSort(a,210); 	for(i=0;i<210;i++)printf("%4.3f\n",a[i]); } 应该是楼主的作业吧。。。

user: user-3

user: user-4
content: 1l有点问题，代码示例，仅供参考 int cmp(const void *a ,const void *b) { 	return (*((float*)b) - *((float*)a))*1000; }   int _tmain(int argc, _TCHAR* argv[]) {  	srand(time_t(0)); 	float n[210]; 	for(int i =0; i != 210; i++) 	{ 		n[i] = (rand()%(2300 - 1800) + 1800 + 1)/1000.0f;  // 随机产生1.800~2.300之间的一个数 	}   	qsort(n ,210 ,sizeof(float) ,cmp);  	return 0; }

user: user-4
content: 简单写下思路： float n[210]; for(int i =0; i != 210; i++) n[i] = rand()%(2300 - 1800) + 1800 + 1;  // 随机产生1800~2300之间的一个整数  然后对n进行降序排序（冒泡或其他，随便），最后每个元素除以100.0即可
user-0 提问: 不用库函数，用C语言写一个函数，完成内存之间的拷贝

回复:
user: user-1
content: 引用 1 楼 caozhy 的回复:不考虑效率，循环赋值就是了。 两块内存如有重叠部分得考虑下吧

user: user-2
content: 不考虑效率，循环赋值就是了。

user: user-3
content: check source code of memcpy

user: user-4
content: 如果有重叠，不可能实现拷贝，只能实现移动。

user: user-5
content: assert条件写反了。
user-0 提问: 关于C中全局变量的疑问

回复:
user: user-1
content: 执行在main函数之前

user: user-2
content: 分配在可执行文件中了.........

user: user-3
content: 全局变量和静态变量都是静态存贮方式，存放在静态存储区，在main函数运行前编译器完成内存分配。程序结束后操作系统回收。

user: user-4
content: 引用 14 楼 mymtom 的回复:int i = 10; 已经初始化的数据段,  由编译器(compiler)和链接器(linker)生成数据段，运行时由加载器(loader)从可执行程序的数据段加载到内存中。 对于C++来说，有所不同，对于class的话，还要执行类的构造函数  /**  * @file    hello.cpp  * @brief     */  #include <iostream> using namespace std;  class CHello { public:     CHello()     {         cout << __FILE__ << ":" <<__LINE__ << endl;     } };  CHello hello;  int main(int argc, char *argv[]) {     ;      return 0; }   $ g++ -g -o hello hello.cpp   $ gdb hello GNU gdb Fedora (6.8-37.el5) Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.  Type "show copying" and "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu"... (gdb) break hello.cpp:13 Breakpoint 1 at 0x8048722: file hello.cpp, line 13. (gdb) run Starting program: /home/smgview/priv/zhn/src/hello   Breakpoint 1, CHello (this=0x8049ad4) at hello.cpp:13 13                      cout << __FILE__ << ":" <<__LINE__ << endl; (gdb) bt #0  CHello (this=0x8049ad4) at hello.cpp:13 #1  0x080486ed in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535) at hello.cpp:17 #2  0x08048705 in global constructors keyed to hello () at hello.cpp:25 #3  0x0804880b in __do_global_ctors_aux () #4  0x080484f9 in _init () #5  0x08048799 in __libc_csu_init () #6  0x00a1fe41 in __libc_start_main () from /lib/libc.so.6 #7  0x080485d1 in _start ()

user: user-4
content: int i = 10; 已经初始化的数据段,  由编译器(compiler)和链接器(linker)生成数据段，运行时由加载器(loader)从可执行程序的数据段加载到内存中。

user: user-5
content: 个人觉得是编译器做的

user: user-6
content: 《Windows PE权威指南》

user: user-7
content: 准确的说，编译器把你的代码翻译成机器规则，在执行的时候，按照这个规则进行空间创建和赋值。

user: user-8
content: 全部变量是在main函数调用之前就已经分配了内存。MFC中的app对象就是这样做到的。如果你懂C++可以自己测试，在cpp中声明一个类对象，此类的构造函数会先于main函数被调用

user: user-9
content: 由操作系统来做？精确的说是编译器做的

user: user-10
content: 我觉得是过程式运行的，在main运行之前分配

user: user-11
content: main之前，看编译原理和操作系统

user: user-6
content: 参考Linux源代码相关片断。

user: user-12
content: 在main函数之前的启动代码中。  引用 楼主 RJGCSS 的回复:我想问一下，如果在C语言中定义了一个全局变量并且赋值了，请问什么时候给变量分配一个全局的内存和赋初值？  在程序加载的时候？？ 由操作系统来做？？？

user: user-13
content: 在main函数之前就已经分配好内存空间了

user: user-14
content: main之前，属于数据段

user: user-15
content: 如果是C语言,其实编译器就完成了这个操作,为全局变量分配了虚拟地址并赋初值. 程序加载时, OS为每个虚地址页匹配一个物理地址页

user: user-16
content: 是的！执行在main函数之前
user-0 提问: 求学长学姐大神指教一个归并排序算法

回复:
user: user-1
content: 1 递归树画起来不对，每次都是两分的 2 你参数中的temp是做什么的，不是用来存放中间结果吗

user: user-2
content: 二路归并：http://blog.csdn.net/zhangxiangdavaid/article/details/34463409 有图，有分析

user: user-3
content: 数组只有一个元素也是一个有序数组

user: user-0
content: 谢谢，但我还是不理解，每次执行mergesort(a, first, mid, temp)到不满足条件后，比如第一次到{3}它存放在a数组里面吗？

user: user-4
content: 你的图上，{3,5}进行mergesort，{4}进行mergesort之后并没有进行合并操作。 {3,5}应该和{4}进行mergearray变成{3,4,5}然后再与{7,9}进行mergearray变成{3,4,5,7,9} http://blog.csdn.net/zhccl/article/details/7964164
user-0 提问: 想了解下各种计算机语言的用途

回复:
user: user-1
content: 你手机里的一些好玩的好用的APP，电脑上的软件游戏，还有一些智能的工具怎么来的呢？

user: user-2
content: 你这个话题太大了，可以先找一本c语言基础书，数据结构等看看，特别是序言部分多看看

user: user-3
content: 引用 8 楼 zhao4zhong1 的回复:建议下载研究eMule源代码。 赵老师今天心情很不错，多谢指点一二！

user: user-4
content: 面向对象只是一种编程思想。 再抽象的编程语言，最后不都变成汇编代码了吗？我们完全可以说汇编语言是面向对象、脚本化、动态化、泛函化、并行化、分布化的语言。

user: user-4
content: 建议下载研究eMule源代码。

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:[quote=引用 5 楼 u013933163 的回复:] [quote=引用 4 楼 zhao4zhong1 的回复:] 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… 有几个疑问，1是汇编语言是不是window汇编？2是按照上面箭头顺序，看完C语言是不是应该看数据结构、编译原理、操作系统了？？[/quote] 不一定是Windows汇编，只要是X86系列的汇编即可。 不要只停留在看的层面，要动手单步调试或设断点调试。[/quote] 还想问问，C语言是面向过程的，那么写好的程序如何让它面向对象？ 比如说怎样才能把一个写好的程序包装一下，做成一个软件界面实现该程序的功能呢？

user: user-4
content: 引用 5 楼 u013933163 的回复:[quote=引用 4 楼 zhao4zhong1 的回复:] 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… 有几个疑问，1是汇编语言是不是window汇编？2是按照上面箭头顺序，看完C语言是不是应该看数据结构、编译原理、操作系统了？？[/quote] 不一定是Windows汇编，只要是X86系列的汇编即可。 不要只停留在看的层面，要动手单步调试或设断点调试。

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… 有几个疑问，1是汇编语言是不是window汇编？2是按照上面箭头顺序，看完C语言是不是应该看数据结构、编译原理、操作系统了？？

user: user-4
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……

user: user-5
content: 引用 1 楼 starytx 的回复:你这个话题太大了，可以先找一本c语言基础书，数据结构等看看，特别是序言部分多看看  只能给你几个传送门了——http://www.ruanyifeng.com/blog/2010/03/programming_language_evaluations_revised.html  http://zh.wikipedia.org/wiki/编程语言  http://wenda.so.com/q/1375398910068449?src=110  http://wenku.baidu.com/view/d060eb176c175f0e7cd137f6.html  http://www.docin.com/p-259815231.html
user-0 提问: 一个关于内存和程序加载的问题，求助

回复:
user: user-1
content: 参考Linux源代码中加载可执行程序相关片断。

user: user-2
content: 可以预定的，然后厂家给你做缺货处理，然后补货

user: user-3
content: first, you should know windows memory management

user: user-4
content: 你的程序（text)和数据（data)会被OS 内存管理模块按需映射到物理存储（内存+ 磁盘（虚拟内存））

user: user-0
content: 引用 1 楼 user-6 的回复:实际运行到需要的时候才会动态加载进去的！ 不会一下子全部加载的！ 扛不住的！ 你好，这是我原先的理解，不知道哪些地方有错  比如F盘有个A.exe,C盘有个PageFile.sys交换文件  运行A.exe的时候就把他的全部地址空间的内容读入内存一小部分，并将其余大部分装入PageFile.sys  当A.exe访问某个不在物理内存的虚拟地址时发生缺页中断，并从PageFile.sys寻找缺页 ......

user: user-5
content: 有一种机制叫缺页处理。

user: user-6
content: 实际运行到需要的时候才会动态加载进去的！ 不会一下子全部加载的！ 扛不住的！
user-0 提问: [SWU]c语言 16进制转换为10进制

回复:
user: user-1
content: if (s[i] == 0){         ++i;         if (s[i] == 'x' || s[i] == 'X')             ++i;     } 这里就错了。改为if (s[i] =='0'){         ++i;         if (s[i] == 'x' || s[i] == 'X')             ++i;     }[/code]
user-0 提问: 为什么这段编译如此之慢，我只用了一个for循环而已

回复:
user: user-1
content: scanf("%d %d",&m,&n);

user: user-0
content: 引用 4 楼 qq120848369 的回复:pow返回的是浮点数噢。没有引起重视，以后会重视这个问题的。

user: user-0
content: 引用 6 楼 cocodada 的回复:在C++98中pow的原型为：      double pow (double base     , double exponent);       float pow (float base      , float exponent); long double pow (long double base, long double exponent);      double pow (double base     , int exponent); long double pow (long double base, int exponent);  %d　　　　有符号十进制整数　 所以要实现整数输出得类型转换（int）pow（i,2）； 否则就是将float和double的格式直接转化为整形（内存中整形和浮点型的存储方式不一样），就会出错。 PS：你的程序我在VC上运行出来是不一样的哦恩恩，确实有些不一样，我copy代码的时候么有注意到，不好意思。谢谢你啊，讲的太详细了。

user: user-0
content: 引用 5 楼 buyong 的回复:printf("%d\t%d\t%d\n",i,(int)pow(i,2),(int)pow(i,3));  2 4 2       4       8 3       9       27 4       16      64明白了。

user: user-2
content: 在C++98中pow的原型为：      double pow (double base     , double exponent);       float pow (float base      , float exponent); long double pow (long double base, long double exponent);      double pow (double base     , int exponent); long double pow (long double base, int exponent);  %d　　　　有符号十进制整数　 所以要实现整数输出得类型转换（int）pow（i,2）； 否则就是将float和double的格式直接转化为整形（内存中整形和浮点型的存储方式不一样），就会出错。 PS：你的程序我在VC上运行出来是不一样的哦

user: user-3
content: printf("%d\t%d\t%d\n",i,(int)pow(i,2),(int)pow(i,3));  2 4 2       4       8 3       9       27 4       16      64

user: user-4
content: pow返回的是浮点数噢。

user: user-5
content: n,m未初始化

user: user-0
content: 引用 1 楼 u012523688 的回复:[quote=引用 楼主 u012523688 的回复:] #include<stdio.h> #include<math.h> int main() { 	int i,m,n; 	 	scanf("%d%d",&m,&n); 	for(i = m; i <= n; i++) 	{ 		printf("%d%d%d\n",i,pow(i,2),pow(i,3));	 	} 	 	return 0; } 不管我输入什么值，输出结果都是一样的，请问这是怎么回事。[/quote]#include<stdio.h> #include<math.h> int main() { 	int i,m,n; 	int a = 3; 	scanf("%d%d",&m,&n); 	if(m <= n) 	{ 		for(i = m; i <= n; i++) 		{ 			printf("%d %d %d\n",a,pow(3,2),pow(3,3));	 		} 	} 	 	return 0; }这是修改后的代码，和上述结果也是一样的

user: user-0
content: 引用 楼主 u012523688 的回复:#include<stdio.h> #include<math.h> int main() { 	int i,m,n; 	 	scanf("%d%d",&m,&n); 	for(i = m; i <= n; i++) 	{ 		printf("%d%d%d\n",i,pow(i,2),pow(i,3));	 	} 	 	return 0; } 不管我输入什么值，输出结果都是一样的，请问这是怎么回事。
user-0 提问: ITK进行16位图片读写结果全黑

回复:
user: user-1
content: 你确定你输入的数据格式是正确的？是符合tif标准的？建议你下载一个查看二进制文件的工具，打开这个生成的tif文件，看一下它的文件头和数据段。看下有没有出错。

user: user-0
content: 是的，读入的图片用Fiji,ps等打开观看是可以看到图片中的信息的，然后我采用unsigned short型存储16位图片数据，然后经过了采样过程，将采样结果输出，然后用Fiji，ps等软件打开观看发现图片中无法看到任何信息，表现为全黑。

user: user-1
content: 你说的读写全黑是什么意思？是读入来的全是黑的，还是写出去的全是黑的？  你得到全黑结果是指生成了一个tif文件，然后浏览这个文件是全黑的？
user-0 提问: [SWU]字符型指针

回复:
user: user-0
content: 恩，明白了。楼上顶起

user: user-1
content: printf("%s\n", q); 是不对的，因为此时q已经指向字符串的结束符，相当于输出空串。 printf("%s\n", str); 应该改为以上的代码，str指向的是字符串的起始位置。  引用 1 楼 u013990248 的回复:忘记了说出症状了，就是没有输出，虽然问了别人说，我是在16行将指针指向了‘\0’但是还是不是很明白啊 但是我是执行完while循环之后再对*q赋值  也就是将q的指针指向了字符串的最后一个元素的地址，这是为什么呢？ 引用 1 楼 u013990248 的回复:忘记了说出症状了，就是没有输出，虽然问了别人说，我是在16行将指针指向了‘\0’但是还是不是很明白啊 但是我是执行完while循环之后再对*q赋值  也就是将q的指针指向了字符串的最后一个元素的地址，这是为什么呢？

user: user-0
content: 忘记了说出症状了，就是没有输出，虽然问了别人说，我是在16行将指针指向了‘\0’但是还是不是很明白啊 但是我是执行完while循环之后再对*q赋值  也就是将q的指针指向了字符串的最后一个元素的地址，这是为什么呢？

user: user-2
content: 你是通过指针来修改的字符数组的内容，最后显示的时候指针已经完成了任务，没有啥用了(它的指向已经发生了变化)，要用原数组名来显示

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

回复:
user: user-0
content: 引用 5 楼 lgbxyz 的回复:1个变量的   #include <stdio.h>   int main(void) { 	int i = 0;  	for (i = 0; i < 100; i++) 	{ 		printf("1 ");  		if (0 == (i+1) % 10) 		{ 			printf("\n"); 		}  	}  	return 0; }   谢谢大师，解决了我多日的疑惑~

user: user-1
content: 1个变量的   #include <stdio.h>   int main(void) { 	int i = 0;  	for (i = 0; i < 100; i++) 	{ 		printf("1 ");  		if (0 == (i+1) % 10) 		{ 			printf("\n"); 		}  	}  	return 0; }

user: user-0
content: 我只能想出这个样子，但是我想每个数字为1，请问怎么做？？

user: user-0
content: 是 长=10 宽=10 然后 都用1来实现~ 我的设想是 x=10,y=10,a=1 这三个变量来实现，求教~~

user: user-2
content: 你能把题目要求说的更详细么？

user: user-3
content: 长、宽、数值1？
user-0 提问: 关于C 的弱智问题

回复:
user: user-1
content: 首先我要说的是lz你的代码运行出来的结果是不是不对啊？我运行出来是这个—— 其次，n++是使用后自加一，虽然你的case ‘d’：case‘D’：后面没有用break，但它到最后就不会执行了，所以没有出现你说的情况 仅仅是执行了 printf("warn"); 语句

user: user-2
content: #include<stdio.h> int main() { 	char n='d'; 	switch(n++) 	{ 		 		case'a':case'A':case'b':case'B':printf("goob\n");break; 		case'c':case'C':printf("pass\n"); 		case'd':case'D':printf("warn\n"); 		case'e':case'E':printf("warnE\n"); 		default:printf("error\n");break; 	} }

user: user-3
content: switch(n) is fine.

user: user-4
content: 引用 5 楼 u013854998 的回复:我的写错了咯，，while(n++)好像不能改,改了的话意思就变了佐！！  while(n++)是死循环。另外楼主到底想问什么？

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

user: user-6
content: 我的写错了咯，，while(n++)好像不能改,改了的话意思就变了佐！！

user: user-6
content: #include <stdio.h>                                                                                                                                                                                                     int main(void) {   //int n = 'd';   int n = 0;    printf ("Get me a character:\t");   n = getchar();    if (n >= 'a' && n <= 'd' || n >= 'A' && n <= 'D')   switch (++n)     // a little change "n++" ch "++n";   {     case'a':     case'A':     case'b':     case'B':         printf("goob");         break;     case'c':     case'C':         printf("pass");         break;     case'd':     case'D':         printf("warn");         break;     default:         printf("error");             ////////////////////////:::: (\_(\   I             //////////////////////////*: (=’ :’) :* miss              //////////////////////////•..(,(”)(”)              //////////////////////////¤°.¸¸.•´¯`» you         break;   }   else   {     printf ("abort !Program run erro!\n");     return (1);   }   printf ("\n");   return 0; }    我重写了下，应该是这个意思吧

user: user-7
content: 结果是 warn 与 case 'd' 匹配了

user: user-8
content: 结果是 warn 吧  default 放到前面是无效的,不会输出

user: user-9
content: 先回答你这一个问题，你default后面的error你放到了前面，如果没有错误他不会输出的，你要是想让程序在最后输出error，你要把default放到switch最后，而且你把'd'转换为ASCII码后，你怎么可能还输出passwarn，现在你应该好好看下你自己的代码，还有，下次希望把代码规整下…… #include<stdio.h> int main() { 	int n='d'; 	switch(n++) 	{ 		 		case'a':case'A':case'b':case'B':printf("goob");break; 		case'c':case'C':printf("pass"); 		case'd':case'D':printf("warn"); 		default:printf("error");break; 	} }
user-0 提问: 希望各位大神级能帮帮忙，为什么编写的这个程序可以得到符合的要求，可老师说我写的是在C语言中是不正确的。为什么？？

回复:
user: user-1
content: 百度百科： 在C语言中，多个表达式可以用逗号分开，其中用逗号分开的表达式的值分别结算，但整个表达式的值是最后一个表达式的值。

user: user-2
content: 楼主试试你自己的程序，我估计，1,2,3,4,1这几个数，你的程序也会判定它是回文数。

user: user-3
content: 楼上回复的很细致啊，基础如此扎实

user: user-4
content: C 运算符优先级的问题,但是你的问题是根本不知道k=(a,b,c,d,e)==(e,d,c,b,a)是在求什么  k=(a,b,c,d,e)==(e,d,c,b,a) /* 1.优先级最高的是括号中内容.即 (a,b,c,d,e) 和 (e,d,c,b,a) 根据逗号运算符的作用(a,b,c,d,e) = e, (e,d,c,b,a) = a 原式 = k = e == a  2.优先级第二高的是 ==   3.优先级最低的是 =   k = (e == a)   如果e和a相等 k = true = 1   如果e和a不等 k = false= 0  4. (k=(a,b,c,d,e)==(e,d,c,b,a))?printf("k是回文数."):printf("k不是回文数."); 等价于 (k ? printf("k是回文数."):printf("k不是回文数." ) */

user: user-5
content: 引用 3 楼 Falleyes 的回复:#include <stdio.h> void main() { 	int a, b, c, d, e; 	printf("please input a,b,c,d,e="); 	scanf("%d,%d,%d,%d,%d", &a, &b, &c, &d, &e); 	printf("%s\n", (a == e&&b == d) ? "k是回文数." : "k不是回文数."); }

user: user-5
content: #include <stdio.h> void main() { 	int a, b, c, d, e; 	printf("please input a,b,c,d,e="); 	scanf("%d,%d,%d,%d,%d", &a, &b, &c, &d, &e); 	printf("%s\n", (a == e&&b == d) ? "k是回文数." : "k不是回文数."); 	return 0; }

user: user-0
content: 可当我输入a,b,c,d,e=1,2,3,4,5时，显示的是k不是回文数 而不是你所说的k是1或者0

user: user-6
content: (k=(a,b,c,d,e)==(e,d,c,b,a))?printf("k是回文数."):printf("k不是回文数."); 这句执行过后，K要么为1,要么为0 并不是你要求的回文数
user-0 提问: 关于itoa原型的问题。

回复:
user: user-0
content: 谢谢楼上了，我没有想到，其实这个表示的已经是负数了，只不过用的是反码而不是正负号而已。

user: user-1
content: 首先，你代码看得很仔细，赞一个。 学过组成原理都会知道，计算机中，数字是以补码形式表示的，关于补码请百度，补码可保证０的唯一性，数值运算的时候是用的补码。 对于负数，也会转换为他的补码形式表示，以　-1（10进制来说），他的１６进制为oxFFFFFFFF(32位系统)，这样就可以区分数的正负了，一般来说，补码第一位（左侧第一位）为数位，１表示为负，０为正。  可参考　http://www.cnblogs.com/junsky/archive/2009/08/06/1540727.html
user-0 提问: 关于static写法的疑问

回复:
user: user-1
content: 坚决不用这种方式语法

user: user-2
content: 引用 楼主 JUSTACY 的回复:请问按照C语言语法，以下写法是否正确： static i; 学习语言不要钻牛角尖，像这种语法，即便允许，也不宜提倡。

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

user: user-3
content: 正确。

user: user-4
content: 最好加上类型，例如： static int i; static unsigned char i;  引用 楼主 JUSTACY 的回复:请问按照C语言语法，以下写法是否正确： static i;

user: user-5
content: 给i变量一个类型呗！

user: user-6
content: 顶楼上 C++ does not support default-int

user: user-7
content: C语言默认为int类型，C++不支持默认