Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 本人是个学生，希望能帮助我修改下程序

回复:
user: user-1
content: 希望你能把你代码整理了，用标准格式发  int a;

user: user-2
content: Status CreatString(HString &S){        int i=0;        int temp=0;        scanf("%d",&temp);        S.ch=(char *)malloc(MAXSIZE*sizeof(char));        scanf("%c",&S.ch[i]);         while((S.ch[i]!=' ')&&i<=MAXSIZE-1){              i++;             scanf("%c",&S.ch[i]); }         S.length=i;        return 1; }  给你改了下，试试吧

user: user-3
content: #include"stdio.h" #include"stdlib.h"  #include"string.h" #define ERROR  0 #define MAXSIZE 100 typedef int Status; typedef struct{   char *ch;   int length; }HString;  Status CreatString(HString &S){        int i=0;        S.ch=(char *)malloc(MAXSIZE*sizeof(char));        scanf("%c",&S.ch[i]);         while((S.ch[i]!=' ')&&i<=MAXSIZE-1){              i++;             scanf("%c",&S.ch[i]); }         S.length=i;        return 1; }  Status StrLength(HString &S){    return S.length; }  Status SubString(HString &Sub,HString S,int pos,int len){     if(pos<1||pos>S.length||len>S.length-pos+1||len<0)  return 0;     if(Sub.ch){ free(Sub.ch); Sub.length=0; }       if(len==0){ Sub.ch=NULL; Sub.length =0; }     else{      Sub.ch=(char *)malloc(len *sizeof(char));      for(int i=0;i<=len-1;i++){         Sub.ch[i]=S.ch[pos-1];         pos++;         if(pos<=S.length);}         Sub.length=len;   }  return 1; }  Status IndexStr(HString S,HString T,int pos){    int i,j;    if(pos>=1&&pos<=S.length-1){         i=pos-1;         j=0;         while(i<=S.length-1&&j<=T.length-1){              if(S.ch[i]==T.ch[j])                    {++i;                ++j;}              else                      {i=i-j+1;                  j=0;}                                  }        if(j>T.length-1){         pos=i-T.length;            return pos;           }        else{           return 0;           }       }    else      return 0; }  Status Concat(HString &S,HString T){     for(int i=0;i<=T.length-1;i++){     S.ch[S.length]=T.ch[i];     S.length++;     }    // free(T.ch);           return 1; }     Status Search(HString S,HString Sub,int i){  } void output(HString &S){  printf("输出字符串:");  for(int i=0;i<=S.length-1;i++)     //if(S.ch[i]!='\n')         printf("%c,\n",S.ch[i]); }  main(){  HString S,Sub,T;  int pos,len,i;       printf("创建字符串(以空格结束):");     CreatString(S);     output(S);     printf("\n输出字符串的长度:%d\n",StrLength(S));               printf("求字符串的子串:\n");     printf("输入起始位置:");     scanf("%d",&pos);     printf("输入读取字符长度:");     scanf("%d",&len);     SubString(Sub,S,pos,len);     output(Sub);     printf("\n输出子串长度:%d\n",StrLength(Sub));           printf("字符串的索引\n");        printf("创建索引字符串(以空格结束):");     CreatString(T);     output(T);       //为什么第一行总是逗号，而不是我输入的数据     printf("\n输出索引字符串长度:%d\n",StrLength(T)) ;     // 为什么长度加了1         //索引为什么不能索引出他的位置     printf("输入开始的索引位置:");     scanf("%d",&i);     IndexStr(S,T,i);     printf("输出索引位置:%d\n",i);       printf("连接字符串:\n");     Concat(S,T);      output(S);     printf("\n输出连接后字符串的长度:%d\n",S.length);      }   替你整一下~~

user: user-3
content: 真心看着有点乱。。。

user: user-4
content: 恩   这样好看一些
user-0 提问: 指数和底数都是double类型的幂指运算

回复:
user: user-1
content: http://www.baidu.com/s?wd=gmp%E5%BA%93&rsp=0&f=1&oq=gmp&tn=SE_hldp00532_4b7gdjvj&ie=utf-8&usm=2&rsv_idx=1&rsv_pq=abb21a83000016d0&rsv_t=bf79cykiYOwAeSLc1dmUzZ0sogAscgP4tci%2BHlcQqv%2Fj1yh8cGmXxroq2fPXyYF%2FuLTdS201L%2F0goBl6&rsv_ers=xn0&rs_src=0&rsv_bp=1

user: user-2
content: 首先你要搞清楚，是double的精度不够，还是pow的精度不够 double：2^52 = 4503599627370496，一共16位，double的精度为15~16位。 你要求小数点后18位，double本身的精度都不够，算法你再改也没用

user: user-0
content: 我的精度是小数点后18位

user: user-3
content: 扩展精度浮点可以达到小数点后19位。

user: user-0
content: 我编译configure时出现cannot determine how to define 32-bite word 我的系统是64位的

user: user-0
content: 我没用过gmp，我是win8能不能说说安装过程啊，我装了msys但是make时出错

user: user-4
content: 楼主要多大的精度呢？？  引用 2 楼 zhao4zhong1 的回复:使用GMP库。 不明觉厉！！

user: user-3
content: exp(Exponent * ln(Base))这样精度不够？那只能用汇编做扩展精度运算，结果必然可以保证双精度。

user: user-1
content: 使用GMP库。

user: user-5
content: 用一个字节来存一位数，比如50字节就可以达到50位精度，用2步来计算power， 先求出ln，然后再做e的冪，把ln和e的算法都用泰勒级数，考虑泰勒展开每一项比较方便迭代。
user-0 提问: c语言初学者，编写了一个扫雷程序，但是代码有错误，怎么改正

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

user: user-2
content: 看不懂  复制 粘贴也不会？
user-0 提问: 用贪心法求连续子集和的最大值

回复:
user: user-0
content: 引用 3 楼 ri_aje 的回复:试试这个   int maxSubArray (int const* const A, size_t const n)  {   int max = std::numeric_limits<int>::lowest();    int sum = 0;   for (size_t i = 0, I = n; i != I; ++i)   {    sum += A[i];    max = std::max(max,sum);    if (sum < 0) { sum = 0; }   }    return max;  }  #include <stdio.h> #include <stdlib.h>  void sort_change(int begin_time[],int end_time[],int n) {     int i,j;     int temp1,temp2;     for(i=0;i<n-1;i++)     {         for(j=i+1;j<n;j++)         {             if(end_time[i]>end_time[j])             {                 temp1=end_time[j];                 end_time[j]=end_time[i];                 end_time[i]=temp1;                 temp2=begin_time[j];                 begin_time[j]=begin_time[i];                 begin_time[i]=temp2;             }         }     } }  int Fuc(int begin_time[],int end_time[],int n) {    int idx=1;    int i=0,j;    for(j=1;j<n;j++){         if(end_time[i]<begin_time[j]){                 idx++;                 i=j;         }    }     return idx; }  int main(void) {     int n,i;     int Mycount;     int begin_time[10001]={0},end_time[10001]={0};     while(scanf("%d",&n)!=EOF)     {         for(i=0;i<n;i++){             scanf("%d%d",&begin_time[i],&end_time[i]);         }         sort_change(begin_time,end_time,n);         Mycount=Fuc(begin_time,end_time,n);         printf("%d\n",Mycount);     }     return 0; }  Problem H: work Description 有n项工作，每项工作分别在Si时间开始，在Ti时间结束。对于每项工作，你都可以选择参加与否。如果选择了参加，那么自始至终都必须全程参与。此外，参与工作的时间段不能重叠（即使是开始的瞬间和结束的瞬间的重叠也不允许）。 你的目的是参与尽可能多的工作，那么最多能参与多少项工作呢？ Input 输入有多组，每组先输入一个n，代表有多少项任务。接下来n行每行输入两个整数，代表第i项任务的起始时间和终止时间。  Output 输出最多能参与的工作数。  Sample Input 5 1 3 2 5 4 7 6 9 8 10 3 1 10 3 5 6 9 Sample Output 3 2 看看哪里错了？？

user: user-1
content: 试试这个   int maxSubArray (int const* const A, size_t const n)  {   int max = std::numeric_limits<int>::lowest();    int sum = 0;   for (size_t i = 0, I = n; i != I; ++i)   {    sum += A[i];    max = std::max(max,sum);    if (sum < 0) { sum = 0; }   }    return max;  }

user: user-0
content: 我好像写错了，是2.3.4.-3.7的和吧

user: user-2
user-0 提问: 急求问题，关于win32汇编程序的error A2008的错误

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:add 不能作为 proc名，重新取一个  万分感谢，问题解决了。 貌似我该从头学学汇编了。

user: user-1
content: add 不能作为 proc名，重新取一个
user-0 提问: epoll和timerfd_xxx相关问题

