Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 结构体指针转换成int报错

回复:
user: user-1
content: typedef struct META {     char* name;        // the name of member     uint16_t type;    // member type     uint16_t offset; // offset of member from the type head     union {         struct META* meta; // support the child struct type         int count;    // indicate the count of member when the member is a array type     } M;     #define count M.count;     #define meta  M.meta;     char* alias; // alias for the parameter, use the "name" if this is NULL } META;  语句改为 count =meta->count   只是权宜之计，最好还是不要这宏，直接写 meta->M.count

user: user-2
content: union {         struct META* meta; // support the child struct type         int count;    // indicate the count of member when the member is a array type     }; 这是个联合体  如果你想取里面count的值 要改成meta->count               count = (int)meta->meta;把结构体指针强转成int型肯定会出错
user-0 提问: C语言实现文件内容拷贝并修改，为何这样实现不了

回复:
user: user-1
content: oxfc为不可显示内容

user: user-0
content: 引用 5 楼 adusuccessfully 的回复:0xfc的十进制数是252，字符转换成十进制后的取值范围是0~127，所以字符不可能等于0xfc。LZ明白了吧~谢谢，我已经明白了。

user: user-2
content: if 语句是没错的，  我想你应该关注ch

user: user-3
content: 0xfc的十进制数是252，字符转换成十进制后的取值范围是0~127，所以字符不可能等于0xfc。LZ明白了吧~

user: user-0
content: 在线急等呐。。。为何不能回写。

user: user-0
content: 引用 1 楼 u013163178 的回复:楼主:请问0xfc是什么,unicode吗0xfc就只是文件里面数据的16进制形式，我是一个字节一个字节从文件里取出来的

user: user-0
content: 0xfc就只是文件里面数据的16进制形式，我是一个字节一个字节从文件里取出来的

user: user-4
content: 楼主:请问0xfc是什么,unicode吗
user-0 提问: 关于c语言线程控制主函数内函数跳转，请前辈们指导一下

回复:
user: user-1
content: 如果嫌一层一层退出函数麻烦，你还可以使用longjmp技术，参考下面： #include <stdio.h> #include <setjmp.h> jmp_buf mark; int i=0; void c() {     printf( "c in\n");     if (1==i%2) longjmp( mark, i );     printf( "c out\n"); } void b() {     printf( "b in\n");     c();     printf( "b out\n"); } void a() {     printf( "a in\n");     b();     printf( "a out\n"); } void main( void ) {    int jmpret;    jmpret = setjmp( mark );    printf( "Start %d\n",jmpret);    if( jmpret == 0 ) {        printf( "First\n");        a();        i++;        a();    } else {        printf( "Second\n");    } } //Start 0 //First //a in //b in //c in //c out //b out //a out //a in //b in //c in //Start 1 //Second //

user: user-1
content: “A线程控制B线程的执行流程”本身就是一个伪命题（当然如果你要动用WriteProcessMemory修改B线程的堆栈段或代码段字节内容以达到控制B线程的执行流程的目的的话，另说，参考这个帖子：http://bbs.csdn.net/topics/390627329）。 最简单的办法就是不用线程，只需在你主程序流程中等待用户输入的地方或长时间循环的地方抽空判断一下用户是否在此阶段不久之前是否按了比如Esc键，如果按了，提前返回本函数，必要的话，返回一个特殊值表示用户刚按了Esc，外层函数判断返回为此特殊值，也立即返回，……，直到返回主函数。此时主函数再决定是退出程序呢还是重新开始主循环。
user-0 提问: 【STM32】串口中断问题，求大神赐教！！！

回复:
user: user-1
content: 引用 7 楼 zhao4zhong1 的回复:[quote=引用 5 楼 u011113596 的回复:] [quote=引用 4 楼 zhao4zhong1 的回复:] 《Windows核心编程》 这个不是windows吧[/quote] 看走眼了。[/quote]

user: user-2
content: 引用 5 楼 u011113596 的回复:[quote=引用 4 楼 zhao4zhong1 的回复:] 《Windows核心编程》 这个不是windows吧[/quote] 看走眼了。

user: user-0
content: 引用 2 楼 turingo 的回复:1、开辟一个ringbuffer； 2、 gps_receive_process_event中只是简单把字符写入ringbuffer； 3、协议层才负责从ringbuffer中取出数据进行解析。 我在考虑用中断控制

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:《Windows核心编程》 这个不是windows吧

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

user: user-0
content: 引用 1 楼 user-4 的回复:你的延时在干什么?等指令吗?         如果不是,那么延时延后处理.         如果是,也可以先处理指令,再延时等待下一条指令. 或者暂存指令到缓冲区,用空闲时间来处理指令. 主要是有定期执行的事件在里面，延时就是时间间隔，而我发指令的时候基本上程序都在执行延时函数，所以实时性就影响了。

user: user-3
content: 1、开辟一个ringbuffer； 2、 gps_receive_process_event中只是简单把字符写入ringbuffer； 3、协议层才负责从ringbuffer中取出数据进行解析。

user: user-4
content: 你的延时在干什么?等指令吗?         如果不是,那么延时延后处理.         如果是,也可以先处理指令,再延时等待下一条指令. 或者暂存指令到缓冲区,用空闲时间来处理指令.
user-0 提问: 谁能说说hook怎么实现按键跳转回程序某一个界面，还有dll入口函数是必要的吗？ c语言

回复:
user: user-0
content: 我没查到怎么通过感触到按键的信息去回主函数窗口界面，win  32控制台程序

user: user-1
content: 网上有很多全局钩子记录键盘信息例子。楼主可以百度！  DLLMain只是windows的动态库。c++的动态库的话是没有的。 windows中为了更好处理线程、进程对动态库的调用，用DLLMain来做初始化、清理操作（当然如果你愿意，如界面的动态库）。 但c++动态库（通信等和系统无关库）他们更愿意封装c接口，或者用_stacall等c++操作符来让调用者做析构。

user: user-1
content: 入口函数不是必须的：http://bbs.csdn.net/topics/10107940  我觉得hook用全局钩子监听消息后，通过消息完全可以启动其他程序。

user: user-2
content: console屏幕处理例子程序。终端窗口屏幕处理相关API使用例子。来自MSVC20\SAMPLES\win32\console\ http://download.csdn.net/detail/zhao4zhong1/3461309

user: user-2
content: MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1～7\*.*

user: user-2
content: 欲速则不达。 楼主老老实实查MSDN学习Window编程才是正途。 #pragma comment(lib,"user32") #pragma comment(lib,"gdi32") #include <windows.h> LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {     PAINTSTRUCT ps;     HDC hdc;     HFONT hfont,ohfont;     RECT r;     COLORREF oc;      switch(message) {     case WM_CLOSE://按Alt+F4退出         PostQuitMessage(0);         break;     case WM_PAINT:         BeginPaint(hWnd, &ps);         hdc = ps.hdc; // the device context to draw in         GetClientRect(hWnd, &r); // Obtain the window's client rectangle         hfont = CreateFont(240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "华文楷体");         ohfont=(HFONT)SelectObject(hdc,hfont);         oc=SetTextColor(hdc,0x00C080FF);         SetBkMode(hdc, TRANSPARENT);         TextOut(hdc,r.left+r.right/2-720, r.top+r.bottom/2-120,"最短画图程序",12);         SelectObject(hdc,ohfont);         SetTextColor(hdc,oc);         DeleteObject(hfont);         EndPaint(hWnd, &ps);         break;     default:         return DefWindowProc(hWnd, message, wParam, lParam);     }     return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {     MSG msg             = {0};     WNDCLASS wc         = {0};     HBRUSH hbrh;     hbrh=CreateSolidBrush(0x00000000);     wc.lpfnWndProc      = WndProc;     wc.hInstance        = hInstance;     wc.hbrBackground    = hbrh;     wc.lpszClassName    = "minwindowsapp";     wc.hCursor          = LoadCursor(NULL,IDC_ARROW);     if( FAILED(RegisterClass(&wc)) ) return 1;      if(FAILED(CreateWindow(wc.lpszClassName,                         "Minimal Windows Application",                         WS_POPUP|WS_VISIBLE,                         0,                         0,                         GetSystemMetrics(SM_CXSCREEN),                         GetSystemMetrics(SM_CYSCREEN),                         0,                         0,                         hInstance,                         NULL)))         return 2;      while( GetMessage( &msg, NULL, 0, 0 ) > 0 ) {         DispatchMessage( &msg );     }     DeleteObject(hbrh);     return 0; }
user-0 提问: FFMPEG+SDL解码出现声音视频都是一卡一卡的

回复:
user: user-1
content: 博主的问题找到了吗，想请教一下，遇到了同样的问题，雷霄华的MFC sample好像也是存在这样的问题，但是播放h.264的文件似乎就不存在这个问题，没有SDL_Delay，视频倒是可以正常快速的播放，实在是找不到原因

user: user-1
content: 我还是找出原因了，把视频显示线程中的SDL_Delay（）注释掉就可以正常播放了，这里还是要感谢一下博主的代码

user: user-0
content: 我去。。不小心发错版块了。版主帮我调整下谢谢。。
user-0 提问: 菜鸟求指导！

回复:
user: user-1
content: 引用 5 楼 linxin3333520 的回复:[quote=引用 4 楼 aime999 的回复:] [quote=引用 3 楼 linxin3333520 的回复:] 抱歉，复制错误，前面的解释不对口。 注意：当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中元类型（如数组，取其类型的数据长度）最大的变量长度的整数倍，且要大于等于其最大成员所占的存储空间。union中类型最大的变量为long b;取其整数倍，那只能是２４或３２，所以前两个数为３２，u中间的a[6]时为２４；后面看a[]大小  ——这个回答有问题的，long在32位机上是4个字节，“union中类型最大的变量为long b”这个就是错误的说法，最大的还是int a[7]; 这里面应该是涉及到字节对其的问题，如果定义了8字节对其的话，那么一个数据结构会根据内部数据的字节数动态的补0的，int a[7]就是4*7=28字节，在8字节对其的时候后面还会继续补齐4个字节的0，这样达到8字节对齐的，所以确认一下是不是8字节对齐，如果是4字节对齐的话，应该都是28的[/quote] 我之前一直认为long是8字节。若都是4字节，那结果应该是sizeof(u)与sizeof(u.a)一样吧？[/quote] 抱歉问一下，这跟逆序有什么关系？

user: user-2
content: 引用 3 楼 linxin3333520 的回复:抱歉，复制错误，前面的解释不对口。 注意：当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中元类型（如数组，取其类型的数据长度）最大的变量长度的整数倍，且要大于等于其最大成员所占的存储空间。union中类型最大的变量为long b;取其整数倍，那只能是２４或３２，所以前两个数为３２，u中间的a[6]时为２４；后面看a[]大小  ——这个回答有问题的，long在32位机上是4个字节，“union中类型最大的变量为long b”这个就是错误的说法，最大的还是int a[7]; 这里面应该是涉及到字节对其的问题，如果定义了8字节对其的话，那么一个数据结构会根据内部数据的字节数动态的补0的，int a[7]就是4*7=28字节，在8字节对其的时候后面还会继续补齐4个字节的0，这样达到8字节对齐的，所以确认一下是不是8字节对齐，如果是4字节对齐的话，应该都是28的

user: user-3
content: 抱歉，复制错误，前面的解释不对口。 注意：当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中元类型（如数组，取其类型的数据长度）最大的变量长度的整数倍，且要大于等于其最大成员所占的存储空间。union中类型最大的变量为long b;取其整数倍，那只能是２４或３２，所以前两个数为３２，u中间的a[6]时为２４；后面看a[]大小

user: user-3
content: 在内存中，数据是按4字节逆序存储的，所有两次输出，前面都为３２；后面看a[]的数据大小，一个为７*４＝２８，另一个为８*４＝３２

user: user-4
content: 机器码数据是按4字节逆序存储的，所有两次输出，前面都为３２；后面看a[]的数据大小，一个为７*４＝２８，另一个为８*４＝３２ 那结果应该是sizeof(u)与sizeof(u.a)不一样。

user: user-3
content: 引用 4 楼 aime999 的回复:[quote=引用 3 楼 linxin3333520 的回复:] 抱歉，复制错误，前面的解释不对口。 注意：当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中元类型（如数组，取其类型的数据长度）最大的变量长度的整数倍，且要大于等于其最大成员所占的存储空间。union中类型最大的变量为long b;取其整数倍，那只能是２４或３２，所以前两个数为３２，u中间的a[6]时为２４；后面看a[]大小  ——这个回答有问题的，long在32位机上是4个字节，“union中类型最大的变量为long b”这个就是错误的说法，最大的还是int a[7]; 这里面应该是涉及到字节对其的问题，如果定义了8字节对其的话，那么一个数据结构会根据内部数据的字节数动态的补0的，int a[7]就是4*7=28字节，在8字节对其的时候后面还会继续补齐4个字节的0，这样达到8字节对齐的，所以确认一下是不是8字节对齐，如果是4字节对齐的话，应该都是28的[/quote] 我之前一直认为long是8字节。若都是4字节，那结果应该是sizeof(u)与sizeof(u.a)一样吧？

user: user-1
content: union的大小由其中最大的元素决定，a[]最大，所以按a[]的来
user-0 提问: 循环使用realloc十次左右及以上 VS2008报错

回复:
user: user-1

user: user-1

user: user-1
content: 越界了

user: user-2
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  请判断realloc的返回值！

user: user-3
content: sizeof(a)永远等于4，也就是你操作个几次以后就一直是越界了，不挂才挂

user: user-0
content: 已修正错误，使用一个int来记录长度，谢谢指教。

user: user-4
content: a=(char *)realloc(b+1,sizeof(char));
user-0 提问: 求助大神，这个程序输出结果1的前面为什么没有空格字符的。。。。请告诉我详细的原因，按道理4次循环应该有4个空格才对吧？？？

回复:
user: user-1
content: 因为循环处理的最后一个是 i=1，没有处理 x[0];
user-0 提问: 为什么文本框没显示内容?坐等!

回复:
user: user-0
content: 没人回会吗?

user: user-1
content: 明显的是属于C#的代码吧？

user: user-2
content: .cs? C#代码？

user: user-3
content: .cs? 这里是c++论坛吧，难道我来错了？  获取button的名字 应该是button.Name 吧，你试试。

user: user-0
content: 大图
user-0 提问: 使用vc6调试程序，输出框行数有限制，运行输出，数据丢失

回复:
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: user-2
content: 数据没有丢失，只是dos框显示的限制

user: user-3
content: 那是因为控制台的显示数目有限，你可以把结果写到文件中，这样就都会出来的
user-0 提问: 求助大神，帮帮小弟

回复:
user: user-0
content: Windows控制台程序课程

user: user-1
content: MFC控件程序？还是Windows控制台程序呀？

user: user-2
content: 老师都说了，雷同作业全部零分。自己好好写吧。
user-0 提问: 画实心圆

回复:
user: user-1
content: r*sqrt(2.0)/2.0≈r*1.414/2.0=r*0.707=r*707/1000

user: user-1
content: 复习高中数学圆锥曲线。

user: user-0
content: 恩，谢谢啊，可是还想问下，它这是根据什么算法来实现的？怎么就知道要这样写的

user: user-0
content: 引用 1 楼 user-2 的回复:.sqrt(2)/2 恩，还是想问问这是根据什么来实现的，为什么是这样啊？

user: user-2
content: .sqrt(2)/2
user-0 提问: c语言入门基础题一道，求教

回复:
user: user-1
content: 发表于： 2014-12-23 18:37:30 竟然显示的前面

user: user-2
content: 生命不息，挖坟不止。

user: user-1
content: float a[5][6]={};  没这么做过 好像是没有赋值，但又做了赋值的操作，浪费时间

user: user-3
content: [quote=引用 6 楼 zhao4zhong1 的回复:] 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构…… 说得很好，要是再附上一些推荐的相关书籍就更好了

user: user-4
content: 可以啊 没初值而已

user: user-2
content: 理解和讨论之前请先学会如何观察！

user: user-2
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  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: 实践是检验真理的唯一标准

user: user-6
content: 为什么不自己运行一下呢

user: user-7
content: 可以这样赋值~~~

user: user-8
content: 不做吗？只是没初始值而已

user: user-9
content: gcc 4.8编译通过,运行无异常 /*************************************************************************     > File Name: test1.c     > Author: jukay     > Mail: hellojukay@163.com      > Created Time: 2014年12月23日 星期二 19时47分48秒  ************************************************************************/  #include<stdio.h> int main() { 	float a[5][6] = {}; 	for(int i = 0; i < sizeof(a) / sizeof(float);++i) 		printf("%a\t",a[i]); 	return 0; }
user-0 提问: 有一个这样的课设作业....

回复:
user: user-0
content: 其实我不会用C++...

user: user-0
content: 引用 7 楼 yangyunzhao 的回复:[quote=引用 5 楼 L5_DP 的回复:] [quote=引用 3 楼 yangyunzhao 的回复:] 晕，声音文件不就是一串二进制数据吗？不就是01010的混合体吗？不就是const char *吗？用std::string也可以，只是不好理解，但是好用。  但是！一般不会把声音、图形读入到内存里面，因为比较占内存。建议做一个汉字到声音文件（即文件存储路径文件名）的映射。 那么请问这个映射怎么做。。。原谅我实在是菜....[/quote]  std::map<std::string, std::string>  第一个string表示汉字，第二个string表示存储路径[/quote]  我在dev里面编译 这有一个纯输出声音的语句 #include<stdio.h> #include <windows.h> #include <mmsystem.h> // 加上，不然PlaySound函数无法使用 #pragma comment(lib, "WINMM.LIB") // 加上，不然PlaySound函数无法使用 int main(){ 	PlaySound("d:\\read\\down.wav",NULL,SND_ASYNC|SND_FILENAME); 	return 0; } 但是却报错了 C:\Users\dell\AppData\Local\Temp\cco5GYmK.o	ks.cpp:(.text+0x22): undefined reference to `__imp_PlaySoundA' E:\Program\collect2.exe	[Error] ld returned 1 exit status  大哥知道是怎么回事么

user: user-1
content: 引用 5 楼 L5_DP 的回复:[quote=引用 3 楼 yangyunzhao 的回复:] 晕，声音文件不就是一串二进制数据吗？不就是01010的混合体吗？不就是const char *吗？用std::string也可以，只是不好理解，但是好用。  但是！一般不会把声音、图形读入到内存里面，因为比较占内存。建议做一个汉字到声音文件（即文件存储路径文件名）的映射。 那么请问这个映射怎么做。。。原谅我实在是菜....[/quote]  std::map<std::string, std::string>  第一个string表示汉字，第二个string表示存储路径

user: user-0
content: 引用 4 楼 zxhuser-2 的回复:百度 语音识别 不是做语音识别，我百度了好久 从文本到语音，但是都不是我想要的。。。

user: user-0
content: 引用 3 楼 yangyunzhao 的回复:晕，声音文件不就是一串二进制数据吗？不就是01010的混合体吗？不就是const char *吗？用std::string也可以，只是不好理解，但是好用。  但是！一般不会把声音、图形读入到内存里面，因为比较占内存。建议做一个汉字到声音文件（即文件存储路径文件名）的映射。 那么请问这个映射怎么做。。。原谅我实在是菜....

user: user-2
content: 百度 语音识别

user: user-1
content: 晕，声音文件不就是一串二进制数据吗？不就是01010的混合体吗？不就是const char *吗？用std::string也可以，只是不好理解，但是好用。  但是！一般不会把声音、图形读入到内存里面，因为比较占内存。建议做一个汉字到声音文件（即文件存储路径文件名）的映射。

user: user-0
content: 人工置顶

user: user-0
content: 为什么没人
user-0 提问: 求大神解释一段代码的功能。

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。  “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-2
content: 看上去象是最小公倍数，不过静态变量有问题。
user-0 提问: 求大神解决关于同一语句不同程序中结果不同的问题

回复:
user: user-1
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。

user: user-2
content: fflush(stdin) fflush(stdout) 试一下

user: user-3
content: 自己调试跟踪就明白了 注意getchar()的值

user: user-4
content: 字符缓冲区的问题。

user: user-5
content: 应该是你getchar（）了一下
user-0 提问: C语言怎么打开文件并输入文本中的字符啊？

回复:
user: user-1
content: 看代码 /*************************************************************************     > File Name: main1.c     > Author: jukay     > Mail: hellojukay@163.com      > Created Time: 2014年12月24日 星期三 20时52分05秒  ************************************************************************/  #include<stdio.h> #include<stdlib.h> int main() { 	int ch; 	FILE *fp; 	fp = fopen("test.txt","w"); 	if(fp == NULL) 	{ 		fprintf(stdout,"can`t open file test.txt\n"); 		exit(EXIT_FAILURE); 	} 	while((ch = getchar()) != EOF) 	{ 		fputc(ch,fp); 	} 	fclose(fp);  	exit(EXIT_SUCCESS); }

user: user-2
content: fopen, getline（）

user: user-3
content: 引用 4 楼 u012309996 的回复:还是不行。 是输入的时候 exam.txt就行吗？ txt的内容有什么要求？  如果文件在程序目录下就可以你那样输入 如果不是就要输入全路径

user: user-4
content: 引用 3 楼 jacksonfan 的回复:[quote=引用 2 楼 u012309996 的回复:]  显示文件内容 [code=c ]#include<stdio.h> #include<stdlib.h> #define max 1000 int main(void) { 	int count = 0; 	FILE * fp; 	char ch; 	char fname[max]; 	printf("Enter your file name:\n"); 	gets(fname); 	if ((fp = fopen(fname, "r")) == NULL) 	{ 		printf("You can not open file\n"); 		exit(1); 	} 	else 	{ 		while ((ch = getc(fp)) != EOF) 		{ 			printf("%c",ch); 		} 	} 	fclose(fp); 	exit(0); } [/code][/quote] 还是不行。 是输入的时候 exam.txt就行吗？ txt的内容有什么要求？

user: user-3
content: 引用 2 楼 u012309996 的回复:显示文件内容 [code=c ]#include<stdio.h> #include<stdlib.h> #define max 1000 int main(void) { 	int count = 0; 	FILE * fp; 	char ch; 	char fname[max]; 	printf("Enter your file name:\n"); 	gets(fname); 	if ((fp = fopen(fname, "r")) == NULL) 	{ 		printf("You can not open file\n"); 		exit(1); 	} 	else 	{ 		while ((ch = getc(fp)) != EOF) 		{ 			printf("%c",ch); 		} 	} 	fclose(fp); 	exit(0); } [/code]

user: user-4
content: 引用 1 楼 jacksonfan 的回复:是要向文件中输入数据还是显示文件内容  显示文件内容

user: user-3
content: 是要向文件中输入数据还是显示文件内容
user-0 提问: 菜鸟大无畏，多个问题求解

回复:
user: user-0
content: 引用 1 楼 truelance 的回复:数据存到文件里，用归并排序 可以用数据库软件吗 我知道access的容量好像才最大2G肯定不够…… 其他的呢？

user: user-1
content: 数据存到文件里，用归并排序

user: user-2
content: 取TOP1000,可以用最小二叉树来实现，可以把数据保存到硬盘中，保存成比如TXT的格式，然后就是读数据、建二叉树，有1000个数据的最小二叉树，等数据全部遍历一次后，就可以得到TOP1000了。  是50G 的数据？如果要全排序，可以借助哈希表，或外排序

user: user-3
content: 用文件读写模拟内存读写，参考_lseeki64函数。 排序算法参考C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC\QSORT.C
user-0 提问: 简单的c__scanf语句

回复:
user: user-1
content: 引用 4 楼 cypress2012 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] #include <stdio.h> #include <string.h> char s[80]; int i; char c; int main() {     while (1) {         printf("Input a integer:");fflush(stdout);         rewind(stdin);         fgets(s,80,stdin);         if (strlen(s)>10) {             printf("Input too long(>9)!\n");             continue;         }         if (2==sscanf(s,"%d%c",&i,&c)) {             if ('\n'==c) {                 printf("%d is a integer.\n",i);                 break;             }         }         if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;         printf("\"%s\" is NOT a integer!\n",s);     }     return 0; }  四哥，我就想简单的实现个scanf的功能，你应该不用帮我写一个类似的吧，帮忙看看我那个问题出哪里好么[/quote] 你以后类似我这段代码使用scanf，就不会出也不会问类似问题了。 scanf功能是IT界最简单也最复杂的功能。

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:#include <stdio.h> #include <string.h> char s[80]; int i; char c; int main() {     while (1) {         printf("Input a integer:");fflush(stdout);         rewind(stdin);         fgets(s,80,stdin);         if (strlen(s)>10) {             printf("Input too long(>9)!\n");             continue;         }         if (2==sscanf(s,"%d%c",&i,&c)) {             if ('\n'==c) {                 printf("%d is a integer.\n",i);                 break;             }         }         if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;         printf("\"%s\" is NOT a integer!\n",s);     }     return 0; }  四哥，我就想简单的实现个scanf的功能，你应该不用帮我写一个类似的吧，帮忙看看我那个问题出哪里好么

user: user-1
content: #include <stdio.h> #include <string.h> char s[80]; int i; char c; int main() {     while (1) {         printf("Input a integer:");fflush(stdout);         rewind(stdin);         fgets(s,80,stdin);         if (strlen(s)>10) {             printf("Input too long(>9)!\n");             continue;         }         if (2==sscanf(s,"%d%c",&i,&c)) {             if ('\n'==c) {                 printf("%d is a integer.\n",i);                 break;             }         }         if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;         printf("\"%s\" is NOT a integer!\n",s);     }     return 0; }

user: user-0
content: 引用 1 楼 ZHANGJIXIN 的回复:没发现代码错误我把scanf那里注释掉，然后i初始化的时候就赋值，这样是可以执行ok的。用scanf键盘输入就报错了

user: user-2
content: 没发现代码错误
user-0 提问: c语言如何实现定点运算，用定点模拟浮点

回复:
user: user-1
content: 请看11楼链接的帖子。

user: user-0
content: 那个double类型在c语言中是不是在不同型号的机子上的长度不一样啊，如何保证不同平台上的运行结果一致，是不是只能用定点型啊

user: user-1
content: 引用 8 楼 a707497224 的回复:我现在想显示定点数，整数部分好显示，那小数部分怎么办，好麻烦啊，谁能教我一下，谢谢了 __int64 v=1234567890123456789i64; printf("%I64.%I64\n",v/1000000000i64,v%1000000000i64);//1234567890.123456789

user: user-0
content: 我现在想显示定点数，整数部分好显示，那小数部分怎么办，好麻烦啊，谁能教我一下，谢谢了

user: user-1
content: http://bbs.csdn.net/topics/390676437

user: user-0
content: 不是说定点数比浮点数，精度高吗，怎么我在使用乘法时，浮点数的值更接近真实值呢，它用了什么优化吗，怎么才能让定点数精度更高

user: user-0
content: 看了一下那个 decimal128也是浮点型的，老师让我们用定点型来做，不过还是谢谢了

user: user-2
content: 你要的不是定点运算，你要的是高精度小数，比如用在银行之类的。 到网上搜索 decimal128 之类的。 有一个库叫做 libdecnumber 好像就是解决这个的。

user: user-0
content: 太感谢了，给了我很大帮助，不过还有个问题我用的int 分解为1位符号位，3位数字位和28位小数位，但是在计算乘法是如何存储中间临时结果因为乘法会扩大，例如我定义的数据类型类型不能存储中间结果，我要怎么做才能让精度更大一些，我想先两个数左移16再乘这样可以吗，还是有更好的算法

user: user-3
content: 主要看你的小数部分有多长,,,或者说整个数有多长,如果不是很长的话,直接把小数点舍弃就是了,然后通过计算得出结果,再通过另一个计算得出小数点的位置就行了,,,,比如,12.345*67.89 直接用12345*6789然后小数点标到12*67的位数后面就是了,而12.345/67.89同样,用12345/6789,然后把小数眯标到12/67的整数位后面就是了,难道你计算的数长度已经超过long long所能表达的极限长度了?那结合整数数组来做就是了,,,,并不会损失多少效率的 切记一点,别走弯路,你要的是小数长,而不是大数运算,别被带到套数运算的沟里,那样,你就真损失效率了

user: user-0
content: 主要是运算尤其是除法与乘法，还有就是输入时把浮点转化为定点

user: user-4
content: 可以用结构体呀。字符串也是可以的哦

user: user-5
content: 参考 http://en.wikipedia.org/wiki/Libfixmath
user-0 提问: 一个搞怪的问题

回复:
user: user-0
content: 不是没有初始化的问题，在字符串初始化中，未初始化的空间不是自动初始化为NULL即‘\0',可我的电脑自动初始化的是a

user: user-1
content: 初始化变量。。。

user: user-2
content: 未初始化的局部变量

user: user-3
content: 你是想看c语言里面,未初始 的变量 吗?
user-0 提问: 有关数据结构的几个小问题  求救各位高手

回复:
user: user-1
content: 引用 10 楼 qq_23908539 的回复:[quote=引用 3 楼 Evankaka 的回复:] 第二个可以在最后加一句while(1); 这样不管是什么编译器都不会退出啦～，当然 。2楼的方法也行，只不过只能用在C++里头，C不行  我刚试过加个while（1）确实好用   但这样的话怎么什么都输不进去了， 这个while（1）的含义我还不是太理解，麻烦再解释一些，非常感谢！！[/quote]  while(1);//这是一个死循环，1表示为真，要注意后面的分号，表示什么都不做～。我平时写控制台程序最后喜欢加这个

user: user-0
content: 引用 3 楼 Evankaka 的回复:第二个可以在最后加一句while(1); 这样不管是什么编译器都不会退出啦～，当然 。2楼的方法也行，只不过只能用在C++里头，C不行  我刚试过加个while（1）确实好用   但这样的话怎么什么都输不进去了， 这个while（1）的含义我还不是太理解，麻烦再解释一些，非常感谢！！

user: user-0
content: 非常感谢每一个替我解答疑问的人！

user: user-2
content: 引用 1 楼 C0909 的回复:第一个  0在C语言里就是NULL   第二个 你可以使用systme("pause");//这个是等待用户按下任意键 第三个 等下 第四个 是  三木运算符  如果p1==1 把p1赋值給 p3->next 否则 把p2赋值給 p3->next  p3->next=p1?p1:p2;这句的意思是如果p1指针不为空，则将p1赋给p3->next，否则将p2赋给p3->next

user: user-3
content: 第一个为强制转换

user: user-3
content: 引用 4 楼 Evankaka 的回复:第四个 <表达式1>?<表达式2>:<表达式3>; "?"运算符的含义是: 先求表达式1的值, 如果为真, 则执行表达式2，并返回表达式2的结果 ; 如果表达式1的值为假, 则执行表达式3 ，并返回表达式3的结果。 可以理解为条件 ? 结果1 : 结果2 里面的？号是格式要求。也可以理解为是不是条件成立，条件成立为结果1否则为结果2。  我怎么感觉楼上的说错了  p3->next=p1?p1:p2;    这个语句不知道啥意思。。 p3->next=p1是赋值啊，不是判断。所以它无论怎么样返回都是真的。所以返回p1  如果p1  为NULL，则将p3的next指向p2,否则，指向p1

user: user-4
content: /*  #define NULL 0  int main() { 	... 	getchar(); 	return 0; }  //exit(1)表示异常退出.这个1是返回给操作系统的。 //exit(x)（x不为0）都表示异常退出 //exit(0)表示正常退出 //exit()的参数会被传递给一些操作系统，包括UNIX,Linux,和MS DOS，以供其他程序使用。 //stdlib.h: void exit(int status);  p3->next=p1?p1:p2;   if(p1!=NULL)p3->next=p1; else p3->next=p2;  */

user: user-1
content: 第四个 <表达式1>?<表达式2>:<表达式3>; "?"运算符的含义是: 先求表达式1的值, 如果为真, 则执行表达式2，并返回表达式2的结果 ; 如果表达式1的值为假, 则执行表达式3 ，并返回表达式3的结果。 可以理解为条件 ? 结果1 : 结果2 里面的？号是格式要求。也可以理解为是不是条件成立，条件成立为结果1否则为结果2。  我怎么感觉楼上的说错了  p3->next=p1?p1:p2;    这个语句不知道啥意思。。 p3->next=p1是赋值啊，不是判断。所以它无论怎么样返回都是真的。所以返回p1

user: user-1
content: 第二个可以在最后加一句while(1); 这样不管是什么编译器都不会退出啦～，当然 。2楼的方法也行，只不过只能用在C++里头，C不行

user: user-5
content: 第三个：调用exit()函数会正常结束程序,该函数需要一个Int类型的参数,它表示程序结束时的状态,该参数可以是0或者表示成功数字。一般使用return 就可以了 除非在特别的情况才使用

user: user-5
content: 第一个  0在C语言里就是NULL   第二个 你可以使用systme("pause");//这个是等待用户按下任意键 第三个 等下 第四个 是  三木运算符  如果p1==1 把p1赋值給 p3->next 否则 把p2赋值給 p3->next
user-0 提问: 求大神告诉我原因，为什么输出的结果会是这样呢 ？按道理x[8]='\0',输出结果应该是1 9 9 4才对啊，哪里出问题了，请详细说下，谢谢！！

回复:
user: user-1
content: #include <stdio.h> #include <string.h> void aaa(char x[10]) { 	int i; 	for(i=strlen(x)-1;i>=0;i--) 	{ 		x[2*i]=x[i]; 		x[2*i+1]=' '; 	} 	printf("%s\n",x); } void main() { 	char a[10]; 	gets(a); 	aaa(a); } /* 1.i=strlen(x)不对,比如楼主输入1994,strlen(x)=4,而对应的是x[0],x[1],x[2],x[3] 2.按楼主意思格式应该是          0 1 2 3 4 5 6 7 8    input:1 9 9 4   output:1   9   9   4   所以是x[2*i]=x[i] x[2*i+1]=' ' */

user: user-2
content: #include <stdio.h> #include <string.h> void aaa(char x[10]) { 	int i; 	int len = strlen(x); 	for(i=len - 1;i>=0;i--) 	{ 		x[2*i+1]=x[i];  		x[2*i]=' '; 		 	} 	x[2 * len] = 0; 	printf("%s\n",x);} void main() { 	char a[10];  	gets(a);  	aaa(a); }  你那个写法x[0]取不出来的 另外数组小了，很容易越界 注意数组下标从0开始

user: user-3
content: x[10]的下标序号是从0开始的

user: user-4
content: 把printf放到循环里看结果
user-0 提问: 编译不通过，不知道为什么

回复:
user: user-1
content: void fnchange(struct test sthuman);//要求输入不是数组  fnchange(ststaff);//你这输入是个数组啊。。

user: user-2
content: 引用 5 楼 C0909 的回复: struct test{     int iage;     char sex; }ststaff[2]={18,'M'};  难道不是应该写成  struct test{     int iage;     char sex; }ststaff[2]={{18,'M'},{19,'c'}};  还有一个错误就是你的  ststaff 是数组   而你的 函数里的形参不是数组,是一个普通变量, 数组不可以传递給 普通变量    要么你把形参写成  指针 要么就 把  形参写成数组(其实编译以后都是指针)！

user: user-2
content: struct test{     int iage;     char sex; }ststaff[2]={18,'M'};  难道不是应该写成  struct test{     int iage;     char sex; }ststaff[2]={{18,'M'},{19,'c'}};

user: user-0
content: 引用 3 楼 user-3 的回复:[quote=引用 2 楼 tenmenglin 的回复:] [quote=引用 1 楼 user-3 的回复:] fnchange(ststaff); 里边的参数传的不对 函数需要一个结构体对象，你传的是个数组，改成fnchange(ststaff[0]);还是不对啊[/quote]printf("%d,%c\n",ststaff[0].iage,ststaff[0].sex); [/quote] 那个不应该是这个吗？ststaff[1].sex，0不是被占用了么  而且  fnchange 在函数里不是又被赋值了么

user: user-3
content: 引用 2 楼 tenmenglin 的回复:[quote=引用 1 楼 user-3 的回复:] fnchange(ststaff); 里边的参数传的不对 函数需要一个结构体对象，你传的是个数组，改成fnchange(ststaff[0]);还是不对啊[/quote]printf("%d,%c\n",ststaff[0].iage,ststaff[0].sex);

user: user-0
content: 引用 1 楼 user-3 的回复:fnchange(ststaff); 里边的参数传的不对 函数需要一个结构体对象，你传的是个数组，改成fnchange(ststaff[0]);还是不对啊

user: user-3
content: fnchange(ststaff); 里边的参数传的不对 函数需要一个结构体对象，你传的是个数组，改成fnchange(ststaff[0]);
user-0 提问: x262 64bit crash

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:以前搞过。。现在忘完了。 帮忙回忆一下吧，谢谢了！你那时候64位的x262可以用吗？

user: user-0
content: 是common/quant.c中的x264_quant_8x8_avx2出错，没找到这个函数定义，好像是在common/x86/quant-a.asm中，我对汇编语言不熟没看出来。只要把这个函数所在的两行注释起来，不用这个汇编优化，默认使用static int quant_8x8函数就不会有问题。

user: user-1
content: 以前搞过。。现在忘完了。
user-0 提问: 问下windows7下的JMP ESP 指令的地址是多少？

回复:
user: user-0
content: 哦哦 ，是变动的了啊

user: user-1
content: 换个系统试一下，稍微看了一下， 是想修改main的返回地址，12个字节后就是你注释jmp的地方，看起来不是jmp指令？

user: user-2
content: 《The Intel 64 and IA-32 Architectures Software Developer's Manual》

user: user-3
content: WIN7以后, 几个核心dll都是浮动地址加载的, 没有统一的JMP ESP地址. 你到你要溢出的程序里找个合适的地址呗...
user-0 提问: 触屏点餐系统，用什么语言开发？

回复:
user: user-1
content: 系统的开发随意了，C++的qt开发界面也行，MFC开发界面也行，但是触屏应该是硬件问题了，那就不是单纯的软件解决了！

user: user-2
content: java最简单了

user: user-3
content: 最简单的：android平板，再找人给你开发个点餐应用。

user: user-4
content: c++吧，不错呦！

user: user-5
content: 我觉得c语言应该比较适合

user: user-0
content: u011337306：  为什么，要调试底层驱动？

user: user-0
content: 组装台收银机，必须具备以下两方面。 1.支持触摸屏的系统。 2.电脑有触摸屏功能。 对么？

user: user-0
content: 在网络看到，有种触摸屏收银一体机。 这东西，怎么安装软件？

user: user-6
content: 1.如果是android系统，Java开发APP，C/C++开发底层；如果是Windows，可以C++开发App，C/C++开发底层； 2.比如触摸屏的话，一般是电容屏，一般都是IIC接口，需要调试底层驱动；
user-0 提问: 我想把一个字节拆开来用

回复:
user: user-0
content: 引用 5 楼 adlay 的回复:现在系统都是 64 位的了，一次就取 8 个字节，就算是 32 位的系统，一次读也可以同时取四个字节，不存在说 2 个字节要分开取。 位运算在 CPU 内部进行，不访问任何外部设备，当然快了 如果不这么做，我就要把数据写进硬盘，然后读文件  如果数据能缩水一半，就不用硬盘操作了，我觉得有这个必要

user: user-1
content: 2方法比1写程序要麻烦点，占用的内存要少点，其他的区别其实不大，效率其实差不多

user: user-2
content: 先做出来再谈效率，啥都没有等于白说！没有一步到位的事

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

user: user-4
content: 如果内存少,可以用位运算.c语言够灵活,自己想咋搞咋搞. 给你个结构供参考.  typdef union{     char a;     struct byte2bit {         char top       : 4;         char bottom : 4;     } bit_u; } bit_op;

user: user-5
content: 你老师告诉你一个字节存两个值快了?还是你老师告诉你一个字节存两个值是位运算了?,,,如果你老师真的这么说了,要么,你老师口误,没说明确,要么,他忽悠你. 位运算的效率与你怎么存储有毛关系?,你一个字节存一个有效数据和丰8个,与是不是位运算什么关系?,,,位运算指的是运算过程,不是存储方式..你取一个字节C(假设字符型)的四位 C&0xF,这叫位运算,C%16这不叫位运算, 切记,位运算是运算,不是存储

user: user-6
content: 再快的运算也比不运算要慢 你一个字节的两个有效数据要做什么处理呢？加减乘除？

user: user-7
content: 如果你真的只要使用一个字节的一部分，那你可以考虑使用位域啊

user: user-8
content: because  x86 registers  ?   AL/AH/AX/EAX/RAX: Accumulator        ??  modern computer has  rich resource   SIMD  XMM0–XMM15   128-bit    SIMD YMM0–YMM15    256-bit    SIMD  ZMM0–ZMM31      512-bit

user: user-9
content: 现在系统都是 64 位的了，一次就取 8 个字节，就算是 32 位的系统，一次读也可以同时取四个字节，不存在说 2 个字节要分开取。 位运算在 CPU 内部进行，不访问任何外部设备，当然快了

user: user-10
content: 具体问题具体分析。老师的话也可以质疑啊

user: user-11
content: 没必要这么省内存吧？

user: user-12
content: 取即赋值 ，当然还有计算   而位可以用移位  位域等实现 蛮方便  效率也高

user: user-13
content: 效率这东西，等你确定是因为把一个字节拆开导致慢的时候再说。没必要在这问题上纠结，基本上不会是因为这种东西导致速度慢的。
user-0 提问: (void *)p 与 *(void **)p区别 

回复:
user: user-1
content: *p = a 就是  5566 至于地址格式输入， 只是输出用地址输入方式表示数据，通常不过是，输出整型数据的 十六进制表示而已 。 其实  printf("%p\n",a) ;也是没有问题的， 因为  printf 通常，并不检测参数是个正确， 而是依照 %格式 输出对应的数据   你只要保证数据格式（主要是长度）是对的就没有问题。 至于参数错误，输出结果，是否正确，  这是你自己编程的时候的逻辑问题。 printf 这种函数，并不考虑  注意，。这里有这么几个问题 1） 参数传递 2）参数也是表达式，所以参数在表达式解析的时候，会做一些改变 3）printf 函数，对应参数的获取方式， 其中 float ,会当作double 处理。 4）printf 只是按照 第一个参数提供的格式， 逐一匹配传入的参数，                        不足者，继续读取堆栈上的数据，不管是否传入的参数，有余者自动丢弃 因为这是 C调用约定，所以每个书写正确的 printf  都是没有问题的 而且，参数错误，通常不会影响后面的程序正确运行， C语言可以正确的清理堆栈。
user-0 提问: C语言编程， 急~~求大神帮忙分析下问题，本人新手，谢谢啦~~

回复:
user: user-1
content: 你这段代码的问题太多了！！

user: user-2
content: 引用 2 楼 yDevilz 的回复:D:\DEVc++\新建文件夹\zuoye.c: In function 'main':  D:\DEVc++\新建文件夹\zuoye.c:19:17: error: expected identifier or '(' before '[' token       struct stu([10];                  ^ D:\DEVc++\新建文件夹\zuoye.c:60:2: error: expected declaration or statement at end of input   }  编译错误神马的自己可以解决的。看下编译器的报错就行啦

user: user-3
content: 引用 3 楼 q3733353520 的回复:struct stu([10];  多了个(  sruct stu  stu[10];

user: user-3
content: struct stu([10];  多了个(

user: user-0
content: D:\DEVc++\新建文件夹\zuoye.c: In function 'main':  D:\DEVc++\新建文件夹\zuoye.c:19:17: error: expected identifier or '(' before '[' token       struct stu([10];                  ^ D:\DEVc++\新建文件夹\zuoye.c:60:2: error: expected declaration or statement at end of input   }

user: user-4
content: 程序看不清，什么错误？
user-0 提问: 没有头结点的单链表的冒泡排序，大神看看怎么错了

回复:
user: user-1
content: 楼主试试 把p1=head;放在 循环外面试试

user: user-2
content: 把结果输出，看看到底变成啥样了，在调试

user: user-3
content: 把p1->name  什么的打印出来就知道了了
user-0 提问: 【求助】TrieTree的问题。

回复:
user: user-0
content: 引用 4 楼 user-2 的回复:TrieNode *a;       InitTrieRoot(&a); 这里为什么这么用？你 想把让a=null?何必这么复杂， for ( i = 0; i < n; i++)             InsertTrie(&a); 上面a是空的啊？？你还插入？ 我把Init都注释了，提交依旧是RE错误。

user: user-1
content: init这个函数没用，等于不要，你的所有节点必须通过create。

user: user-2
content: TrieNode *a;       InitTrieRoot(&a); 这里为什么这么用？你 想把让a=null?何必这么复杂， for ( i = 0; i < n; i++)             InsertTrie(&a); 上面a是空的啊？？你还插入？

user: user-0
content: 引用 2 楼 fly_dragon_fly 的回复:init这个函数没用，等于不要，你的所有节点必须通过create。 可是create没有出错啊~

user: user-0
content: 输入 输入的第一行为一个正整数n，表示词典的大小，其后n行，每一行一个单词（不保证是英文单词，也有可能是火星文单词哦），单词由不超过10个的小写英文字母组成，可能存在相同的单词，此时应将其视作不同的单词。接下来的一行为一个正整数m，表示小Hi询问的次数，其后m行，每一行一个字符串，该字符串由不超过10个的小写英文字母组成，表示小Hi的一个询问。  在20%的数据中n, m<=10，词典的字母表大小<=2.  在60%的数据中n, m<=1000，词典的字母表大小<=5.  在100%的数据中n, m<=100000，词典的字母表大小<=26.   输出 对于小Hi的每一个询问，输出一个整数Ans,表示词典中以小Hi给出的字符串为前缀的单词的个数。  样例输入 5 babaab babbbaaaa abba aaaaabaa babaababb 5 babb baabaaa bab bb bbabbaab 样例输出 1 0 3 0 0
user-0 提问: 关于循环语句里的问题，对大神来说很简单的

回复:
user: user-1
content: 主程序循环写错了  应该在输入后， 立即判断数据的合法性， 然后再执行操作  如果希望，从输入到操作的全部代码 都在循环里面  用 for 循环比较合适 输入语句 放在 第一个和第三个表达式中

user: user-0
content: 引用 1 楼 user-4 的回复:int main(int argc, char* argv[]) { 	int i1=0; 	int i2=0; 	int i3=i1%i2; 	cout<<i3<<endl; 	return 0; } 楼主，我只是执行这个操作，也崩溃，所以可能是int i3=i1%i2;问题，也就是你进行了这个操作，除数为０ 谢谢,我用2#的思维,一步一步测试了,之后发现了这个问题了!谢谢哈

user: user-2
content: 后两个按楼主的输入是不会调用到aliqout函数的，前三个都会调用到aliqout函数，qliqoout函数有除数为0情况，所以会错……

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

user: user-3
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-4
content: int main(int argc, char* argv[]) { 	int i1=0; 	int i2=0; 	int i3=i1%i2; 	cout<<i3<<endl; 	return 0; } 楼主，我只是执行这个操作，也崩溃，所以可能是int i3=i1%i2;问题，也就是你进行了这个操作，除数为０
user-0 提问: 新手！求解为什么会出现这问题？

回复:
user: user-1
content: 引用 2 楼 qq532400624 的回复:[quote=引用 1 楼 windzhu0514 的回复:] int fac(int n) { int f; if(n==1) f=1; else f=fac(n-1)*n; return(f); }  这个函数如果n传入了0  程序就会错误  递归没有了接受条件  万分感谢！！你怎么看出来的？但是，不是当n=1时，fac返回1，他就不是不再减下去了？[/quote]  递归最怕的就是起始条件不对 和 没有结束条件   多练习下

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

user: user-2
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-0
content: 引用 1 楼 windzhu0514 的回复:int fac(int n) { int f; if(n==1) f=1; else f=fac(n-1)*n; return(f); }  这个函数如果n传入了0  程序就会错误  递归没有了接受条件  万分感谢！！你怎么看出来的？但是，不是当n=1时，fac返回1，他就不是不再减下去了？

user: user-1
content: int fac(int n) { int f; if(n==1) f=1; else f=fac(n-1)*n; return(f); }  这个函数如果n传入了0  程序就会错误  递归没有了接受条件
user-0 提问: 大家帮帮忙  急急急

回复:
user: user-1
content: 找到原因了。这个不是我编的，是剽窃别人的。所以印象不深。

user: user-1
content: 嫌4楼复杂，可直接使用GDI+，参考下面：（我怎么才想起我以前编过这个例子代码！？唉！老了，岁月不绕人啊。） #include <iostream> #include <fstream> #include <string> #include <windows.h> #include <gdiplus.h> #pragma comment(lib, "gdiplus.lib")  using namespace std; using namespace Gdiplus;  int main() {     GdiplusStartupInput gdiplusstartupinput;     ULONG_PTR gdiplustoken;     GdiplusStartup(&gdiplustoken, &gdiplusstartupinput, NULL);      wstring infilename(L"1.jpg");     string outfilename("color.txt");      Bitmap* bmp = new Bitmap(infilename.c_str());     UINT height = bmp->GetHeight();     UINT width  = bmp->GetWidth();     cout << "width " << width << ", height " << height << endl;      Color color;     ofstream fout(outfilename.c_str());      for (UINT y = 0; y < height; y++)     for (UINT x = 0; x < width ; x++) {             bmp->GetPixel(x, y, &color);             fout << x << "," << y << ";"                  << (int)color.GetRed()   << ","                  << (int)color.GetGreen() << ","                  << (int)color.GetBlue()  << endl;     }      fout.close();      delete bmp;     GdiplusShutdown(gdiplustoken);     return 0; }

user: user-1
content: 引用 6 楼 yunyunjianjian 的回复:4楼，我看不懂，不是网站么？ C语言开源图象处理项目。

user: user-2
content: 每一行都得到了，你还要得到什么数据？

user: user-0
content: 4楼，我看不懂，不是网站么？

user: user-0
content: 但是我要c需要的，我现在知道matlab，就是改不成c

user: user-1
content: http://www.imagemagick.org

user: user-3
content: 最简单就用opencv，你直接读入图片，有函数可以得到三通道的数据。 还有一法子就是用GDI或才GDI+，可以百度看看

user: user-4
content: 如果是在mfc的话用 clr=::GetPixel(pDC->m_hDC,250,250); R=GetRValue(clr); G=GetGValue(clr); B=GetBValue(clr);

user: user-0
content: 我翻了好多书，都不懂

user: user-5
content: 我开始想先把他每一行都弄成一个数组 然后再把每一行拆开存入这7个数组中 但是不知道该如何拆。。。
user-0 提问: c语言如何实现实时按某个键退出或者放回主界面

回复:
user: user-1
content: win32程序那就可以用捕获鼠标按键的办法

user: user-2
content: console屏幕处理例子程序。终端窗口屏幕处理相关API使用例子。来自MSVC20\SAMPLES\win32\console\ http://download.csdn.net/detail/zhao4zhong1/3461309

user: user-0
content: 如果这样的话，用户输入的时候需要一个字符回车一次，体验就不好了

user: user-3
content: scanf( "%c", &char ); 一个一个字符读入，并判断

user: user-0
content: 我做的是win32程序，之前用getchar没起作用

user: user-0
content: win32程序

user: user-1
content: 引用 2 楼 clearnerpro 的回复:这样就可以在用户输入的时候即正在执行scanf语句时，实现按键退出吗？   你是win32还是控制台的程序？

user: user-4
content: 你写的是控制台程序吧？ 如果是这样的话，用户输入密码的时候，如果已经进入scanf函数，用户不按回车的话，程序会一直停在那里等待的。。  按照你的需求，用户输入一半，不按回车，按下ESC，然后你响应，这是可以的，不过用scanf估计实现不了，你应该用 getchar 试一试，用户只要敲键盘了，你都会收到信息，这样你自己再判断有没有ESC，然后就可以处理了

user: user-0
content: 这样就可以在用户输入的时候即正在执行scanf语句时，实现按键退出吗？

user: user-0
content: 这样就可以在用户输入的时候即正在执行scanf语句时，实现按键退出吗？

user: user-1
content: 捕获鼠标按键，你可以网上搜，很多解决方案的
user-0 提问: C或C++外部调用函数

回复:
user: user-0
content: max.cpp是外部调用的函数，不能编译，只能生成目标文件后，再由主程序调用。max.h是要写的

user: user-1
content: gcc编译的时候写清楚文件依赖关系就可以的，比如 gcc -o main main.o max.o

user: user-2
content: 文件 1#include<stdio.h> void myprint() { 	printf("this is my lib!\n"); } 文件 2 /*************************************************************************     > File Name: main.c     > Author: jukay     > Mail: hellojukay@163.com      > Created Time: 2014年12月23日 星期二 20时02分14秒  ************************************************************************/  #include<stdio.h> #include"mylib.h" int main() { 	myprint();  	return 0; } sudo gcc main.c  jukay@jukay-desktop:/pragram/p8$ ./a.out this is my lib!jukay @jukay-desktop:/pragrame/p8$

user: user-3
content: 你需要区别编译和链接，这是两个过程。 建议看看《程序员的自我修养 链接 装载与库》

user: user-4
content: 1. 创建一个max.h文件 2. #include <stdio.h> 3. int max( int x, int y); 保存。 max.c和main.c中增加#include"max.h"

user: user-5
content: 就写一个int max (int ,int );作为声明，建议你在linux下开发的时候使用Qt Creator作为开发工具进行开发，这个在linux 下开发属于标准开发，使用命令行开发比较慢

user: user-0
content: max.h怎么写啊

user: user-6
content: mian中找不到max函数，max函数声明一个放到max.h，main文件包含max.h

user: user-0
content: 是不是要要写一个max.h，创建DLL？
user-0 提问: 大神求助，请问问什么会出现这种情况的？？？、、详细告诉我原因，谢谢！！

回复:
user: user-1
content: 第二个for的i++改为j++

user: user-2
content: 2个 i++?

user: user-1
content: #include <stdio.h> int max(int x[][4]) { 	int i,m,j; 	m=x[0][0]; 	for(i=0;i<3;i++) 	 	for(j=0;j<4;j++) 	   		if(m<x[i][j]) 				m=x[i][j]; 	return m; } void main() { 	static int a[3][4]={{1,8,15,54},{64,24,3,47},{47,122,34,469}}; 	printf("%d",max(a)); }
user-0 提问: 新人大数加法求解

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

user: user-0
content: 引用 4 楼 a138762698828 的回复:scanf("%d%*c",&n);     while(n-->0)     {         scanf("%s%s",&a,&b); 两个scanf 就有问题了  第一个scanf  有两个输出  只有一个参数 n， 第二个scanf ， a b都是数组， 输入就不需要取地址了 他们本来就指向数组的首地址！  感谢！其实第一个%*c没问题，只是用来过滤换行符，问题出在第二个scanf，去掉&后终于Presentation Error了，再结合3楼答案就AC了！

user: user-0
content: 引用 3 楼 niechangxu 的回复:你的 # 位置错了吧 应该是 Case #1:   ，还有就是这句话Output a blank line between two test cases.  两组测试数据之间有空行，你这个空行太多了吧。。  感谢！那个#是多余的，还有空行问题，格式感觉真心难玩，老是Presentation Error！

user: user-2
content: scanf("%d%*c",&n);     while(n-->0)     {         scanf("%s%s",&a,&b); 两个scanf 就有问题了  第一个scanf  有两个输出  只有一个参数 n， 第二个scanf ， a b都是数组， 输入就不需要取地址了 他们本来就指向数组的首地址！

user: user-3
content: 你的 # 位置错了吧 应该是 Case #1:   ，还有就是这句话Output a blank line between two test cases.  两组测试数据之间有空行，你这个空行太多了吧。。

user: user-0
content: 引用 1 楼 user-4 的回复:先说一下那里错了  OJ那里错误信息是Wrong Answer

user: user-4
content: 先说一下那里错了
user-0 提问: 帮忙看看这个程序哪里错了（新手）

回复:
user: user-1
content: 字符串中找字符串用的是，strstr() 字符串中找字符用的是，strchr(), 这时候楼主的‘b[10]’就不对了，该是吧b[10]

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

user: user-3
content: 都说清楚了.

user: user-4
content: l自己可以动手调 F9下断点，F10单步调试，F4定位有问题的地方

user: user-5
content: 引用 3 楼 zero_bug 的回复:[quote=引用 1 楼 hnwyllmm 的回复:] while(1) { int n=strlen(a[20]);    // a是字符串，a[20]是字符，不能用strlen，还有，a[20]已经越界了，楼主很多这种越界的访问 c[10]=strchr(a,'b[10]'); // b[10]也越界了，c[10]也是；b[10]已经是字符了，不需要加单引号 int m=strlen(c[10]); p=n-m; printf("%d",p); exit(0); } print("%d",-1);那什么又是越界呢[/quote] ------------------------------------------------------------------------------------------------------------- 数组a[20]应该是从a[0] 到a[19]，a[20]这个字符已经超出了定义的范围之外。。。所以就叫越界。

user: user-0
content: 引用 1 楼 hnwyllmm 的回复:while(1) { int n=strlen(a[20]);    // a是字符串，a[20]是字符，不能用strlen，还有，a[20]已经越界了，楼主很多这种越界的访问 c[10]=strchr(a,'b[10]'); // b[10]也越界了，c[10]也是；b[10]已经是字符了，不需要加单引号 int m=strlen(c[10]); p=n-m; printf("%d",p); exit(0); } print("%d",-1);那什么又是越界呢

user: user-6
content: while(1) { int n=strlen(a[20]);    // a是字符串，a[20]是字符，不能用strlen，还有，a[20]已经越界了，楼主很多这种越界的访问 c[10]=strchr(a,'b[10]'); // b[10]也越界了，c[10]也是；b[10]已经是字符了，不需要加单引号 int m=strlen(c[10]); p=n-m; printf("%d",p); exit(0); } print("%d",-1);
user-0 提问: 编译器怎么能够输出结构体成员的符号信息和地址

回复:
user: user-1
content: 是想知道结构内成员的偏移吗？ 直接在VC里面看不就可以了

user: user-2
content: 换GCC试试

user: user-3
content: SymGetTypeInfo

user: user-4
content: 引用 2 楼 wangbinyantai 的回复:[quote=引用 1 楼 q3733353520 的回复:] VS 没用过， 不过 你可以根据首地址和内存来计算，比如int 占4个字节  您好，谢谢您的回复，地址好办，主要是结构体内部变量的符号表示怎么获取？例如怎么获取Tmy.a，Tmy.b等字符串信息[/quote] 值就存在地址。。。，而且 一般 你printf的是不会骗你的

user: user-5
content: 编译器编译的时候， 会储存符号和地址的对应关系， 包括结构体信息，这一类的东西。  调试版，可以把一部分信息储存在 .exe,.dll 内部 VC 可以储存在vc90.pdb 等 *.pdb内部 调试的时候，就可以查看这些信息了 当然，也可以完全不储存，任何这一类的信息 所以这一功能， 只能是编译器厂家，做到编译器内 编译器外部，实现这个功能， 难度要大得多， 甚至几乎是不可能的  换句话说，你要实现一个调试器类似的东西，最好有编译器配合 要不然，你就要去了解编译器，具体的实现方案，了解每个细节  脱离编译器，直接实现是很有挑战性的。

user: user-0
content: 引用 1 楼 q3733353520 的回复:VS 没用过， 不过 你可以根据首地址和内存来计算，比如int 占4个字节  您好，谢谢您的回复，地址好办，主要是结构体内部变量的符号表示怎么获取？例如怎么获取Tmy.a，Tmy.b等字符串信息

user: user-4
content: VS 没用过， 不过 你可以根据首地址和内存来计算，比如int 占4个字节
user-0 提问: 为什么把浮点数用整形格式输出会变成0？

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

user: user-2
content: 《计算机组成原理》 《CSAPP》信息的表示和处理

user: user-3
content: 去看下 int float 这些类型的存储方式

user: user-4
content: printf("--%d\n",(int)k); 这样输出试试

user: user-5
content: 自己调试看看呗，我用手机没法调试 估计是输出的数小于0.5

user: user-6
content: 2.0显示0对的，它刚好尾数为0，可变参数不指定时float将转成double，低4字就是0，要么改为%f,要么强转为int
user-0 提问: 请大家帮我解决一下这个问题，谢谢了

回复:
user: user-1
content: 你讲的都是什么

user: user-2
content: 参考c语言的隐式转换

user: user-3
content: c语言中，发生double到int的隐式转换，主要原因可能是由于double的精度问题没能达到1.7这个具体值，乘法完成后发生转换的时候小数点后面向0舍入。  1.7d = 1.10[1100]....b * 2^0

user: user-4
content: y 要改成 double
user-0 提问: 程序问题

回复:
user: user-1
content: ld是链接器

user: user-0
content: 3Q,hahaha

user: user-2
content: 不懂可以百度谷歌一下，楼主有吗

user: user-3
content: 链接时报错 楼主贴出更详细的信息大家才能帮你分析，看看是不是少了链接库，或者有些源文件没有添加到工程中
user-0 提问: 求个函数

回复:
user: user-1
content: #include <iostream.h>  void main() { 	int m; 	int n; 	cin>>m>>n;  	long cm = 1; 	long cn = 1;  	for (int i = 1;i < n;i ++) 	{ 		cm *= (m - i + 1) * (m - i); 		cn *= (n - i + 1) * (n - i); 	} 	cout<<cm / cn<<endl; }

user: user-2
content: 写过非递归的树遍历嘛？这个和那个差不多！写过八皇后问题嘛？还是差不多！先尝试写个递归的，然后自己管理栈，改写成非递归即可！

user: user-0
content: 楼上的，我只会c不好意思啊，有c 的吗

user: user-3
content: http://blog.csdn.net/zhouqinghe24/article/details/8140046  我这里有个C# 版的  你可以参考一下
user-0 提问: 彻底蒙圈了，求助，如何定义指向数组的指针变量

回复:
user: user-0
content: 谢谢，原来这样表达啊

user: user-1
content: 问题1：typedef  int(*DP) [100]; 问题2：申请空间后，data的空间也会被申请，即100个int类型的数据空间。 问题3：数据赋值，建议使用memcpy；data是一个数组，数组名不能做作左值；
user-0 提问: 数据结构中伸展树的节点展开应该怎么理解

回复:
user: user-1
content: 这个看着不就是访问哪个节点就把哪个节点转换成根节点吗？ 以9为例，他变为根节点，找到左边的子树，放左边，右边的子树放右边 问题就是怎么找左子树和右子树 以左子树为例，比9小的是1-8,1-8组成的子树，找到它的根节点就好了，从图形上看，明显是3 右子树类似，找右边的根节点

user: user-2
content: 首先实现一次旋转的操作，然后再考虑实现伸展操作。
user-0 提问: C实现魔方阵问题

回复:
user: user-1
content: http://www.baidu.com/s?wd=%E4%BA%8C%E7%BB%B4%E6%95%B0%E5%AD%97%E5%B9%BB%E6%96%B9&ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&rsv_pq=860229b20000a38c&rsv_t=7e4ar%2F6YmhNUjohvstYCI9DOwazOEsiwfZ3pUFvj5Dhn873eC7fHwO9mGcY
user-0 提问: 一个简单的函数，但我看不懂，求帮助

回复:
user: user-0
content: 明白了，谢谢大家

user: user-1
content: 楼主了解这几个位运算符的用法吗 在循环最后输出三个变量的值，看能想明白不 one=2,two=0,three=-1 one=6,two=0,three=-1 one=2,two=4,three=-1 one=1,two=2,three=-5 one=0,two=1,three=-3 one=2,two=0,three=-2 one=1,two=2,three=-1 one=5,two=2,three=-1 one=5,two=0,three=-3 one=7,two=0,three=-1 7

user: user-2
content: 两个for循环也行

user: user-3
content: 大概远离就是 3个相同的元素 两个做与运算再做异火运算那么就为0，最终的结果就是只有一个的那个元素

user: user-4
content: arr[1] = {1} arr[2] = {1, 1}; arr[3] = {1, 1, 1}; 这三个数组逐次代入函数中思考一下 one 记录只出现 过1次的数字； two 记录数组中出现过2次的数字； three 用来记录出现1次 和 2次数字的反码集；

user: user-5

user: user-6
content: 不错的想法， one异或同一个数三次还是one，而two的值也是one，这样three只是用来清除，题目已经规定了只有一个数不同，最后就只剩下one。

user: user-7
content: 考验你数学功底的时间到了

user: user-8
content: 这思想真是奇妙，逻辑运算用的出神入化，没有很深的功力怕是写不出来

user: user-9
content: 代码效率确实很高，一次循环o(N)，变量存储空间也很节省。 a[i]&one,如果两个值相同，这个结果是1； 后面几个也是同样的原理，了解几个运算符的结果就会好了。。。

user: user-0
content: 求帮忙。。。
user-0 提问: 文本文件操作_单词的排序

回复:
user: user-1
content: #include "stdio.h" #include "string.h" #include "stdlib.h"  int strCmp(const void *str1, const void *str2)//排序 { 	return strcmp((char *)str1, (char *)str2); } void main() {  	FILE *fpInFile, *fpOutFile; 	char str[10000][16]={'\0'}; 	int i = 0, iStrLen = 0; 	fpInFile = fopen("case1.in","r+"); 	if(fpInFile == NULL) 	{ 		printf("Error: Open file failed!\n"); 		return; 	} 	 	printf("Open file succeed!\n");  	while(!feof(fpInFile)) 	{ 		if(fgets(str[i],16,fpInFile)!= NULL)		 			printf("%s",str[i]); 		i++; 		iStrLen++; 	} 	fclose(fpInFile); 	printf("iStrLen:%d\n",iStrLen);  	qsort(str, iStrLen -1, sizeof(char)*16, strCmp); 	 	fpOutFile = fopen("answer.txt","w+");  	for(i=0; i<iStrLen-1; i++) 	{ 		printf("sort:%s",str[i]); 		fputs(str[i],fpOutFile); 	} 	fclose(fpOutFile);   }  VC测试通过

user: user-2
content: #include <stdio.h> #include <string.h>  static int  count; static char words[10000][10 + 1];  int wordcmp(const void *v1, const void *v2) {     const char *p1;     const char *p2;      p1 = (const char *)v1;     p2 = (const char *)v2;      return strcmp(p1, p2); }  int main(int argc, char *argv[]) {     int    i;     FILE  *fp;     size_t len;     char   buf[80 + 1];      fp = fopen("case1.in", "rb");     count = 0;     while (fgets(buf, sizeof(buf) , fp)) {         len = strlen(buf);         if (len > 0) {             buf[len - 1] = '\0';         }         strcpy(words[count], buf);         count++;     }     fclose(fp);      qsort(words, count, sizeof(words[0]), &wordcmp);      for (i = 0; i < count; i++) {         printf("%s\n", words[i]);     }      return 0; }

user: user-3
content: 愿意使用脚本嘛？AWK+sort就搞定喽

user: user-4
content: 加个  # include <iostream>  using namespace std;  主函数 排序就写个 sort(s,s+n); 其中s是存单词的二维数组 n为单词的个数。

user: user-5
content: 读取文件 排序 输出文件