回复:
user: user-0
content: 多谢……解决了！！

user: user-1
content: 什么叫可读？就是fd里面有数据，还没有被读出来。epoll是监控fd是否可读的，也就监控fd是否有数据还没被读出来。你的程序没有read，那么这个fd的数据就肯定会一直保留在那里。然后epoll就一直监控到这个fd可读
user-0 提问: 【残心】有关acm的一个并查集算法的问题

回复:
user: user-0
content: 引用 2 楼 u012061345 的回复:并查集，为什么不把并也写成一个函数不会昂，初接触~

user: user-0
content: 引用 1 楼 user-2 的回复:int father[100001]; 这么大。确定不会栈溢出》？杭电上的定义一般不超过20w是不会溢出的

user: user-1
content: 并查集，为什么不把并也写成一个函数

user: user-2
content: int father[100001]; 这么大。确定不会栈溢出》？
user-0 提问: 鼠标事件！！

回复:
user: user-0
content: 为什么我的怎么点都没反应。。。

user: user-1
content: 我这里都有反应啊，。左键A右键B。 vs2013

user: user-2
content: 调试一下不就行了

user: user-0
content: 程序在上面。。。不用点链接了

user: user-0
content: #include <stdio.h> #include <windows.h> #include <conio.h>  HANDLE handle_in; HANDLE handle_out; CONSOLE_SCREEN_BUFFER_INFO csbi;        //定义窗口缓冲区信息结构体  void DisplayMousePosition(COORD pos);   //显示鼠标所在位置  void gotoxy(int x, int y);  //将光标移到坐标为(x,y)的位置  int main() {     handle_in = GetStdHandle(STD_INPUT_HANDLE);      //获得标准输入设备句柄     handle_out = GetStdHandle(STD_OUTPUT_HANDLE);    //获得标准输出设备句柄     INPUT_RECORD mouserec;      //定义输入事件结构体     DWORD res;      //用于存储读取记录     COORD pos;      //用于存储鼠标当前位置     COORD size = {80, 25};  //窗口缓冲区大小     GetConsoleScreenBufferInfo(handle_out, &csbi);  //获得窗口缓冲区信息     SetConsoleScreenBufferSize(handle_out, size);   //设置窗口缓冲区大小     for (;;)     {         ReadConsoleInput(handle_in, &mouserec, 1, &res);      //读取输入事件         pos = mouserec.Event.MouseEvent.dwMousePosition;    //获得当前鼠标位置         gotoxy(0, 24);  //在第25行显示鼠标位置         DisplayMousePosition(pos);      //显示鼠标位置         if (mouserec.EventType == MOUSE_EVENT)    //如果当前为鼠标事件         {             gotoxy(pos.X, pos.Y);             //单击鼠标左键，输出字符A             if (mouserec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)             {                 putchar('A');             }             //单击鼠标右键，输出字符B             if (mouserec.Event.MouseEvent.dwButtonState == RIGHTMOST_BUTTON_PRESSED)             {                 putchar('B');             }             //双击退出             if (mouserec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)             {                 break;             }         }     }     CloseHandle(handle_out);     CloseHandle(handle_in);     return 0; }  void DisplayMousePosition(COORD pos) {     COORD dis = {0, 24};        //在第24行显示鼠标位置     WORD att = FOREGROUND_GREEN | FOREGROUND_INTENSITY; //文本属性     GetConsoleScreenBufferInfo(handle_out, &csbi);  //获得窗口缓冲区信息     printf("X = %3d, Y = %3d", (int)pos.X, (int)pos.Y);     FillConsoleOutputAttribute(handle_out, att, 16, dis, NULL);  //填充文本属性     return; }  void gotoxy(int x, int y) { 	COORD pos = {x, y}; 	SetConsoleCursorPosition(handle_out, pos); }
user-0 提问: 对于一个配置文件的同步问题

回复:
user: user-1
content: 要是你实在觉得用磁盘上的文件IO效率可能（只是可能而不是一定）低了些，将文件放在RamDisk上。

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

user: user-1
content: 本ID使用的方法都“土但是简单高效”！

user: user-0
content: 引用 2 楼 turingo 的回复:本质上总是要分时读写的，如果觉得IO操作效率低的话，那么可以利用内存进行一定程度的缓冲。   IO操作确实效率低， 利用内存进行缓冲？  具体是什么样的原理，劳烦大概说一下。

user: user-0
content: 引用 4 楼 sinservice 的回复:--------读写锁  一个单纯的读操作进程， 一个单纯的写操作进程，如果这个资源不是文件，而是一个全局的变量，或者是一个全局的链表呢？  目前我做的全局链表是没有加互斥的。

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt  文件作为全局变量， 哈哈  虽然方法土但是简单高效。  我在写的进程里对原文件a.ini 更新后cp一份a_tmp.ini。 然后读的进程里对a_tmp.ini就好了。 这样我觉得冲突的可能性也大大降低了，毕竟拷贝的用时比完整的写文件要快很多。

user: user-2
content: --------读写锁

user: user-3
content: 需要加锁的。

user: user-1
content: A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt

user: user-4
content: 本质上总是要分时读写的，如果觉得IO操作效率低的话，那么可以利用内存进行一定程度的缓冲。

user: user-5
content: 设置一个全局的互斥量  HANDLE CreateMutex(     LPSECURITY_ATTRIBUTES lpMutexAttributes,	// pointer to security attributes      BOOL bInitialOwner,	// flag for initial ownership      LPCTSTR lpName 	// pointer to mutex-object name      );  两个进程使用相同的lpName即可
user-0 提问: 调试框一片空白怎么回事？

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

user: user-0
content: 程序没有问题，就是这个框里啥也没有咋回事
user-0 提问: 新手，关于插入排序和选择排序搞不清思路，不大懂，求讲解

回复:
user: user-1
content: 引用 2 楼 xionggch 的回复:不是跟你说了，不准在技术区发表情和灌水了吗，再发现就锁定账号了

user: user-2
content: 按照书上所讲的，一步步的在纸上画，自然就明白了，动手很重要。
user-0 提问: C语言问题，大神来帮帮忙。

回复:
user: user-1
content: 在数组定义不够大的时候用scanf("%s",ch);和gets(ch);字符串输入都比较容易越界;用第一种比较合适 屏幕闪下，可以参考2楼的

user: user-2
content: #include<stdio.h> #include<stdlib.h>  int main(void) { 	char ch[6]; 	int a = 0, i = 0;  	int num = 0; 	printf("请输入：\n");  /*	for(i=0; i<5; i++) 	{ 		scanf("%c",&ch[i]); 	}*/ //	scanf("%s", ch);  	//gets(ch); 	for ( i=0; i<5; i++) 		if ((ch[i]=getchar()) == 'a') 			num++; 	printf("%d\n请输入 0 以结束程序：\n", num); 	while(getchar()!='0'); }

user: user-0
content: 引用 5 楼 user-3 的回复:[quote=引用 3 楼 tenmenglin 的回复:] [quote=引用 1 楼 user-3 的回复:] Run-Time Check Failure #2 - Stack around the variable 'ch' was corrupted.。。。提示你数组越界了，因为你char ch[5];只有5个字符的空间，当你不用for循环输入时，就一句scanf("%s",ch);你键入aaaaa。程序会自动在后面在个字符串结束符‘/0’。所有有6个字符，你改成char ch[6]试试 我有另一种理解 就是当回车时也是一个字符 这个理解对不对？[/quote]  对的。因为回车也有自己的字符，只不过你输入回车，它就认为你输入完成，在你的字符串后面添加字符串结束符[/quote]  还有 那个gets（）为什么不出问题 但我如果 把后免得getchar（） 删了 就会出现上面的错误

user: user-3
content: 引用 3 楼 tenmenglin 的回复:[quote=引用 1 楼 user-3 的回复:] Run-Time Check Failure #2 - Stack around the variable 'ch' was corrupted.。。。提示你数组越界了，因为你char ch[5];只有5个字符的空间，当你不用for循环输入时，就一句scanf("%s",ch);你键入aaaaa。程序会自动在后面在个字符串结束符‘/0’。所有有6个字符，你改成char ch[6]试试 我有另一种理解 就是当回车时也是一个字符 这个理解对不对？[/quote]  对的。因为回车也有自己的字符，只不过你输入回车，它就认为你输入完成，在你的字符串后面添加字符串结束符

user: user-0
content: 引用 2 楼 robinbz 的回复:推荐你用stdlib.h里面的system("pause")来实现暂停窗口 暂停了 O(∩_∩)O谢谢。

user: user-0
content: 引用 1 楼 user-3 的回复:Run-Time Check Failure #2 - Stack around the variable 'ch' was corrupted.。。。提示你数组越界了，因为你char ch[5];只有5个字符的空间，当你不用for循环输入时，就一句scanf("%s",ch);你键入aaaaa。程序会自动在后面在个字符串结束符‘/0’。所有有6个字符，你改成char ch[6]试试 我有另一种理解 就是当回车时也是一个字符 这个理解对不对？

user: user-2
content: 推荐你用stdlib.h里面的system("pause")来实现暂停窗口

user: user-3
content: Run-Time Check Failure #2 - Stack around the variable 'ch' was corrupted.。。。提示你数组越界了，因为你char ch[5];只有5个字符的空间，当你不用for循环输入时，就一句scanf("%s",ch);你键入aaaaa。程序会自动在后面在个字符串结束符‘/0’。所有有6个字符，你改成char ch[6]试试
user-0 提问: 数据结构C语言

回复:
user: user-1
content: 下标从哪里开始，取决于算法，而不是取决于实现算法的语言，实现的时候做一次下标的平移即可，不影响本质。

user: user-2
content: 不用纠结数组下标起点的问题。。。你现在考虑的应该是算法问题，下标的起点，不同的编程语言中，有不同的约定，有的甚至可以由程序员自定义下标的第一个数字，0,1，都可以。。。  B［1，n(n-1)/2］  数据结构中，用来描述的代码，基本都是伪代码。。。没人说这是C代码。。。
user-0 提问: 求大神帮忙 看下 代码- -    一个银行开户的函数。          

回复:
user: user-1
content: struct role *kaihu(struct role *head) { 	struct role *q; 	//申请内存 	q = (struct role*)malloc(sizeof(struct role)); 	 	//赋值 	int i; 	printf("请输入你的姓名："); 	scanf("%s",q->name); 	printf("\n"); 	printf("请输入你的身份证号码："); 	scanf("%s",q->id); 	printf("\n"); 	printf("请输入你的手机号码(11位)："); 	scanf("%s",q->telephone); 	printf("\n"); 	printf("清输入你的家庭地址："); 	scanf("%s",q->dizhi); 	printf("\n"); 	printf("设置密码(6位数):"); 	for(i=1;i<=6;i++) 	{  		q->mima[i]=getch(); 		printf("*"); 	} 	getch(); 	putchar(10);  	//插入链表 	q->next = head->next; 	head->next = q;  	printf("恭喜你注册成功"); 	printf("按任意键退出！"); 	getch(); 	return head;//返回一个新链表头 }

user: user-1
content: 开户即增加一个节点， 那么只需要传head进去，然后在函数里面新建个节点，申请内存，赋值，最后插入到链表（头和尾两种）。然后返回head即可

user: user-2
content: 你的程序没放完。。。全放上来看看吧

user: user-3
content: 在你的函数struct role *kaihustruct role *q,struct role *head)并没有把q加入到链表中。另外，你的程序没有全看，现在不能确认你的q是否是正确的。struct role你是否也应该贴一下。
user-0 提问: compare跟strcmp

回复:
user: user-1
content: 我猜：   int CString::Compare(char* pszStr) { 	return strcmp(m_pszStr,pszStr); }

user: user-2
content: 面向对象和面向过程

user: user-3
content: 2楼说的很详细了，compare是string类库中的方法，参数是一个和当前对象比较的string对象或者其他重载类型，通常直接使用== 会更方便。strcmp是系统api，比较低级的字符串比较函数，在VS中选中某函数，再按F1，看下MSDN的相关解释就清楚了

user: user-4
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后，就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的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: string的比较： bool operator==(const string &s1,const string &s2)const;//比较两个字符串是否相等 运算符">","<",">=","<=","!="均被重载用于字符串的比较； int compare(const string &s) const;//比较当前字符串和s的大小 int compare(int pos, int n,const string &s)const;//比较当前字符串从pos开始的n个字符组成的字符串与s的大小 int compare(int pos, int n,const string &s,int pos2,int n2)const;//比较当前字符串从pos开始的n个字符组成的字符串与s中pos2开始的n2个字符组成的字符串的大小 int compare(const char *s) const; int compare(int pos, int n,const char *s) const; int compare(int pos, int n,const char *s, int pos2) const; compare函数在>时返回1，<时返回-1，==时返回0

user: user-6
content: 查C++  的string类
user-0 提问: 求指教！下面程序中出现的warning到底是怎么回事？是否是字符串赋值出错？

回复:
user: user-1
content: 另外，建议采用switch语句  switch(R) {  case 1:strcpy(n1, "Unreadable");break; case 2: strcpy(n1,"Barely readable,occasional words distinguishable");break; .... default:break; }

user: user-1
content: 如果是C语言，要改成以下形式      char n1[1024] = "\0",n2[1024] = "\0";//数组形式     if(R=1)     {         //n1="Unreadable";         strcpy(n1, "Unreadable");     } ......  如果是C++，定义为string n1, n2; 另外，=不等价于==

user: user-2
content: 建议你应该把基本的变量类型再看看.包括C的基本语法. 最大的问题在于: 1.括号里的等号,进行判断应该是"==",你这样的写法每一次进去都会给R和S进行等于1的赋值,这是导致你现在看到结果为都是1的对应结果的原因. 2.关于你的变量声明.声明为char的两个字符型变量,按照你的用法是肯定出错的.这个编译系统会直接报错,就不用说了.为啥?你能把一盆子的水全部装进一个小杯子么?其次,你就算声明成静态字符型指针,你也无法获得你预期的结果.因为这样编译器会把字符串地址给变量. 懂了?

user: user-0
content: 不对 ，刚才多测试即便发现改成 	const char *n1,*n2; 结果还是不对，虽然能够编译成功并且有正常的输出，但是无论输入什么数值，都只显示R=1，S=1时候对应的结果

user: user-0
content: 改成const char *n1,*n2;运行就对了谢谢啦 请问这是为什么呢？我刚开始自学C语言 不是很懂  但是*n1不是说n1是指针么 指针不是指向地址么？怎么还能够给指针赋值呢？ 求指教！谢谢!

user: user-3
content: const char*n1,*n2;

user: user-3
content: const char*n1,n2;

user: user-4
content: 基本的类型系统都没搞清楚 悲夫·！
user-0 提问: 求圆周率

回复:
user: user-1
content: for(i=1;j=3;i>=1) 把一个赋值当成条件？ 参考一下，小数点位后5位精确的PI # include <stdio.h> # include <math.h>  int main(void) {   	int i = 1;   	double pi = 0.0, k = 1.0, t = 1.0;   	while( fabs(t) >= 1e-6) {  	   	pi += t;     	k =- k;     	i += 2;     	t = k / i;   	}   	pi *= 4;   	printf("pi=%f\n", pi);   	   	return 0; }

user: user-2
content: 这是什么算法， j每次赋值3， c只要大于0， 第一次就跳出来了，否则就没机会跳出来了

user: user-3
content: return 0;//最后添加
user-0 提问: 为什么老是wa是输入输出不对吗？还是哪里错了，自己测试没错呀

回复:
user: user-1
content: 引用 2 楼 whm546877424 的回复:[quote=引用 1 楼 user-1007 的回复:] #include <stdio.h> #include <stdlib.h> #include <math.h>  int main(void) {     int n,num,i,j,t; 	int temp;     scanf("%d",&n);     while(n--){ 		int s[10001]={0};             int la=0;             j=0;             scanf("%d",&num);             for(i=2;i<num;i++){                 if(i==2||i==3){ 					s[j]=i;j++; 				}                 else{ 					temp=(int)sqrt(i); 					for(t=2;t<=temp;t++) 					{ 						if(i%t==0) 							break; 					} 					 					if(t>temp) 					{ 						s[j]=i; 						j++; 					}                 }             } 			             for(i=0;i<=j&&s[i]<=num/2;i++)//这里加个限制，让s[i]<=num/2             {                 for(t=0;t<=j;t++)                 {                     if((s[i]+s[t])==num)                     {                         la++;                     }                 }             }             printf("%d\n",la);     }     return 0; }  那我写的那个，第45行用la=la/2限制不一样么？[/quote]  肯定是有数据不对的，自己想下、

user: user-0
content: 引用 1 楼 user-1007 的回复:#include <stdio.h> #include <stdlib.h> #include <math.h>  int main(void) {     int n,num,i,j,t; 	int temp;     scanf("%d",&n);     while(n--){ 		int s[10001]={0};             int la=0;             j=0;             scanf("%d",&num);             for(i=2;i<num;i++){                 if(i==2||i==3){ 					s[j]=i;j++; 				}                 else{ 					temp=(int)sqrt(i); 					for(t=2;t<=temp;t++) 					{ 						if(i%t==0) 							break; 					} 					 					if(t>temp) 					{ 						s[j]=i; 						j++; 					}                 }             } 			             for(i=0;i<=j&&s[i]<=num/2;i++)//这里加个限制，让s[i]<=num/2             {                 for(t=0;t<=j;t++)                 {                     if((s[i]+s[t])==num)                     {                         la++;                     }                 }             }             printf("%d\n",la);     }     return 0; }  那我写的那个，第45行用la=la/2限制不一样么？

user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <math.h>  int main(void) {     int n,num,i,j,t; 	int temp;     scanf("%d",&n);     while(n--){ 		int s[10001]={0};             int la=0;             j=0;             scanf("%d",&num);             for(i=2;i<num;i++){                 if(i==2||i==3){ 					s[j]=i;j++; 				}                 else{ 					temp=(int)sqrt(i); 					for(t=2;t<=temp;t++) 					{ 						if(i%t==0) 							break; 					} 					 					if(t>temp) 					{ 						s[j]=i; 						j++; 					}                 }             } 			             for(i=0;i<=j&&s[i]<=num/2;i++)//这里加个限制，让s[i]<=num/2             {                 for(t=0;t<=j;t++)                 {                     if((s[i]+s[t])==num)                     {                         la++;                     }                 }             }             printf("%d\n",la);     }     return 0; }
user-0 提问: 求助大神，告诉我哪里错了，还有帮我纠正下，告诉我原因以及步骤。。。。。。

回复:
user: user-1
content: For reference only #include<stdio.h> #define NUM 5 int main() {     int a[NUM],t,i,j,n,flag = 1;     char s;      printf("输入5个整数:");     for(i = 0; i < NUM; ++i)     {         scanf("%d",&a[i]);     }      for(i = 0; i < NUM - 1; ++i)         for(j = j + i; j < NUM; ++j)         {             if(a[i] < a[j])             {                 t = a[i];                 a[i] = a[j];                 a[j] = t;             }         }       printf("从大到小排序后为:");     for(i = 0; i < NUM; ++i)     {         printf("%d ",a[i]);     }     printf("\n");      while(flag)     {         printf("请输入一个整数:");         scanf("%d",&n);           for(i= 0; i < NUM; ++i)         {             if(n != a[i])                 continue;             else             {                 printf("该数是数组中的第%d个元素\n",i+1);                 break;             }         }         /*此处已经数组越界,建议修改*/         if(n != a[i])             printf("无此数\n");         printf("是否继续查找?(Y/N):");         /*建议学习关于缓冲区的概念*/         setbuf(stdin,NULL);         scanf("%c",&s);         if(s == 'N' || s == 'n')             break;     } }

user: user-2
content: #include <stdio.h> #define NUM 5 void main() { 	int	a[NUM], t, i, j, n, flag = 1; 	char	s; 	printf( "输入5个整数：" ); 	for ( i = 0; i < NUM; i++ ) 		scanf( "%d", &a[i] ); 	for ( i = 0; i < NUM - 1; i++ ) 		for ( j = i + 1; j < NUM; j++ ) 			if ( a[i] < a[j] ) 			{ 				t	= a[i]; 				a[i]	= a[j]; 				a[j]	= t; 			} 			printf( "从大到小排序后为：" ); 			for ( i = 0; i < NUM; i++ ) 				printf( "%d ", a[i] ); 			printf( "\n" ); 			 			while ( flag ) 			{ 				printf( "请输入一个整数：" ); 				scanf( "%d", &n ); 				char str[10];// 输入整数后，会有回车，这里吃掉回车 				gets(str); 				for ( i = 0; i < NUM; i++ ) 				{ 					if ( n != a[i] ) 						continue; 					else{ printf( "该数是数组中的第%d个元素\n", i ); break; } 				} 				if ( n != a[i] ) 					printf( "无此数\n" ); 				printf( "是否继续查找？(Y/N):" ); 				scanf( "%c", &s ); 				if ( s == 'N' || s == 'n' ) 					flag = 0; 			} }

user: user-3
content: 应该是缓冲区问题，楼主在scanf前加个getchar();试试
user-0 提问: 真正的C高手  明白C内部机制的来看看

回复:
user: user-1
content: 第一个问题     关键在于跳转指令   jbe 与 jle  http://zhidao.baidu.com/question/499752787.html  有介绍  #include <stdio.h>  int main(){   unsigned int a = 5;   int b = -90 ;   int c = 5;   if(a+b > 0) printf("yes\n");   if(b+c > 0) printf("yes int\n"); }   	.section	__TEXT,__text,regular,pure_instructions 	.globl	_main 	.align	4, 0x90 _main:                                  ## @main 	.cfi_startproc ## BB#0: 	pushq	%rbp Ltmp2: 	.cfi_def_cfa_offset 16 Ltmp3: 	.cfi_offset %rbp, -16 	movq	%rsp, %rbp Ltmp4: 	.cfi_def_cfa_register %rbp 	subq	$32, %rsp 	movl	$0, -4(%rbp) 	movl	$5, -8(%rbp) 	movl	$-90, -12(%rbp) 	movl	$5, -16(%rbp) 	movl	-8(%rbp), %eax 	addl	-12(%rbp), %eax 	cmpl	$0, %eax 	jbe	LBB0_2 ## BB#1: 	leaq	L_.str(%rip), %rdi 	movb	$0, %al 	callq	_printf 	movl	%eax, -20(%rbp)         ## 4-byte Spill LBB0_2: 	movl	-12(%rbp), %eax 	addl	-16(%rbp), %eax 	cmpl	$0, %eax 	jle	LBB0_4 ## BB#3: 	leaq	L_.str1(%rip), %rdi 	movb	$0, %al 	callq	_printf 	movl	%eax, -24(%rbp)         ## 4-byte Spill LBB0_4: 	movl	-4(%rbp), %eax 	addq	$32, %rsp 	popq	%rbp 	retq 	.cfi_endproc  	.section	__TEXT,__cstring,cstring_literals L_.str:                                 ## @.str 	.asciz	"yes\n"  L_.str1:                                ## @.str1 	.asciz	"yes int\n"   .subsections_via_symbols

user: user-0
content: 引用 4 楼 fly_dragon_fly 的回复:我解释一下吧 1. uint 和int 在一起，结果会转为uint，这一点没有疑问吧，那么if(a+b>0）就通过了，为什么会打印出-1，是因为你用了%d，在用%d的时候，printf会把结果转为int型，那么就显示-1。 2.这里数组的特殊规定，c和&c 是对应同一个地址即首地址，但是类型不同，c的类型是int *, &c的类型是 int(*)[5], 所以表现在+1的不同了。  这个答案 很好的解释了我的问题 十分感谢

user: user-2
content: 引用 4 楼 fly_dragon_fly 的回复:我解释一下吧 1. uint 和int 在一起，结果会转为uint，这一点没有疑问吧，那么if(a+b>0）就通过了，为什么会打印出-1，是因为你用了%d，在用%d的时候，printf会把结果转为int型，那么就显示-1。 2.这里数组的特殊规定，c和&c 是对应同一个地址即首地址，但是类型不同，c的类型是int *, &c的类型是 int(*)[5], 所以表现在+1的不同了。  正解。

user: user-3
content: 关于类型转换 除了 bool 比较独特外 一切其他整型数据类型的互相转换中， 只有填充，和截断，真的有转换动作。   同等长度 的转换，主要是有符号和无符号类型之间的转换， 一般来说，没有任何转换动作 编译器只是把一个类型的数据，看作另一个类型使用而已。  对于长度为 32Bits 的整数类型， unsigned int 类型  0xff ff ff ff--- 十六进制 和 int 类型的 -1 ---10 进制,  内部表示是相同的，即每一位都是 1，共32Bits 的 1。 这个转换，其实没有任何动作  对于 C 来说，数据是有类型的  对于 数组  int c[M] ; 它的类型是 int[M]; 这里： 数组元素 c[0]，类型是 int; 数组 c 的类型，是  int[M]；   在表达式 c中， 它的值为 &c[0];  是 int 类型的地址 ，类型是 int *, 所指对象 c[0]的类型是 int 类型  表达式 &c 是整个数组的地址，类型是 int (*)[M]; 所指对象 数组c，的数据类型 是int[M]； 长度是该地址内部数据的长度为 M* sizeof(int)  注意  不是变量 c,  而是 表达式 c;  因为c 是数组名，所以表达式解析的时候 会有这么几种解析方案 1）数组首地址 ;类型 int *，(或者 const int *) ;       c,c+1,c[0] 。。。。*c; 2）数组 c 本身，类型为 int[M];         &c;        sizeof(c) ;       这些表达式中  C语言中，并不是任何地方，都是把数组名，看作指针的。

user: user-4
content: 我解释一下吧 1. uint 和int 在一起，结果会转为uint，这一点没有疑问吧，那么if(a+b>0）就通过了，为什么会打印出-1，是因为你用了%d，在用%d的时候，printf会把结果转为int型，那么就显示-1。 2.这里数组的特殊规定，c和&c 是对应同一个地址即首地址，但是类型不同，c的类型是int *, &c的类型是 int(*)[5], 所以表现在+1的不同了。

user: user-5
content: 第二个问题   c表示数组c的首地址，存放的是1;&c表示数组的地址，但是这个也只是个首地址  c+1  = c[1]; &c + 1 =  c[sizeof(c)+1]

user: user-1
content: 关于第二个问题  等你能够看得懂汇编语言的时候 自然就明白了
user-0 提问: 给指针所指变量赋值排序时，另一个无关变量也会改变，请大家看看为什么

回复:
user: user-0
content: 谢谢 能不能说详细点，我刚学指针，没太听懂您说的

user: user-1
content: 先把越界改一下， int n 你用地址ptr++就越界了

user: user-0
content: （补充）在19行读入时，并未执行21行sum++;操作，sum仍然自增，这是为什么

user: user-0
content: 谢谢，我明白了，但是为什么sum会自增呢

user: user-1
content: ptr对应n的地址，只有ptr[0]有效，ptr[1]不属于你，后面的地址也同样不属于你， 需要分配 如    ptr =(int *)malloc(100*sizeof(*ptr));  像这样你可以加到100，多了就要重新分配了
user-0 提问: VC2008 静态编译  lib文件

回复:
user: user-1
content: 你这个是lib， 不是dll/exe怎么能够启动呢？ 只要能够正确的导入导出东西就可以了。 而且不用部署到对方机器的。 随后的程序可以连接和包含这个东西就可以了， 给我点分吧，要下个东西。

user: user-2
content: http://blog.csdn.net/bagboy_taobao_com/article/details/6417737 看这个试一下吧

user: user-2
content: 前两天  也遇到这个问题  找到了解决办法
user-0 提问: 求大神用C语言编扫雷小程序。。！

回复:
user: user-1
content: 去网上搜啊，，，

user: user-2
content: 参考 http://blog.csdn.net/mzlogin/article/details/5178517

user: user-3
content: http://blog.csdn.net/zzhcool2010/article/details/7291783 这个写的比较简单

user: user-4
content: 去网上找咯~！

user: user-5
content: 到windows的源码去找吧，那里面很多都是可以编译过的
user-0 提问: 大神帮忙看看这个代码哪里有问题了,

回复:
user: user-1
content: void mapmove() { 	int i; 	int k; 	for(i = 0;i != H;i++) 		for(int t = 0;t != W;t++) 			if(t == W - 1) 				map[i][t] = NTH; 			else  				map[i][t] = map[i][t + 1]; 	for(i = 0,k = 0;i != H;i++) 	{ 		if(i == mapp) 		{ 			map[i][W - 1] = WALL; 			if(rand() % W % 3 == 0) 				mapp--; 			if(rand() % H % 2 == 0) 				mapp++; 			if(mapp >= H || mapp < 0 || mapp - y > JUMP -1) 				mapp = H - 1; 			if(time(0) % 3 == 0) 				k++; 		} 		if(k == 2) 			break; 	} 	map[y][x - 1] = NTH; 	if(map[y][x] == NTH) 		map[y][x] = P; 	else  		over = 0; }

user: user-2
content: 可能是TC下的库文件吧，vc不支持，，额，我也是猜 的

user: user-0
content: 求别沉

user: user-0
content: 一直就提示C2143.
user-0 提问: C程序几道算法题目，求解。

回复:
user: user-1
content: 卧槽，这不是选修课的期末作业吗？ 你是谁

user: user-2
content: 卧槽，这不是选修课的期末作业吗？ 你是谁

user: user-3
content: 卧槽，这不是选修课的期末作业吗？ 你是谁

user: user-4
content: 卧槽，这不是选修课的期末作业吗？ 你是谁

user: user-5
content: 卧槽，这不是选修课的期末作业吗？ 你是谁
user-0 提问: 关于C语言金字塔程序的问题

回复:
user: user-0
content: 引用 1 楼 u012077152 的回复:#include<stdio.h> #include<ctype.h> int main() { 	int i,j,t; 	char ch; 	printf("Enter letter: "); 	scanf("%c",&ch); 	for(i=1;i<=5;i++) 	{ 		for(j=5-i;j>=1;j--) 			printf(" "); 		for(j=1;j<=(2*i-1)/2+1;j++) 			printf("%c",toupper(ch+j-1)); 		for(t=1;t<i;t++) 		{ 			if(t<i-1) 				printf("%c",toupper(ch+t)); 			else 				printf("%c",toupper(ch)); 		} 		printf("\n"); 	} 	return 0; }  引用 1 楼 u012077152 的回复:#include<stdio.h> #include<ctype.h> int main() { 	int i,j,t; 	char ch; 	printf("Enter letter: "); 	scanf("%c",&ch); 	for(i=1;i<=5;i++) 	{ 		for(j=5-i;j>=1;j--) 			printf(" "); 		for(j=1;j<=(2*i-1)/2+1;j++) 			printf("%c",toupper(ch+j-1)); 		for(t=1;t<i;t++) 		{ 			if(t<i-1) 				printf("%c",toupper(ch+t)); 			else 				printf("%c",toupper(ch)); 		} 		printf("\n"); 	} 	return 0; }  #include <stdio.h>  int main(void) {     int row, blank, letter;     char a ;     scanf("%c", &a);      for(row = 0; row < 5; row++)     {         for(blank = 0; blank < 5 - row; blank++)         {             printf("*");         }          for(letter = 0; letter <= row  ; letter++)         {             printf("%c", a++);         }         --a; ĵ        for(letter = 0; letter < row; letter++)         {             printf("%c", --a);         }         printf("\n");     }     return 0; }  下面这种方法也不错.

user: user-1
content: #include<stdio.h> #include<ctype.h> int main() { 	int i,j,t; 	char ch; 	printf("Enter letter: "); 	scanf("%c",&ch); 	for(i=1;i<=5;i++) 	{ 		for(j=5-i;j>=1;j--) 			printf(" "); 		for(j=1;j<=(2*i-1)/2+1;j++) 			printf("%c",toupper(ch+j-1)); 		for(t=1;t<i;t++) 		{ 			if(t<i-1) 				printf("%c",toupper(ch+t)); 			else 				printf("%c",toupper(ch)); 		} 		printf("\n"); 	} 	return 0; }
user-0 提问: fread读取已存在文件，尾部出现多余异常字符，求解答

回复:
user: user-1
content: c=(char *)malloc(sizeof(char)*(lSize + 1)); c[lSize] = 0; 这样就正常了。

user: user-0
content: 恩，解决了，谢谢

user: user-2
content: memset(c,0, lSize);

user: user-3
content: printf("%s",c); 应改为 printf("%.*s",lSize,c);

user: user-0
content: 可以啊，以前没见过这种输出方式，有其他简单一点的方法改正吗，为什么会出现这样的结果啊

user: user-3
content: 2楼方法比较笨。
user-0 提问: 求助大牛关于完全连通图的最小匹配的算法思想

回复:
user: user-1
content: 怎么看都是贪心算法

user: user-2
content: 完全图还是二分图。多项式算法都有，但是后者简单，前者复杂多了。

user: user-0
content: 完全图。。。贪心算法怎么个思路。。。。
user-0 提问: 关于换行问题求解。。。。。。。

回复:
user: user-1
content: 你的这个问题相当于  我如何知道3分钟后彩票的开奖结果 然后在1分钟后买一张

user: user-2
content: 上边写的有点问题，最后一组只输出一个换行，可以把输入的数据先存起来的。

user: user-2
content: #include <stdio.h> int main() { 	int a, b; 	while ( 1 ) 	{ 		scanf( "%d%d", &a, &b ); 		if ( a == 0 && b == 0 ) 			break; 		else printf( "\n" ); 		printf( "%d\n", a + b ); 	}  	return(0); }
user-0 提问: OJ上的题目Runtime error(SIGSEGV)

回复:
user: user-0
content: 引用 3 楼 FancyMouse 的回复:char a[10000]; fgets(a,100000,stdin) 到底几个0  而且题目都不给，b开的是不是够大都不知道。 谢谢你。。就是数组开小了

user: user-1
content: char a[10000]; fgets(a,100000,stdin) 到底几个0  而且题目都不给，b开的是不是够大都不知道。

user: user-0
content: 引用 1 楼 user-2007 的回复:SIGSEGV是出现内存错误所报的信号，说明内存操作有问题，最常见的是数组溢出，使用未分配内存等等。 我这个也有数组越界的问题么。。没发现啊。

user: user-2
content: SIGSEGV是出现内存错误所报的信号，说明内存操作有问题，最常见的是数组溢出，使用未分配内存等等。
user-0 提问: 哪位大神会做，帮忙设计一个程序，万分感谢！

回复:
user: user-1
content: 关系主要在SQL中实现

user: user-0
content: 排序功能，包括按照职工号排序和按照姓名字母序排序和查询功能，包括按人名查询工资和显示某一工资范围的记录 为什么运行的时候总报错

user: user-2
content: C语言也很简单啊，  做一个结构体存储一个员工的所有信息， 把这个结构存在文件里， 实现删改查的时候就把信息读出来存在 数组或者链表中，对它进行遍历，做你想要做的操作， 增加的话直接追加写在文件末尾。      存储文件的时候存储按结构体来存， 取的时候也按结构体来取。     总共加起来不超过1000行代码，自己多想想，一点一点就写出来了。

user: user-3
content: 楼主，这是您的练习题目吗？

user: user-4
content: [color=#800000][/color]http://pan.baidu.com/s/17yIcQ

user: user-0
content: 不会没关系，总有厉害的大神会的！

user: user-0
content: 用C语言做

user: user-5
content: 学一下如何操作数据库不就好了。比如c#, c++,这个网上应该有很多啊。  配置好环境，连接数据库，增删改查。 如果嫌sqlserver , mysql太大，可以用sqlite这种微型的数据库。  在做个界面，要是没多大要求的，就直接在控制台上显示。

user: user-6
content: 用数据库  so easy

user: user-7
content: 少年，努力吧

user: user-8
content: 刚开始学的时候不都练习这种 自己多动手，还是很容易的

user: user-9
content: 40分太少了啊。。。。。
user-0 提问: ACM中Runtime Error问题！！

回复:
user: user-1
content: 网上找得到，c语言刷新缓冲区

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

user: user-0
content: 引用 3 楼 FightForProgrammer 的回复:引用 2 楼 whm546877424 的回复:[quote=引用 1 楼 FightForProgrammer 的回复:] 你这样的自己调试啊。肯定是越界的问题。我不会调试。。怎么做来着？  你可以先去学习一下如何调试，再来解决就好了。去网上找c++调试技术吧。 调试比写代码更重要[/quote] 多谢！我知道了，是getchar（）的问题，把gtes(str),改成scanf(" %s",str),就好啦，但是如果我想用gets（）要怎么去掉缓冲区的'\n’，又不影响结果呢？ while(scanf("%d",&len)!=EOF)     {         len1=0;         while(len1<len){         int num[1001]={0};         n=0;         scanf(" %s",str);         for(i=0;i<strlen(str);i++)

user: user-1
content: 引用 2 楼 whm546877424 的回复:引用 1 楼 FightForProgrammer 的回复:你这样的自己调试啊。肯定是越界的问题。我不会调试。。怎么做来着？  你可以先去学习一下如何调试，再来解决就好了。去网上找c++调试技术吧。 调试比写代码更重要

user: user-0
content: 引用 1 楼 FightForProgrammer 的回复:你这样的自己调试啊。肯定是越界的问题。我不会调试。。怎么做来着？

user: user-1
content: 你这样的自己调试啊。肯定是越界的问题
user-0 提问: C语言求助!!!帮忙看看代码哪里错了，该如何修改！

回复:
user: user-1
content: for( i=0; i<le; i++) 	{ 		if(data[i][1] == a[i]) 		{ 			flag=1; 			count++; 		} 		else 		{ 			flag=0; 			break; 		} 	} 这一段出现了逻辑问题，a[]的下标应该每次都从0 开始，而不是从i开始！然后equal函数应该返回的不是1或者0 ，而是data中从第一个开始和a[0]相等的元素位置，比如说k，然后你只要在data中删除从k到length(a)+k-1的元素即可。当然可能这样的子串有多个，因此你应该返回的是一个指针数组，该数组中包含了每一个和a相等的子串的位置。 还有一个问题：你的代码使用纯C写的，但是编译的时候必须使用C++ 的编译器(因为你的部分语法是C++才有的特性)，所以你最好改一改。

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

user: user-0
content: 我少贴了一个定义： #define N 100
user-0 提问: 关于数组的问题

回复:
user: user-1
content: 看书需要仔细哦

user: user-2
content: 对，如果是指针，也直接是地址，如果再用&获取地址，就不是原来你想要的地址了

user: user-0
content: 引用 1 楼 hnwyllmm 的回复:&stu[i].name 像这个，stu.name本来就是地址了，再取地址，没必要了 就是说数组就已经是地址了是吗？

user: user-2
content: &stu[i].name 像这个，stu.name本来就是地址了，再取地址，没必要了
user-0 提问: 字符串提取子串的问题

回复:
user: user-0
content: 引用 8 楼 zgangz 的回复:如果子符串是 //rtsp://192.168.1.252:554/user=admin&password=&channel=1&stream=0.sdp?real_stream--rtp-caching=100 1.如果有正则表达式的库，运用正则去匹配 2.如果没有 sscanf(strRTSP, "//%*[^:]://%[^:]:%d/%s", strIp, &intPort, strOther); 取到strIp后，再写函数去判断其存储的ip格式是否正确  嗯对的。

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。

user: user-1
content: 下个pcre库，用正则去匹配吧

user: user-2
content: sscanf

user: user-3
content: strstr,, strpbrk

user: user-4
content: 如果子符串是 //rtsp://192.168.1.252:554/user=admin&password=&channel=1&stream=0.sdp?real_stream--rtp-caching=100 1.如果有正则表达式的库，运用正则去匹配 2.如果没有 sscanf(strRTSP, "//%*[^:]://%[^:]:%d/%s", strIp, &intPort, strOther); 取到strIp后，再写函数去判断其存储的ip格式是否正确

user: user-2
content: 作为一个C程序员，对  scanf,sscanf,fscanf  printf,sprintf,fprintf 这类函数的用法，还是要做到“拳不离手，曲不离口”的。

user: user-2
content: To read strings not delimited by space characters, a set of characters in brackets ([ ]) can be substituted for the s (string) type character. The corresponding input field is read up to the first character that does not appear in the bracketed character set. If the first character in the set is a caret (^), the effect is reversed: The input field is read up to the first character that does appear in the rest of the character set.  Note that %[a-z] and %[z-a] are interpreted as equivalent to %[abcde...z]. This is a common scanf function extension, but note that the ANSI standard does not require it.

user: user-2
content: 仅供参考#include <stdio.h> int main() {     int IP[4];     int i;     char c;      printf("请输入一个ip地址:");fflush(stdout);     while (1) {         rewind(stdin);         if (5==scanf("%d.%d.%d.%d%c",&IP[0],&IP[1],&IP[2],&IP[3],&c)) {             if (0<=IP[0] && IP[0]<=255              && 0<=IP[1] && IP[1]<=255              && 0<=IP[2] && IP[2]<=255              && 0<=IP[3] && IP[3]<=255              && '\n'==c) {                 break;             } else printf("输入的ip地址格式不对!\n请重新输入:\n");         } else printf("输入的ip地址格式不对!\n请重新输入:\n");     }     for (i=0;i<4;i++) {         printf("IP[%d]=%d\n",i,IP[i]);     }     return 0; }

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:sscanf  	int val = sscanf_s(strRTSP,"%[^:]",strIpBuf);//暂时还没懂这个 	if (val == -1) 	{ 		return; 	}  在上面的那个字符串内我提取出来了，这个IPbuf  “192.168.1.252” 但是如果是错误格式，我根本检测不到呢，怎么做呢？

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:sscanf  谢谢，好用。虽然实现了。但是参数没大明白。再看看。。
user-0 提问: 关于shell中{}通配符的问题

回复:
user: user-0
content: 7楼的代码也执行成功了。 问题：为什么在脚本中不能用通配符？而各位的方法貌似是开一个新进程开解决问题的，为什么会这样？   测试了下，貌似一般的shell命令是可以的，cd 命令不行，是因为子进程不会将结果返回给父进程。

user: user-1
content: filename似乎重定义了。 可以用eval的  #!/bin/bash filename="hell{o,o01,11}.c" eval echo $filename for f in `eval echo $filename` do     if [ -w $f ]     then         echo "$f: writable"     else         echo "$f: not writable"     fi done exit 0

user: user-2
content: 搜“Learning.the.bash.Shell.3rd.Edition.chm”

user: user-3
content: 引用 5 楼 shenwansan_gz 的回复:改了，结果正确  [root@localhost 1210]# ./test_file  hello.c file write hello01.c file write hell11.c aaaa   可以解释下，为什么以前的那个代码不行吗？  英文文档还没看完。。。。。。。 因为echo hello{....}时,  hello{...}是echo 的命令行参数， shell会执行{} 后传给 echo 而脚本中hello{...}不会替换。  脚本中`echo hello{...}`是创建子进程/子shell, 子shell会替换命令行参数

user: user-0
content: 改了，结果正确  [root@localhost 1210]# ./test_file  hello.c file write hello01.c file write hell11.c aaaa   可以解释下，为什么以前的那个代码不行吗？  英文文档还没看完。。。。。。。

user: user-4
content: #!/bin/bash filename=hell{o,o01,11}.c 改成 #!/bin/bash filename=`echo hell{o,o01,11}.c`

user: user-2
content: 4.2. Shell Variables 5.2. for 7.2. String I/O  也许此路不通，请绕行其它道路。

user: user-0
content: 文档下来了，不过搜了下，内容很多，请问具体是那一段解释？ @赵4老师
user-0 提问: 函数问题，求解答

回复:
user: user-1
content: 编译的时候没有加相应的.c文件

user: user-2
content: 要包含function所在的头文件。

user: user-3
content: HeadFile.h其他include"HeadFile.h"

user: user-4
content: 声明放在.h  然后include 到 要调用的c

user: user-5
content: 头文件问题，或者函数名写错了

user: user-6
content: HeaderFile.h Fun A 申明 Fun B 申明 Fun C申明 Fun D 申明  HeaderFile.c  #include "HeaderFile.h"  Fun A 实现 Fun B 实现 Fun C实现 Fun D 实现  main.c #include "HeaderFile.h"  调用A,B,C

user: user-7
content: 看下包含的顺序，在调用一个函数前必需知道函数是咋样，即声明。  // 声明 void func();  int main() {     // 调用     func();      return 0; } // 定义 void func() {  }

user: user-8
content: 在headline.h中声明函数，在headline.c中定义函数（包含headline.h)，在main函数中调用函数（包含headline.h)
user-0 提问: c 和指针

回复:
user: user-1
content: (int) 1.99445 结果是 1 损失精度 就是丢弃 0.99445 的意思  毫无疑问 只能是 x+y 然后 x+y 的结果 +1  这是由结合性决定的

user: user-2
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→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对应的汇编并单步执行观察相应内存和寄存器变化。）  http://bbs.csdn.net/topics/390676437

user: user-3
content: 1. 跟float表示方法有关， float内部表示小数是 这样 （1.xxxxx...) b ,  其中x有23位，如果这个数为2^24+1,显然这个1就没地方放，丢失了这个精度，也就是说如果int展开后如果超过24位，后8位不为0则会丢失精度。 2. x+y 就溢出 ， y+1后再加x才溢出，

user: user-4
content: 下面的代码可能更能说明问题： #include <stdio.h> #include <stdlib.h>  int main() { 	printf("sizeof(int)=%d,sizeof(float)=%d\n",sizeof(int),sizeof(float)); 	for (int a = 2147483455,i=1;i <= 129;i++) 	{ 		a = a+1; 		float b = (float)(a); 		printf("a = %d,b = %f\n",a,b); 	} 	return 1; } 你可以看看结果，int最大到2147483647，而float是单精度，只能保证小数点后7到8位有效，因此在int很大的时候，就会出现超过float能表示的精度从而出现损失，也就是丢位，计算机中都是二进制，浮点数也不例外，可以看到我举得例子是128个值对应float都不变，之后是64个值对应的都不变，因此存在转换损失在所难免。
user-0 提问: 为什么我的打印结果是-2，谁能解释吗？

回复:
user: user-1
content: 要得到确定的结果，位域的类型用unsigned int, 而不是int

user: user-2
content: 一般情况下 x.a=1.转成二进制就是                 00000000，00000000，00000000， 00000001 x.a+=1;则x.a=2.转成二进制就是00000000，00000000 ，00000000，00000010  然后int a:2;.表示只取两位数，所以x.a=10(二进制数，要注意)，此时一定要注意最高位表示正负 但是计算机中int数据是以补码数据存在的，正数的补码和原码相同，负数的补码是对其原码逐位取反，但符号位除外；然后整个数加1。补码表示方法中，最小值的表示方法是最高位是1，其余全为0。 最简单的理解方法int a=65535.  a+=1;刚a=-65536;上面的那个人说得也是对的a:2，取两位，最高位表示正负号，所以范围是-2，-1，0，1

user: user-3
content: 2位中的最高位是符号位，知道这点就懂了

user: user-4
content: int a:2表明a只占两位，所以a只能表示-2，-1,0,1，你的x.a开始是1，再加1就等于-2了

user: user-5
content: 2位，数的范围：-2 -1 0 1
user-0 提问: 菜鸟问题，关于for循环

回复:
user: user-1
content: 最好别用for语句，，在这里

user: user-2
content: for (A;B;C) D; //等价于 {  A;  while (1) {   if (!(B)) break;   D;   C;  } }

user: user-3
content: 首先搞清楚for循环执行步骤，先执行a=1，再判断b<=75,条件成立执行循环体 printf("%d\n",b);（输出55），最后执行b=(++a*5)+50，完成一次循环。

user: user-4
content: 这里确实别用for循环，会把你绕晕，还是while好点

user: user-5
content: 如果你要写书，这个版块里全是好的素材的例子。如果你不写书，最好不要来这个版块。真难以置信，赵四老湿这么多年是怎么在这个版块里忍受下来的。在下表示万分敬佩。

user: user-6
content: 搜索下for的执行过程，就明白了，不要看上面一堆的解释。

user: user-7
content: FOR循环执行顺序： for(①a=1;②b<=75;④b=(++a*5)+50) {  ③printf("%d\n",b); }

user: user-8
content: b的值没改变，肯定是55了，这样用for看的人头晕，如果不写注释的话，估计过几个月你自己也不明白了

user: user-9
content: for循环增加步长是在一次循环的最后

user: user-10
content: 加个断点查看可以方便你理解for循环执行过程： 1、先执行a = 1；  // 此时b = 55； 2、判断是否b <= 75；  // 此时b = 55； 3、打印b的值； // 此时b = 55； 4、计算b = (++a*5)+50； // 此时a = 2，b = 60； 5、判断是否b <=7 5； 6、打印b的值； 后面循环执行过程4—6。

user: user-11
content: 原则上，我们应该坚持只在计数循环时使用for:  for(i = a; i <= b; ++ i) ... fro(i = a; i >= b; -- i) ...  或者放宽一些要求，步长可以不是1或-1，但必须是常量：  for(i = a; i <= b; i += 5) ... fro(i = a; i >= b; i -= 3) ...  更复杂的循环条件或循环变量变更都不适合出现于for循环中，用while循环会更清晰。

user: user-11
content: for(a=1;b<=75;b=(++a*5)+50)  printf("%d\n",b);  相当于：  a=1; while(b<=75) {    printf("%d\n",b);    b=(++a*5)+50; }  这样一来就清楚了，第一次输出的是b的初始值，与++a还是a++没有一丝关系。
user-0 提问: Bezier曲线绘制

回复:
user: user-1
content: 下载 cairo 源代码， 看里面spline 的部分。  保证你喜欢。

user: user-2
content: 先搜索下载安装MSDN98 然后参考 MSDN98\SAMPLES\MSDN\TECHART\1918\VECTOR2D.LIB MSDN98\SAMPLES\MSDN\TECHART\1918\VECTOR2D.DEF MSDN98\SAMPLES\MSDN\TECHART\1918\VECTOR2D.DLL MSDN98\SAMPLES\MSDN\TECHART\1918\VECTOR2D.H MSDN98\SAMPLES\MSDN\TECHART\1918\VECTOR.C MSDN98\SAMPLES\MSDN\TECHART\1918\ABSTRACT.TXT MSDN98\SAMPLES\MSDN\TECHART\2103\WNDPROC.C MSDN98\SAMPLES\MSDN\TECHART\2103\W32PEN.ICO MSDN98\SAMPLES\MSDN\TECHART\2103\W32PEN.H MSDN98\SAMPLES\MSDN\TECHART\2103\W32PEN.C MSDN98\SAMPLES\MSDN\TECHART\2103\W32HIT.MAK MSDN98\SAMPLES\MSDN\TECHART\2103\W32HIT.EXE MSDN98\SAMPLES\MSDN\TECHART\2103\VECTOR2D.LIB MSDN98\SAMPLES\MSDN\TECHART\2103\VECTOR2D.DLL MSDN98\SAMPLES\MSDN\TECHART\2103\W32PEN.RC MSDN98\SAMPLES\MSDN\TECHART\2103\PENSTUFF.C MSDN98\SAMPLES\MSDN\TECHART\2103\PENCUR.CUR MSDN98\SAMPLES\MSDN\TECHART\2103\MENU.C MSDN98\SAMPLES\MSDN\TECHART\2103\HITTEST.C MSDN98\SAMPLES\MSDN\TECHART\2103\BITMAP4.BMP MSDN98\SAMPLES\MSDN\TECHART\2103\BITMAP1.BMP MSDN98\SAMPLES\MSDN\TECHART\2103\BEZIER.H MSDN98\SAMPLES\MSDN\TECHART\2103\BEZIER.C MSDN98\SAMPLES\MSDN\TECHART\2103\RESOURCE.H MSDN98\SAMPLES\MSDN\TECHART\2103\ABSTRACT.TXT

user: user-3
content: 1.根据公式算出来，画许多直线 2.调用gdi+

user: user-4
content: 试试gnuplot
user-0 提问: 随手写了个汉诺塔逻辑代码

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

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

回复:
user: user-1
content: 加上this比较好 new PaintArea(this); 另外，你的应该还不能显示线条，要update()一下，最好搭配QTimer

user: user-1
content: MainWindow::MainWindow(QWidget *parent) :     QMainWindow(parent),     ui(new Ui::MainWindow) {     ui->setupUi(this);      area = new PaintArea;      setCentralWidget(area); }

user: user-2
content: 你new paintarea的时候要传入父窗口的指针 new paintarea(this)

user: user-3
content: QT有些可能记得不是很清楚了，新建widget没大小看不见，mainwindow内部有layoUT，作为子控件会得到大小

user: user-0
content: 非常感谢  方便的话能给我说下为什么吗？

user: user-3
content: area=new paintarea; 改为 area=new paintarea(this);
user-0 提问: 纸牌游戏问题

回复:
user: user-1
content: 用6.0可以通过，赞

user: user-0
content: 用c#编译程序

user: user-2
content: 程序擅长模拟，不擅长分析。

user: user-3
content: 额，上贴最后少了行 return 0; 领会精神吧

user: user-3
content: 这明显是道小学数学的算法题嘛，按楼上两位的纯模拟搞法估计也就60分。 这道题要这么分析，翻牌一次代表找到某个数的一个约数，约数总和为2的倍数表明最后牌面朝上，反之牌面朝下，这样分析之后就很容易搞出代码了，哈哈。 int main() { 	//i代表1至52张牌的序号 	for (int i=1;i<52;i++) 	{ 		//翻牌次数，默认0 		int swapCount=0; 		//判断i是否是2至i的自然数的倍数 		for (int j=2;j<=i;j++) 		{ 			//能整除就翻牌一次 			if (i%j==0) 				swapCount++; 		}  		//翻牌次数为偶数表明正面朝上 		if (swapCount%2==0) 			printf("%d ",i); 	} 	printf("\r\nend"); }

user: user-4
content: #include <stdio.h>   int swap(int card) { 	return (0 == card?1:0); }  int main() { 	int a[53]= {0}; 	int i,j; 	 	for(i=2; i<53; i++) 	{ 		for(j=i; j<53; j++) 		{ 			if (!(j%i)) 			{ 				a[j] = swap(a[j]); 			} 		} 		 	}  	for(i=1; i<53; i++) 	{ 		if(!a[i]) 			printf("%d ",i); 	} 	putchar(10);   }

user: user-2
content: #include <stdio.h> static int d[53]; int i,j; int main() {     for (j=2;j<=52;j++) {         i=j;         while (1) {             d[i]=1-d[i];             i+=j;             if (i>52) break;         }     }     i=0;     for (j=1;j<=52;j++) {         if (d[j]==0) {             if (i==0) {                 printf("%d",j);                 i=1;             } else {                 printf(" %d",j);             }         }     }     return 0; } //1 4 9 16 25 36 49

user: user-5
content: 你这问题，能详细点吗 ，看的都糊涂了
user-0 提问: 利用函数调用编一个判断素数的程序，这段代码怎么输入所有数结果都是不是素数

回复:
user: user-1
content: 引用 5 楼 q3733353520 的回复:[quote=引用 4 楼 jacksonfan 的回复:] [quote=引用 2 楼 q3733353520 的回复:] if(rtr=-1)  一样  其实对于这个程序来说，这个地方改不改 不影响结果 因为调用的函数只有2种返回值，如果第一个if满足，这个if就不执行 如果第一个if不满足，那只会满足这if[/quote]  带码  必须 逻辑清楚   执行结果要做到心中有数  尤其新手  不要搞那些高大上的东西  要明确代码的功能及可能出现的各种特殊情况[/quote]  按照规范，这样肯定是不行的 只是就他这个逻辑而言，这样写是不影响结果的 只是就事论事！

user: user-2
content: 引用 3 楼 jacksonfan 的回复:#include<stdio.h> #include<math.h> int prime(int x); int main() {   	int a,rtr; 	scanf("%d",&a); 	rtr=prime(a); 	if(rtr==-1) 		printf("%d is not a prime\n",a); 	else if(rtr=1)          printf("%d is a prime\n",a); 	return 0; }  int prime(int x) { 	int i,n; 	n = 0; 	double b; 	b=sqrt(x); 	for(i=2;i<=b;i++) 		if(x%i==0) 			n++; 	if(n>0) 		return -1; 	else 		return 1; }  如果你写一个项目 你会写这种if里面带赋值号的代码？

user: user-2
content: 引用 4 楼 jacksonfan 的回复:[quote=引用 2 楼 q3733353520 的回复:] if(rtr=-1)  一样  其实对于这个程序来说，这个地方改不改 不影响结果 因为调用的函数只有2种返回值，如果第一个if满足，这个if就不执行 如果第一个if不满足，那只会满足这if[/quote]  带码  必须 逻辑清楚   执行结果要做到心中有数  尤其新手  不要搞那些高大上的东西  要明确代码的功能及可能出现的各种特殊情况

user: user-1
content: 引用 2 楼 q3733353520 的回复:if(rtr=-1)  一样  其实对于这个程序来说，这个地方改不改 不影响结果 因为调用的函数只有2种返回值，如果第一个if满足，这个if就不执行 如果第一个if不满足，那只会满足这if

user: user-1
content: #include<stdio.h> #include<math.h> int prime(int x); int main() {   	int a,rtr; 	scanf("%d",&a); 	rtr=prime(a); 	if(rtr==-1) 		printf("%d is not a prime\n",a); 	else if(rtr=1)          printf("%d is a prime\n",a); 	return 0; }  int prime(int x) { 	int i,n; 	n = 0; 	double b; 	b=sqrt(x); 	for(i=2;i<=b;i++) 		if(x%i==0) 			n++; 	if(n>0) 		return -1; 	else 		return 1; }

user: user-2
content: if(rtr=-1)  一样

user: user-2
content: else if(rtr=1)     改为   else if(rtr==1)
user-0 提问: 用c语言实现的图像有损预测编码

回复:
user: user-1
content: 仅供参考#pragma comment(lib,"user32") #pragma comment(lib,"gdi32") #include <stdlib.h> #include <conio.h> #include <windows.h> HWND WINAPI GetConsoleWindow(); void HideTheCursor() {     CONSOLE_CURSOR_INFO cciCursor;     HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);     if (GetConsoleCursorInfo(hStdOut, &cciCursor)) {         cciCursor.bVisible = FALSE;         SetConsoleCursorInfo(hStdOut, &cciCursor);     } } void ShowTheCursor() {     CONSOLE_CURSOR_INFO cciCursor;     HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);     if (GetConsoleCursorInfo(hStdOut, &cciCursor)) {         cciCursor.bVisible = TRUE;         SetConsoleCursorInfo(hStdOut, &cciCursor);     } } int main() {     HWND  hwnd;     HDC   hdc;     HFONT hfont;     HBITMAP hbm;     HDC hdcBits;     BITMAP bm;      system("color F0");     system("cls");     HideTheCursor();     hwnd  = GetConsoleWindow();     hdc   = GetDC(hwnd);     hbm=LoadImage(0,"C:\\Windows\\Soap Bubbles.bmp",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);     if (hbm) {         hdcBits = CreateCompatibleDC(hdc);         GetObject (hbm, sizeof(BITMAP), &bm);         SelectObject(hdcBits,hbm);         BitBlt(hdc,200,10,bm.bmWidth, bm.bmHeight,hdcBits,0,0,SRCCOPY);         DeleteDC(hdcBits);         DeleteObject(hbm);     }     hfont = CreateFont(24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "华文楷体");     SelectObject(hdc,hfont);     SetTextColor(hdc,RGB(255,255,255));     SetBkMode(hdc,TRANSPARENT);     TextOut(hdc,210,30,"这个背景是泡泡",14);     DeleteObject(hfont);     ReleaseDC(hwnd,hdc);     getch();     system("color 07");     system("cls");     ShowTheCursor();     return 0; }