Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 求大神帮忙改良一下程序

回复:
user: user-1
content: 引用 2 楼 qq_37851893 的回复:您好，谢谢您的帮助！通过您的改进确实学到了不少的东西，但是我还是想请问一下，程序中如果不输入y，输入回车直接跳的最后else后语句输出的问题可以解决吗？ 改用getchar(),scanf("%c")会忽略回车

user: user-0
content: 您好，谢谢您的帮助！通过您的改进确实学到了不少的东西，但是我还是想请问一下，程序中如果不输入y，输入回车直接跳的最后else后语句输出的问题可以解决吗？

user: user-1
content: #include <stdio.h> #include <stdlib.h> void set_color(int back, int fore) { 	char cmd[9]; 	sprintf(cmd, "color %x", back << 4 | fore); 	system(cmd); } void print_love(int back_ch, int fore_ch, int back_clr, int fore_clr) { 	set_color(back_clr, fore_clr); 	for(float y=1.5f;y>-1.5f;y-=0.1f) 	{ 		for(float x=-1.5f;x<1.5f;x+=0.05f) 		{ 			float a=x*x+y*y-1; 			putchar(a*a*a-x*x*y*y*y<=0.0f?fore_ch:back_ch); 		} 		putchar('\n'); 	} } static const int BLACK = 0; static const int BLUE = 1; static const int GREEN = 2; static const int AQUE = 3; static const int RED = 4; static const int PURPLE = 5; static const int YELLOW = 6; static const int WHITE = 7; #define L(color) ((color) | 8) #define GRAY L(BLACK) int main(void) { 	char a; 	printf("****************（y or n）\n");  	scanf("%c",&a); 	if(a=='y') print_love('*', '#', L(AQUE), PURPLE); 	else printf("********************"); 	system("pause"); }
user-0 提问: 大牛快来

回复:
user: user-1
content: 或者使用最新的c++11标准试试

user: user-2
content: 引用 3 楼 qq_31989333 的回复:const int n = 5;加上个const 写错了#define n 3

user: user-3
content: “变量赋值”和“变量初始化”不是一回事！ “变量赋值”发生在运行期，其写法遵循赋值语法规定。 “变量初始化”发生在编译期或运行期，其写法遵循初始化列表语法规定。

user: user-4
content: 老的标准，数组元素个数必须是常数表达式。 新的标准，可以是变量，但是数组不能定义时初始化。

user: user-2
content: const int n = 5;加上个const
user-0 提问: 这段代码用Dev C++为什么编译出来显示不了...？

回复:
user: user-1
content: 用code：：blocks吧

user: user-2
content: 可以显示啊。。我试过了，我也是devc++

user: user-3
content: 用 Cygwin C++ 编译可以显示
user-0 提问: [新人提问] VS2015 编译出错LINK

回复:
user: user-1
content: 引用 2 楼 u011017860 的回复:是啊，我也不知道怎么回事。。http://blog.sina.com.cn/s/blog_13249c1060102vgap.html 看这个

user: user-2
content: 估计工程类型选的不对，用了DirectX了 实际上用不着

user: user-0
content: 是啊，我也不知道怎么回事。。

user: user-3
content: 看lz的代码，不需要“dxerr.lib”呀
user-0 提问: 求助编译C工程(已含C源码)

回复:
user: user-1

user: user-2
content: 突然发现，赵老师的ID是不是藏着4月1日的意思

user: user-1

user: user-3
content: 引用 1 楼 zhao4zhong1 的回复:不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？ 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话，文本文件的格式问题可参考json或xml  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！  突然发现，赵老师的ID是不是藏着4月1日的意思  MCU上裸跑的程序基本上都没有文件的概念，而且其中的汇编引导代码调用C语言的入口函数什么的，家常便饭吧

user: user-0
content: C的代码能编译,通过命令行执行都行.可是这腾讯太坑爹,给的代码都无法编译

user: user-2
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？ 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话，文本文件的格式问题可参考json或xml  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！
user-0 提问: 初次使用QT编译时总是出问题，求大神

回复:
user: user-1
content: 首先正常现在可以下载的QT官网版本  都是可以直接编译的   使用的如果是QT Creator的话 更换下编译器就可以了 其他编译器需要配置 选这个QT Demo的例子都可以运行 自己写的代码也没问题

user: user-2
content: 工具—选项—构建和运行—概要——不适用jom代替nmake ----奈斯

user: user-3
content: 工具—选项—构建和运行—概要——不适用jom代替nmake  --------不错，可以解决问题

user: user-4
content: http://download.qt.io/archive/qt/  你试试换个版本

user: user-5
content: 工具—选项—构建和运行—概要——不适用jom代替nmake
user-0 提问: 请大神帮忙解决小弟弟函数中（转义字符）遇到的问题，谢谢！

回复:
user: user-1
content: 注意自己的代码风格，没必要一下申请2000个字节，你平时测试能用到2000 字节吗？就是你平时测试不能一下子输入2000个字节。根据需要预估一下字节数，我估计128 字节都足够你输入的。但注意，转换后的字节数肯定比转换前的要多，所以，两个缓存不能一样大，除非他们都特别大，以至于不会越界。

user: user-1
content: #include<stdio.h>  void escape(char s[],char t[]);  int main() {     char s[2000];     char t[2000];     printf("please input your character:");     fgets(t,2000,stdin);     escape(s,t);     printf("%s",s);     return 0; }  void escape(char s[],char t[]) {     int i,j;     for(i = j = 0; t[i]; i++){         switch(t[i]){             case'\n':                 s[j++] = '\\';                 s[j++] = 'n';                 break;              case'\t':                 s[j++] = '\\';                 s[j++] = 't';                 break;              default:                 s[j++] = t[i];                 break;         }     }      s[j] = '\0'; } '\t', '\n'都是一个字符，所以不能把它们看成一个字符。 但是如果输出时，你要用两个字符标识，即’\\‘, ’t', '\\', 'n' 以上是改的demo，可以试一下。

user: user-1
content: 引用 6 楼 caine12345 的回复:[quote=引用 4 楼 cfjtaishan 的回复:] #include<stdio.h>  void escape(char s[],char t[]);  int main() {     char s[2000];     char t[2000];     printf("please input your character:");     fgets(t,2000,stdin);     escape(s,t);     printf("%s",s);     return 0; }  void escape(char s[],char t[]) {     int i,j;     for(i = j = 0; t[i]; i++){         switch(t[i]){             case'\n':                 s[j++] = '\\';                 s[j++] = 'n';                 break;              case'\t':                 s[j++] = '\\';                 s[j++] = 't';                 break;              default:                 s[j++] = t[i];                 break;         }     }      s[j] = '\0'; } '\t', '\n'都是一个字符，所以不能把它们看成一个字符。 但是如果输出时，你要用两个字符标识，即’\\‘, ’t', '\\', 'n' 以上是改的demo，可以试一下。  谢谢了，我还想问一下为什么我的代码在这上边都是左对齐的，你的就很规整呢？[/quote] 注意下表情符号前面的一个功能，那里面分不同的语言

user: user-0
content: 引用 5 楼 cfjtaishan 的回复:注意自己的代码风格，没必要一下申请2000个字节，你平时测试能用到2000 字节吗？就是你平时测试不能一下子输入2000个字节。根据需要预估一下字节数，我估计128 字节都足够你输入的。但注意，转换后的字节数肯定比转换前的要多，所以，两个缓存不能一样大，除非他们都特别大，以至于不会越界。  谢谢！

user: user-0
content: 引用 4 楼 cfjtaishan 的回复:#include<stdio.h>  void escape(char s[],char t[]);  int main() {     char s[2000];     char t[2000];     printf("please input your character:");     fgets(t,2000,stdin);     escape(s,t);     printf("%s",s);     return 0; }  void escape(char s[],char t[]) {     int i,j;     for(i = j = 0; t[i]; i++){         switch(t[i]){             case'\n':                 s[j++] = '\\';                 s[j++] = 'n';                 break;              case'\t':                 s[j++] = '\\';                 s[j++] = 't';                 break;              default:                 s[j++] = t[i];                 break;         }     }      s[j] = '\0'; } '\t', '\n'都是一个字符，所以不能把它们看成一个字符。 但是如果输出时，你要用两个字符标识，即’\\‘, ’t', '\\', 'n' 以上是改的demo，可以试一下。  谢谢了，我还想问一下为什么我的代码在这上边都是左对齐的，你的就很规整呢？

user: user-2
content: 引用 2 楼 caine12345 的回复:[quote=引用 1 楼 user-2 的回复:] 输入不对，输入\n,\t就对了。  我知道，但是想问一下原因是什么呢？[/quote] 因为你程序设计读到一个斜杠，就会再读下一个字符与其配对，你输入\\n的话，\\是一组，再读就是n

user: user-0
content: 引用 1 楼 user-2 的回复:输入不对，输入\n,\t就对了。  我知道，但是想问一下原因是什么呢？

user: user-2
content: 输入不对，输入\n,\t就对了。
user-0 提问: 为什么一直wrong anwser 求助

回复:
user: user-1
content: int main() { int n,i,a[110]={0},min1=100; while(scanf("%d",&n)!=EOF) {     min1初值是100，万一输入的那些数都比100大呢？岂不是到最后找的的最小数只能是100了？跟谁交换？

user: user-2
content: 试了一下，没错误啊。

user: user-3
content: 请您整理好逻辑后重新编写代码，说不定会有意外的惊喜

user: user-4
content: min1的初始值改为INT_MAX(头文件：limits.h)
user-0 提问: 请教C语言 堆栈释放崩溃 问题

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

user: user-2
content: 引用 3 楼 Westlake96 的回复:[quote=引用 1 楼 user-2 的回复:] 对于第一个：  scanf("%d", &(st + i)->age); %d对应的应该是int，%c对应的是char，你的age要用%c  同理scanf("%d", &(st + i)->sex);这句  非常感谢 问题终于找到了 但是又出现了一个新的问题   #include <stdio.h> #include <stdlib.h> #include <string.h> #pragma warning(disable:4996)   typedef struct {     char name[16];     unsigned char age;     unsigned char sex; } Student;   int main(void) {     Student *st = (Student *)malloc(sizeof(Student) * 2);     memset(st, 0, sizeof(Student) * 2);     for (int i = 0; i < 2; i++)     {         printf("pls input name:");         scanf("%s", (st + i)->name);         printf("pls input age:");         scanf("%c", &(st + i)->age);         printf("pls input sex(0/1):");         scanf("%c", &(st + i)->sex);         printf("\n");     }     free(st);     return 0; }  以上代码 在输入数据的时候 每次输入完成name后 就直接输入sex了 跳过了age的输入 请问应该如何解决呢？[/quote]  scanf 后面加个getchar(); 把缓冲区中的换行符接收了  否则会直接被下一个 scanf("%c", ...) 接收

user: user-1
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0];

user: user-0
content: 引用 1 楼 user-2 的回复:对于第一个：  scanf("%d", &(st + i)->age); %d对应的应该是int，%c对应的是char，你的age要用%c  同理scanf("%d", &(st + i)->sex);这句  非常感谢 问题终于找到了 但是又出现了一个新的问题   #include <stdio.h> #include <stdlib.h> #include <string.h> #pragma warning(disable:4996)   typedef struct {     char name[16];     unsigned char age;     unsigned char sex; } Student;   int main(void) {     Student *st = (Student *)malloc(sizeof(Student) * 2);     memset(st, 0, sizeof(Student) * 2);     for (int i = 0; i < 2; i++)     {         printf("pls input name:");         scanf("%s", (st + i)->name);         printf("pls input age:");         scanf("%c", &(st + i)->age);         printf("pls input sex(0/1):");         scanf("%c", &(st + i)->sex);         printf("\n");     }     free(st);     return 0; }  以上代码 在输入数据的时候 每次输入完成name后 就直接输入sex了 跳过了age的输入 请问应该如何解决呢？

user: user-2
content: 对于第二个：  错误原因同第一个

user: user-2
content: 对于第一个：  scanf("%d", &(st + i)->age); %d对应的应该是int，%c对应的是char，你的age要用%c  同理scanf("%d", &(st + i)->sex);这句
user-0 提问: 算法提高 盾神与积木游戏 ,自己编的提交上去后只对了两个，但是感觉没有错误，求大神指导

回复:
user: user-0
content: 可是我没有用动态规划啊

user: user-1
content: 边界条件 输入输出格式 ……
user-0 提问: 【C语言】请问我的这个嵌套switch函数里最后的括号怎么结不了尾？

回复:
user: user-0
content: 引用 2楼赵4老师 的回复:偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。试试

user: user-1
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。

user: user-0
content: 就是最后反大括号打出来不对齐 下一个函数也一直有问题
user-0 提问: 使用fgets()遇到的一个问题

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:line 是一个字符串buff。假如上一次读取到的行是 tttttttttttttttttttttttttttttttttttttttttttt。下一次读取的行是abc，那么此时line 的内容是abcttttttttttttttttttttttttttttttttttttttttttttttttttt。这就会造成错误的判断。 所以，在fgets之间，要使用memset对line清空。  谢谢！解决了我的问题 ：）

user: user-1
content: line 是一个字符串buff。假如上一次读取到的行是 tttttttttttttttttttttttttttttttttttttttttttt。下一次读取的行是abc，那么此时line 的内容是abcttttttttttttttttttttttttttttttttttttttttttttttttttt。这就会造成错误的判断。 所以，在fgets之间，要使用memset对line清空。
user-0 提问: 为什么这段while循环执行第二次的时候没有让我进行键盘录入就直接跳过了？？？

回复:
user: user-1
content: 第二次匹配的是'\n'回车符

user: user-2
content: 引用 7 楼 HJMing123 的回复:[quote=引用 6 楼 qq_31989333 的回复:] 修改成这样的 #include<stdio.h> int main ( ) { 	char ch1; 	while ( true ) 	{  		ch1=getchar ( ); 		if ( ch1 == '@' )    //输入以@结束 		{ 			break; 		} 		else 		{ 			puts ( "ok" ); 		} 		while ( getchar ( ) != '\n' ); 	} 	return 0; }   C Primer Plus中有很多关于这个问题的例子.  你也可以搜索while(getchar( )!='\n)     continue; 不是很熟悉C语言，特别是一些细节上的问题，能再问一下这个问题吗？  while(isEmpty_Seq(S2)==-1)         {              Pop_Seq(S2,ch2);       //出栈             Push_Seq(S3,ch2);     //入栈         }  int isEmpty_Seq(SeqStack &S) {     if(S.top==-1)     {         printf("栈空");         return 1;     }     else         return -1;  } 我如果执行下面这个语句，代码就会一直循环执行isEmpty函数，请问这是为什么呢？[/quote] 我还是个菜鸟,上学期学的数据结构都忘光了.现在正在重新学习. 你还是问其他人吧. 你可以在CSDN博客里面搜索一些人写的有关栈的代码.有很多  我上个学期也写了数据结构有关栈 的代码,如果你要的话,发私信给我.

user: user-3
content: 引用 4 楼 u010165006 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0];  scanf("%1s",s); c=s[0]; 和 scanf("%c",&c); 的区别是什么？[/quote] 前者会自动跳过空格或Tab或Enter

user: user-0
content: 引用 6 楼 qq_31989333 的回复:修改成这样的 #include<stdio.h> int main ( ) { 	char ch1; 	while ( true ) 	{  		ch1=getchar ( ); 		if ( ch1 == '@' )    //输入以@结束 		{ 			break; 		} 		else 		{ 			puts ( "ok" ); 		} 		while ( getchar ( ) != '\n' ); 	} 	return 0; }   C Primer Plus中有很多关于这个问题的例子.  你也可以搜索while(getchar( )!='\n)     continue; 不是很熟悉C语言，特别是一些细节上的问题，能再问一下这个问题吗？  while(isEmpty_Seq(S2)==-1)         {              Pop_Seq(S2,ch2);       //出栈             Push_Seq(S3,ch2);     //入栈         }  int isEmpty_Seq(SeqStack &S) {     if(S.top==-1)     {         printf("栈空");         return 1;     }     else         return -1;  } 我如果执行下面这个语句，代码就会一直循环执行isEmpty函数，请问这是为什么呢？

user: user-2
content: 修改成这样的 #include<stdio.h> int main ( ) { 	char ch1; 	while ( true ) 	{  		ch1=getchar ( ); 		if ( ch1 == '@' )    //输入以@结束 		{ 			break; 		} 		else 		{ 			puts ( "ok" ); 		} 		while ( getchar ( ) != '\n' ); 	} 	return 0; }    C Primer Plus中有很多关于这个问题的例子.  你也可以搜索while(getchar( )!='\n)     continue;

user: user-4
content: scanf从输入缓冲区中提取字符，如果输入缓冲区为空，则等待键盘输入。 第一次scanf的时候，键盘输入以后输入缓冲区中还有一个回车符，第二次scanf的时候直接从缓冲区中提取回车符。

user: user-4
content: 引用 3 楼 zhao4zhong1 的回复:在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0];  scanf("%1s",s); c=s[0]; 和 scanf("%c",&c); 的区别是什么？

user: user-3
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0];

user: user-5
content: 因为最后的回车换行符\n也会留在缓冲区，下一次接收到\n  scanf("%c",&ch1);后面加上一句getchar();接收\n
user-0 提问: 关于快速排序的非递归算法的时间复杂度和空间复杂度

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

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:各种排序算法动画演示http://www.webhek.com/misc/comparison-sort/ 老师你可能会错我的意思了 我是想问 ①为什么快速排序的非递归算法会比递归算法还慢 ②快速排序的平均空间复杂度O(nlog2 n)是指栈的空间还是栈的空间加上其他的空间？

user: user-2
content: 3000个数据会慢到9秒那已经看上去像平方复杂度了。估计哪里写扯了。 复杂度是指最坏复杂度。你一个特定的数据能做到更优并不奇怪。

user: user-1
content: 各种排序算法动画演示http://www.webhek.com/misc/comparison-sort/
user-0 提问: 关于C语言函数传参和函数调用的问题

回复:
user: user-1
content: 引用 6 楼 sxh2016 的回复:[quote=引用 4 楼 xian_wwq 的回复:] [quote=引用 3 楼 sxh2016 的回复:] 那函数的输出型参数和输入型参数又是什么意思呢？  可以简单理解为数据流向， 输入型是由使用者提供，完成函数执行； 输出型参数是函数执行完后，还会给使用者返回数据；[/quote] 返回的是函数加工过的数据嘛？返回的数据放到了哪里呢？[/quote]  是的，返回的是处理过的数据，数据存在函数调用者传入的对象中 要返回数据传入的只可能是指针类型，值类型是没有办法返回数据的

user: user-1
content: 引用 3 楼 sxh2016 的回复:那函数的输出型参数和输入型参数又是什么意思呢？  可以简单理解为数据流向， 输入型是由使用者提供，完成函数执行； 输出型参数是函数执行完后，还会给使用者返回数据；

user: user-0
content: 那函数的输出型参数和输入型参数又是什么意思呢？

user: user-2
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后，就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。

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

user: user-0
content: 引用 4 楼 xian_wwq 的回复:[quote=引用 3 楼 sxh2016 的回复:] 那函数的输出型参数和输入型参数又是什么意思呢？  可以简单理解为数据流向， 输入型是由使用者提供，完成函数执行； 输出型参数是函数执行完后，还会给使用者返回数据；[/quote] 返回的是函数加工过的数据嘛？返回的数据放到了哪里呢？

user: user-3
content: 一般都是传值，指针类型也是传值，只是传的是指针值，只有引用类型的实际是传地址

user: user-4
content: 调用时传入的是实参，定义和声明时是形参； 形参和实参在不同的函数栈，是相互独立的。

user: user-5
content: --------- rc = gslX680_ts_init(client, ts);括号里的是传入的值？ 函数调用都是传值，地址(指针)也是一个值，主要是看这个值的类型，从函数声明来看client和ts都是一个指向结构体的指针  --------- static int gslX680_ts_init(struct i2c_client *client, struct gsl_ts *ts)括号里是输入的值？ 括号里是这个函数的形式参数，换句话说：括号里的是描述当调用gslX680_ts_init时，需要传递的参数的顺序，参数的类型。
user-0 提问: 在linux上通过txt文件修改linux 的Ip

回复:
user: user-1
content: grep、sed、awk提取IP ifconfig修改IP crontab间隔一定时间执行

user: user-2
content: 主要是运用到文件打开，文件读写，字符串匹配，以及数值和字符串的转换等等； 建议楼主先自己写写，具体遇到问题再让大家帮你解决。

user: user-0
content: 可以详细点吗，这命令只是查信息的

user: user-1
content: pwd，sed，ifconfig，crontab，……
user-0 提问: 一个关于xcode的问题

回复:
user: user-1
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0];

user: user-2
content: 第二个没有\n，回车符。 在windows下或者标准的C程序编译器，或者在Linux下运行，最后一行都会运行的。因为程序结束，系统会清理该程序在内存里空间，包括将在内存里的数据刷到终端或者文件。
user-0 提问: c语言关于FLOAT输出问题

回复:
user: user-1
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-2
content: http://www.cnblogs.com/emanlee/archive/2010/04/27/1722541.html

user: user-3
content: 引用 楼主 MYsce 的回复:#include<stdio.h> int main(void) {	float ftemp; 	printf("请输入:"); 	scanf("%f",&ftemp); 	printf("f = %f  e = %E\n",ftemp,ftemp); 	return 0;  }  怎么我输出会21.290001呢，我想输出是21.290000我想输出21.290000怎么会这样 我用的是win10 vs2010  浮点型的精度问题
user-0 提问: 求助大神啊！！本人新手

回复:
user: user-1
content: 不错不错，有设计感

user: user-0
content: 不要把方法设为静态的，这种方法

user: user-0
content: 就是当点击这张图里的返回，返回到这张图而这里面的数据不会被重新实例化

user: user-2
content: 不懂，能不能描述清楚点；贴代码

user: user-0
content: 求各位大神！！
user-0 提问: 神奇的六位数

回复:
user: user-1
content: 引用 2 楼 qq_36409192 的回复:最直接，最暴力的方法，从100000向999999进行搜索，满足条件的输出。  这个暴力法就太慢了

user: user-2
content: 最暴力的方法，从100000向166666进发，爆炸了计算

user: user-3
content: 1/7 呗 。。。

user: user-4
content: 最直接，最暴力的方法，从100000向999999进行搜索，满足条件的输出。

user: user-5
content: 142857

user: user-6
content: 六位数最高位只能是1，因为它乘以6还是一个六位数，即乘以6后不能有进位。同时次高位不能大于等于7，因为次高位是7或更大，乘以6后会有进位，即使在最高为为1时。 可以继续根据其他的方法将可能的六位数缩小范围
user-0 提问: 数据存储和打印

回复:
user: user-1
content: 找到一个资料，可能对你有用http://blog.csdn.net/libing403?viewmode=contents

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

user: user-3
content: 主要是输出时，格式不一样，格式表示的数据的范围不一样；所以，内存里的数据是一样的，输出格式不一样，同一个数据输出的值可能不一样。
user-0 提问: 学习方向的问题  谢谢你了

回复:
user: user-1
content: 有时去执行一个错误的决定总比优柔寡断或者没有决定要好得多。

user: user-2
content: 有帮助，just do it

user: user-0
content: 引用 4 楼 bravery36的回复:当然有帮助，但是你要有自己的目标。你的目的是求职还是学习？求职的话还是可以更有针对性一点。 好  谢谢你了 我现在大一   主要还是学习吧

user: user-0
content: 引用 5 楼 ck2333的回复:在掌握一两门基础变成语言后，建议去学一下数据结构与算法分析。 好  谢谢你了  我现在就真正学

user: user-0
content: 引用 3 楼 自信男孩的回复:嗯，如果是通过自己的编译运行，调试的，对自己的编程能力还是有很大帮助的；建议在原来的基础上在进行优化，比如不完善的功能，效率不高的地方，性能不好的地方或者可以添加一些新的功能；这样对自己的编程能力有一个升华。 嗯  好  谢谢  我会努力的

user: user-3
content: 在掌握一两门基础变成语言后，建议去学一下数据结构与算法分析。

user: user-4
content: 当然有帮助，但是你要有自己的目标。你的目的是求职还是学习？求职的话还是可以更有针对性一点。

user: user-5
content: 嗯，如果是通过自己的编译运行，调试的，对自己的编程能力还是有很大帮助的；建议在原来的基础上在进行优化，比如不完善的功能，效率不高的地方，性能不好的地方或者可以添加一些新的功能；这样对自己的编程能力有一个升华。

user: user-0
content: 引用 1 楼 user-6的回复:当然有了，有些东西光看懂了没用，在实践中才会发现其实没懂 谢谢你了  我学C语言的时候一直喜欢编写一些小游戏  然后害怕这些东西不但浪费时间还对我的编程能力没有用

user: user-6
content: 当然有了，有些东西光看懂了没用，在实践中才会发现其实没懂

user: user-1
content: 《Visual C++ 游戏开发经典案例详解》

user: user-0
content: 引用 13 楼 赵4老师的回复:[quote=引用 11 楼 qq_36686996 的回复:] [quote=引用 10 楼 赵4老师的回复:]有时去执行一个错误的决定总比优柔寡断或者没有决定要好得多。 嗯   对的  但是  我已经做好了贪吃蛇和飞机大战还有俄罗斯方块了  现在准备在做推箱子  但是我不知道是否应该再花这个时间了  所以咨询一下各位大佬的[/quote] 推箱子游戏VC6源代码 http://download.csdn.net/detail/zhao4zhong1/3230945[/quote] 谢谢你了  我会好好看的  感谢感谢

user: user-1
content: 引用 11 楼 qq_36686996 的回复:[quote=引用 10 楼 赵4老师的回复:]有时去执行一个错误的决定总比优柔寡断或者没有决定要好得多。 嗯   对的  但是  我已经做好了贪吃蛇和飞机大战还有俄罗斯方块了  现在准备在做推箱子  但是我不知道是否应该再花这个时间了  所以咨询一下各位大佬的[/quote] 推箱子游戏VC6源代码 http://download.csdn.net/detail/zhao4zhong1/3230945

user: user-2
content: 犹豫继续呆在屋里还是出门，先稍微到门外走几步，然后再决定。

user: user-0
content: 引用 10 楼 赵4老师的回复:有时去执行一个错误的决定总比优柔寡断或者没有决定要好得多。 嗯   对的  但是  我已经做好了贪吃蛇和飞机大战还有俄罗斯方块了  现在准备在做推箱子  但是我不知道是否应该再花这个时间了  所以咨询一下各位大佬的
user-0 提问: 结构体数组的初始化

回复:
user: user-1
content: C语言中数组定义 和初始化都会讲到这些内容的。

user: user-2
content: 用大括号这种语法只能在初始化时，而不能在之后的赋值时使用

user: user-3
content: 引用 3 楼 sinat_35134692 的回复:[quote=引用 2 楼 wang0635 的回复:] 这是赋值，不允许的。 初始化可以用初始值列表。真想这样写，可以强制转换，如     head[0] = (headtype){ "abcde", 0 };     head[1] = (headtype){ "cdefg", 3 }; 多谢解答，想问下为什么加了一个强制类型转换就可以了？可以简要分析下么，谢谢[/quote]告诉编译器它是结构体而不是数组

user: user-4
content: 。楼上都是对的。。。。。。。。

user: user-5
content: “变量赋值”和“变量初始化”不是一回事！ “变量赋值”发生在运行期，其写法遵循赋值语法规定。 “变量初始化”发生在编译期或运行期，其写法遵循初始化列表语法规定。

user: user-0
content: 引用 2 楼 wang0635 的回复:这是赋值，不允许的。 初始化可以用初始值列表。真想这样写，可以强制转换，如     head[0] = (headtype){ "abcde", 0 };     head[1] = (headtype){ "cdefg", 3 }; 多谢解答，想问下为什么加了一个强制类型转换就可以了？可以简要分析下么，谢谢

user: user-3
content: 这是赋值，不允许的。 初始化可以用初始值列表。真想这样写，可以强制转换，如     head[0] = (headtype){ "abcde", 0 };     head[1] = (headtype){ "cdefg", 3 };

user: user-6
content: 在定义时可以这样初始化，但是单独操作不这样赋值了。   strncpy(head[0].str, "abcde", 10); head[0].len = 0; strncpy(head[1].str, "cdefg", 10); head[1].len = 3; 只能这样赋值了。
user-0 提问: C 语言，用SDK API 链接数据库，怎么链接？

回复:
user: user-0
content: 犯了个低价错误 因为C FREE 导入ODBC32的时候，是包含路径的的。记得把路径删除掉。 来个人顶贴吧，我散60分

user: user-1
content: SQL Server自带的命令行工具比如bcp就是用C/C++写的。

user: user-0
content: 自己来顶贴 各位大神们，别给我 一个链接，或者MSDN 让我自己去看。 我看过了，没成功，所以才来找高人的。 谢谢
user-0 提问: c语言指针问题

回复:
user: user-1
content: 从前面可以看出，你的头指针没问题，且你传入的参数node没有判空或者node本身就是野指针，亦或者node->next就是野指针。你可以去看一看的参数node.

user: user-2
content: 注意一下你传进来的参数node是否为野指针，或者NULL

user: user-3
content: node万一是NULL呢？
user-0 提问: c语言简单问题求解

回复:
user: user-1
content: 引用 4 楼 tiandragon00 的回复:时间复杂度是N 不是N的平方 嗯？你确定我的算法的时间复杂度是N的平方？ 我想我们先搞清楚时间复杂度是如何计算的~

user: user-2
content: 仅供参考：#include <stdio.h> #include <string.h> char s1[]="delete"; char s2[]="select"; unsigned char n[256]={0}; char r[257]; int i,L,o=0; void main() {     L=strlen(s1); for (i=0;i<L;i++) if (!n[(unsigned int)s1[i]]) n[(unsigned int)s1[i]]=++o;     L=strlen(s2); for (i=0;i<L;i++) if (!n[(unsigned int)s2[i]]) n[(unsigned int)s2[i]]=++o;     L=0; 	for	(o=1;o<=256;o++) { 		for	(i=0;i<256;i++)	{ 			if (o==n[i]) { 				r[L++]=i; 				break; 			} 		} 		if (i>=256)	break; 	}     r[L]=0;     printf("[%s]\n",r); } //[deltsc]

user: user-0
content: 时间复杂度是N 不是N的平方

user: user-1
content: 定义一个一维数组，长度是26（26个字母）；通过遍历字符串然后统计字符的个数；最后遍历该一维数组，输出个数为1的

user: user-0
content: 大牛，能具体点吗？

user: user-3
content: 顺序异或~~

user: user-4
content: 引用 3 楼 cfjtaishan 的回复:定义一个一维数组，长度是26（26个字母）；通过遍历字符串然后统计字符的个数；最后遍历该一维数组，输出个数为1的 部分代码： 	int  stat[26]; 	memset(stat, 0, 26*sizeof(int)); 	char t; 	cin >> t; 	while (t >= 'a' && t <='z') 	{ 		stat[t - 'a']++; 		cin >> t; 	} 	for (int i = 0; i < 26; i++) 	{ 		if (stat[i] == 1) 			cout << " " << (char)(i + 'a'); 	}

user: user-5
content: http://bbs.csdn.net/topics/391994997

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

user: user-0
content: 能否解释一下
user-0 提问: 网络编程终端连接

回复:
user: user-1
content: Window下的cmd窗口中输入以下命令启动100个记事本： for /L %a in (1,1,100) do start notepad.exe

user: user-2
content: 引用 2 楼 zfh19921230 的回复:脚本怎么执行啊,可以说得明白点不大神 在脚本里用一个循环，比如你的客户端程序是a.out, 那么每次循环都执行一个./a.out 建议先看一下脚本；perl或者Linux的bash也可以（如果是LInux下开发)。

user: user-0
content: 脚本怎么执行啊,可以说得明白点不大神

user: user-2
content: 首先先写一个终端程序（client)，然后用脚本执行该程序呗。
user-0 提问: 关于strcpy()的一个疑问

回复:
user: user-1
content: 第一个name指向位置在堆里；第二个name指向位置在栈里(栈指针本身未初始化为0，编译器自动给初值为0xCCCCCCCC)。

user: user-2
content: 说明编译器没检查出来呗，运行的话会修改掉不该修改的内存，破坏性可想而知

user: user-3
content: 没有问题不等于总是没有问题；这是一个潜在的bug，对于潜在的bug还不如明显的bug好，因为明显的bug好定位，潜在的bug不好定位。 对野指针拷贝数据，是一个潜在的bug;

user: user-4
content: 你确定你第二种是对的？？

user: user-5
content: 你多试几次试试

user: user-6
content: 碰巧了。 正确的程序，一定能得正确的结果。 错误的程序，什么都有可能。
user-0 提问: C读取txt列的数据

回复:
user: user-1
content: 如果你读懂了Linux下的sed对应源代码的话，你就会变成该领域的大神了。

user: user-1
content: 仅供参考：//NAME: essaie bla bla //DIMENSION: 8 //DATA //1  14  15 //2  11  10 //3  6   4 //4  7   13 //5  9   21 //6  19  3 //7  1   5 //8  8   8 //EOF // // 文本文件中可能还含有其他内容，但是需要用到的内容即以上  //比如data.txt: //NAME: essaie bla bla //其它内容 //DIMENSION: 8 //其它内容 //DATA //其它内容 //1  14  15 //其它内容 //2  11  10 //其它内容 //3  6   4 //其它内容 //4  7   13 //其它内容 //5  9   21 //其它内容 //6  19  3 //其它内容 //7  1   5 //其它内容 //8  8   8 //其它内容 //EOF  // 目标是要获取NAME后字串，DIMENSION后数值，以及DATA以下的数值 // 其中NAME就是随便个字句，DIMENSION是城市数量，DATA以下是城市编号，X坐标，Y坐标 // 所有的这些将赋值给一个事先定义好的结构 #include <stdio.h> #include <string.h> #define MAXCPL   80   //每行最大字符数 #define MAXCITY  100  //每组数据中DATA最多项数，DIMENSION的最大值 #define MAXNAMEL 32   //NAME最大长度 struct S {     char NAME[MAXNAMEL+1];     int  DIMENSION;     struct D {         int NO;         int X;         int Y;     } DATA[MAXCITY]; } s; FILE *f; int st,n,i; char ln[MAXCPL]; int main() {     f=fopen("data.txt","r");     if (NULL==f) {         printf("Can not open file data.txt!\n");         return 1;     }     st=0;     n=0;     while (1) {         if (NULL==fgets(ln,MAXCPL,f)) break;         if (st==0) {             if (1==sscanf(ln,"NAME: %31[^\n]",s.NAME)) st=1;         } else if (st==1) {             if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;         } else if (st==2) {             if (0==strcmp(ln,"DATA\n")) st=3;         } else if (st==3) {             if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {                 n++;                 if (n>=MAXCITY || n>=s.DIMENSION) break;             }         }     }     fclose(f);     printf("s.NAME=[%s]\n",s.NAME);     printf("s.DIMENSION=%d\n",s.DIMENSION);     for (i=0;i<n;i++) {         printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);     }     return 0; } //s.NAME=[essaie bla bla] //s.DIMENSION=8 //s.DATA[0].NO,X,Y=1,14,15 //s.DATA[1].NO,X,Y=2,11,10 //s.DATA[2].NO,X,Y=3,6,4 //s.DATA[3].NO,X,Y=4,7,13 //s.DATA[4].NO,X,Y=5,9,21 //s.DATA[5].NO,X,Y=6,19,3 //s.DATA[6].NO,X,Y=7,1,5 //s.DATA[7].NO,X,Y=8,8,8

user: user-2
content: 不好意思，上面说错了，应该用fprintf(fp, "%f%f%f%f%f",&a[0],&a[1],&a[2],&a[3],&a[4]);

user: user-2
content: 直接读取到数组里，然后输出的时候交换一下位置就可以了，读取直接用scanf("%f%f%f%f%f",&a[0],&a[1],&a[2],&a[3],&a[4])
user-0 提问: strcpy()崩溃

回复:
user: user-1
content: 引用 8 楼 u014453898 的回复:那为什么int main() { 	char *name; 	strcpy(name,"jimy"); 	return 0; } 又不会发生错误呢 不崩溃不代表下次不崩溃，也不代表在其他环境下不崩溃，也不代表正确

user: user-0
content: 那为什么int main() { 	char *name; 	strcpy(name,"jimy"); 	return 0; } 又不会发生错误呢

user: user-2
content: 我不知道malloc是怎么用的，只是猜猜。代码可能 不可行。意思就是分配一个适当的存储字符数组的空间。让后让name指向它。

user: user-3
content: 你的结构体里只放了一个char指针和一个int变量，所以字符串没地方放，应该这样      test *p = (test*)malloc(sizeof(test));     p->name = (char*)malloc(64*sizeof(char));//64是你放的最多的字符数     strcpy(p->name,"jim");

user: user-2
content: #include <stdio.h>  #include <string.h> #define STRSIZE = 10; typedef struct T { 	char *name; 	int num; }test;  int main() { 	test *p = (test*)malloc(sizeof(test));         p->name = (char *)malloc(STRSIZE); 	strcpy(p->name,"jim"); 	printf("%s\n",p->name); 	return 0;  }

user: user-0
content: 结构体分配的空间不包含结构体里面的成员吗？？

user: user-4
content: name没有malloc空间。

user: user-0
content: 请问那应该如何改呢

user: user-2
content: 给结构分配了内存，但没给name分配空间。
user-0 提问: 大神，特殊符号怎么过滤？

回复:
user: user-1
content: 处理汉字请用wchar_t、wstring和wregex。

user: user-2
content: 引用 5 楼 sdhexu 的回复:有穷自动状态机啊。。。多简单。 正则表达式也行啊。。也不难。

user: user-2
content: 有穷自动状态机啊。。。多简单。

user: user-0
content: 字符串是读文件读出来的，现在想的是用替换的方法，如何替换？转义怎么加进去？

user: user-3
content: 建议sprintf之前，先把name中的其他字符串去掉；然后在sprintf； 如果特殊字符比较有规律的，建议使用sscanf，如果是不规律的，就不好弄了。只能从文件上下工夫。

user: user-3
content: name="'张三"； 这个字符串怎么会有“'呢？

user: user-0
content: sql执行肯定报错，打错字了
user-0 提问: printf函数问题

回复:
user: user-1
content: 加 flush。 不加的话，是否显示没保障，显示也正常，不显示也正常。

user: user-2
content: xCode是Object-c的编程软件吧； printf需要加上'\n'才能输出，因为标准输出是行缓冲；在标准的C里面还没有遇到你这种情况，还是使用NSLog吧

user: user-3
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0];
user-0 提问: 大学党求教一个C语言处理数据的问题

回复:
user: user-1
content: 再供参考：#include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.

user: user-1
content: 仅供参考：//NAME: essaie bla bla //DIMENSION: 8 //DATA //1  14  15 //2  11  10 //3  6   4 //4  7   13 //5  9   21 //6  19  3 //7  1   5 //8  8   8 //EOF // // 文本文件中可能还含有其他内容，但是需要用到的内容即以上  //比如data.txt: //NAME: essaie bla bla //其它内容 //DIMENSION: 8 //其它内容 //DATA //其它内容 //1  14  15 //其它内容 //2  11  10 //其它内容 //3  6   4 //其它内容 //4  7   13 //其它内容 //5  9   21 //其它内容 //6  19  3 //其它内容 //7  1   5 //其它内容 //8  8   8 //其它内容 //EOF  // 目标是要获取NAME后字串，DIMENSION后数值，以及DATA以下的数值 // 其中NAME就是随便个字句，DIMENSION是城市数量，DATA以下是城市编号，X坐标，Y坐标 // 所有的这些将赋值给一个事先定义好的结构 #include <stdio.h> #include <string.h> #define MAXCPL   80   //每行最大字符数 #define MAXCITY  100  //每组数据中DATA最多项数，DIMENSION的最大值 #define MAXNAMEL 32   //NAME最大长度 struct S {     char NAME[MAXNAMEL+1];     int  DIMENSION;     struct D {         int NO;         int X;         int Y;     } DATA[MAXCITY]; } s; FILE *f; int st,n,i; char ln[MAXCPL]; int main() {     f=fopen("data.txt","r");     if (NULL==f) {         printf("Can not open file data.txt!\n");         return 1;     }     st=0;     n=0;     while (1) {         if (NULL==fgets(ln,MAXCPL,f)) break;         if (st==0) {             if (1==sscanf(ln,"NAME: %31[^\n]",s.NAME)) st=1;         } else if (st==1) {             if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;         } else if (st==2) {             if (0==strcmp(ln,"DATA\n")) st=3;         } else if (st==3) {             if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {                 n++;                 if (n>=MAXCITY || n>=s.DIMENSION) break;             }         }     }     fclose(f);     printf("s.NAME=[%s]\n",s.NAME);     printf("s.DIMENSION=%d\n",s.DIMENSION);     for (i=0;i<n;i++) {         printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);     }     return 0; } //s.NAME=[essaie bla bla] //s.DIMENSION=8 //s.DATA[0].NO,X,Y=1,14,15 //s.DATA[1].NO,X,Y=2,11,10 //s.DATA[2].NO,X,Y=3,6,4 //s.DATA[3].NO,X,Y=4,7,13 //s.DATA[4].NO,X,Y=5,9,21 //s.DATA[5].NO,X,Y=6,19,3 //s.DATA[6].NO,X,Y=7,1,5 //s.DATA[7].NO,X,Y=8,8,8

user: user-2
content: fgetc，读到关键字符，然后开始放入一个定义好的缓存里。直到读到结束符，停止读取

user: user-3
content: 一个一个的字符地读，判断一下是不是开始时的字符，是就开始读，直到发现结束时的字符。
user-0 提问: C语言初学者提问：请问从哪里能了解所有C语言的函数

回复:
user: user-1
content: 外事不决问谷歌，房事不决问百度

user: user-0
content: 还没装linux系统，用的是Mac，谢大神

user: user-2
content: Linux下可以通过man看库函数或系统函数的说明。比如想看strncpy，可以直接在终端bash输入man strncpy，就可以了。

user: user-3
content: Windows: MSDN98  MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix,  MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl Run-Time Routines by Category This chapter lists and describes Microsoft run-time library routines by category. For reference convenience, some routines are listed in more than one category. Multibyte-character routines and wide-character routines are grouped with single-byte – character counterparts, where they exist.  The main categories of Microsoft run-time library routines are:  Argument access Floating-point support  Buffer manipulation Input and output  Byte classification Internationalization  Character classification Memory allocation  Data conversion Process and environment control  Debug Searching and sorting  Directory control String manipulation  Error handling System calls  Exception handling Time management  File handling       Linux:man命令或网站http://www.cplusplus.com/reference/clibrary/

user: user-0
content: 我就是在学完了基础以后不知道干啥，了解清楚然后用一用，谢大神回答

user: user-4
content: 引用 1 楼 jack960330 的回复:这个没有书可以百分百了解，除非你查阅c语音标准函数列表，网上有。。。还有一些参考书会有，书店有卖  但这也是了解个大概，最好的办法是自己把这些函数用上

user: user-4
content: 这个没有书可以百分百了解，除非你查阅c语音标准函数列表，网上有。。。还有一些参考书会有，书店有卖
user-0 提问: 大二c语言小白求助，关于用链表实现插入

回复:
user: user-1
content: 函数声明建议在main函数外～

user: user-2
content: 1： typedef struct {     elemtype data;     /*struct*/ node *next; }node;  2: 改为 initiate(&p) create(&p, a)
user-0 提问: 学完C基础，不知怎样做了，求指点迷津

回复:
user: user-1
content: 1. C语言还没怎么学好，就去忙着学起他，等你毕业了，你什么都是只知道皮毛，什么都不能胜任。我不是说C语言有多好，建议你专一一种语言（不一定是C）；然后其他了解皮毛；  2. 不建议你选择自己不喜欢的东西，然后硬着头皮去做，这样对自己对未来都没好处。

user: user-2
content: 对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  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-3
content: 参看：http://bbs.csdn.net/topics/390966354/

user: user-4
content: 还有淘宝上有很多学习视频

user: user-4
content: 我觉得你拿别人的例子来敲，学习。

user: user-5
content: 赵老师还是讲的比较详细的，但是一般人耐不住寂寞。 因为学到的东西不知道有什么用，开始迷惘了。  程序分支很多，但是很重要的： C 和数据结构，这两个必须过关！ 赵老师所说语言编程规范，没办法，如果你是深受《谭浩强的C》毒害，必须重修编程规范。 个人觉得  英文很关键！！！  快速上手玩东西： c - 单片机，淘宝有的买，也就200/300就有套件玩了。 linux c - 树莓派  淘宝有的买，300大洋左右可以玩了。  不买树莓派，你就装个虚拟机吧。 c++    c++builder,上手非常快的一个UI框架 C#   .net  这个也是拖控件一流。 java-Android，成本不高，一部普通国产手机就可以玩。 c++-MFC  苦逼的UI框架，封装的烂的透底，不知道为什么现在还没挂掉。  有钱的话，报个培训班，若有一线编程经验的老师，可以开阔你的眼界。 建议认真把大学所有基础课学好，出来工作回报一定是丰厚的！ 现在社会很浮躁，你若不浮躁，沉下心来学东西，一般前（钱）途无限美好！

user: user-6
content: 学完C语言基础，还只能是入门C语言；基础还需要加强复习和学习； 个人建议： 1.复习之前学习时记得笔记，总结学习到的知识，并将书本上的练习进行重做或者看一下之前写的是否可以再优化一下，复杂一下；这个优化包括，代码可读性，代码健壮性，容错性，代码性能方面等等，都建议分析一下，温故而知新；还有一个重点，是之前的练习不会做，做的不好的，现在可以继续做一做，都保质保量的做好它。 2. 走出课本，去看一些C语言的其他书籍，并加强自己的动手能力：不停练习和“抄袭”，编译运行，然后总结归纳； 3. 做一些稍微复杂的程序，锻炼自己的编程能力； 4. 继续深入学习C语言，前面都是基础，不论是在编译，调试方面都总结了一些基本能力；接下来继续深入学习新的知识，比如文件操作，链表，二叉树，系统函数（socket编程，文件操作，进程，线程等等）等等；这些的学习会比较复杂，但是没有前面的基础，这些学起来会很吃力。所以基础一定要打牢； 5. 不停的写和调试，不断的总结经验； 6. 大学里可能还开其他的科目，比如数据结构，操作系统，编译原理等等，建议你不要放弃，因为这些和编程是息息相关的； C语言没有近5年的编写过程，不能完全的理解C语言和自如运用C语言； 所以，如果你想一直从事C语言开发，将来想靠它找工作和实现自己的价值，你要做的还很多；如果不感兴趣，或者感觉乏味，建议你早点脱离苦海，转行做其他的（非编程）；  不建议： 1. C语言还没怎么学好，就去忙着学起他，等你毕业了，你什么都是只知道皮毛，什么都不能胜任。我不是说C语言有多好，建议你专一一种语言（不一定是C）；然后其他了解皮毛；  2. 不建议你选择自己不喜欢的东西，然后硬着头皮去做，这样对自己对未来都没好处。

user: user-7
content: 如果涉及网络编程，可能还需要学一些网络基础知识。 也可以自己找一家软件公司去实习，即使不要工资，也能学到很多实际的东西。

user: user-8
content: 汇编  数据结构  操作系统原理   算法  这些都是基础的不能再基础的了。

user: user-9
content: 学c++吧，基本学什么这两个都是基础。

user: user-10
content: 引用 8 楼 u010165006 的回复:巩固C，或者先学C++。  把饼做厚，或者先把饼摊大一点。

user: user-10
content: 巩固C，或者先学C++。

user: user-10
content: 参考书： 《深入理解C指针》 《C语言点滴》 《C陷阱与缺陷》 《C专家编程》 《C语言课程设计案例精编》 C语言程序开发范例宝典 C语言经典编程282例

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

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

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

回复:
user: user-1
content: 你分配的大小是12个元素，下标有效范围是0~11，for (int i = 1; i <= 12; i++) 当i为12时已经越界，未定义行为

user: user-2
content: 按照13 分配内存，计算出结果是10

user: user-2
content: 代码手打实测  int* a =（int *） calloc(12, sizeof(int));  bool* visit = （bool*）calloc(12, sizeof(bool)); 这里需要类型转换  #include <stdbool.h> 头文件未知 windows库文件种没有  主函数增加getchar() 函数，使控制台窗口停留  并没有输出结果，我也很诧异  真心不理解，你那一坨&&条件是什么，反正没有输出任何数据

user: user-3
content: 越界后的行为是未定义的，你这次正常运行，可能下次就会挂。。。。。。和编译器无关

user: user-4
content: 有越界访问 0~12应该分配13个单元

user: user-5
content: 其实电脑开机后物理内存的每个字节都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。  判断是否越界访问，可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断，可将数组多声明一个元素，并设置数据读写断点在该多出元素对应的地址上。 #include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }
user-0 提问: 十六进制数转整数

回复:
user: user-1
content: 然后你还需要注意大小端的问题

user: user-1
content: C是值传递  x是函数的局部变量 你给x 赋值 毫无意义

user: user-0
content: 本来想用指针来写以为简单些，看来想法是错误的。

user: user-2
content: 不能这么转换  要用位运算

user: user-3
content: #include <stdio.h> typedef unsigned char u8; //8个十六进制数存在一个数组里 unsigned char Arry[8]= {0x00,0x00,0x00,0x03,0x0F,0x93,0x2E,0xBE}; //转换成一个unsigned long long型的整数中，a= 0x000000030F932EBE unsigned long long a; void HEXtoLongLongBE(unsigned char *byteArry,unsigned long long *x) {     u8 i;     unsigned char* p = (unsigned char*)x;      for ( i =0; i < 8; i++ ) {         *p = *byteArry;         byteArry++;         p++;     } } void HEXtoLongLongLE(unsigned char *byteArry,unsigned long long *x) {     u8 i;     unsigned char* p = (unsigned char*)x;      byteArry+=7;     for ( i =0; i < 8; i++ ) {         *p = *byteArry;         byteArry--;         p++;     } } int main() {     HEXtoLongLongBE(Arry,&a);     printf("0x%016llx\n",a);     HEXtoLongLongLE(Arry,&a);     printf("0x%016llx\n",a);     return 0; } //0xbe2e930f03000000 //0x000000030f932ebe //

user: user-4
content: unsigned long long x = *(unsigned long long *)Arry; 不过这样映射和存储格式相关，从你说的转换结果看如果是大端格式的机器可以直接这样，如果是小端格式的机器，例如x86/x64，可以： unsigned long long x =    (unsigned long long)Arry[0] << 56 |  (unsigned long long)Arry[1] << 48 |   (unsigned long long)Arry[2] << 40 |  (unsigned long long)Arry[3] << 32 |   (unsigned long long)Arry[4] << 24 |  (unsigned long long)Arry[5] << 16 |   (unsigned long long)Arry[6] << 8 |  Arry[7];

user: user-5
content: 可以用union  union CONVERT{ 	ULONGLONG a; 	BYTE Arry[8]; };  	CONVERT x; 	x.Arry[7] = 0x00; 	x.Arry[6] = 0x00; 	x.Arry[5] = 0x00; 	x.Arry[4] = 0x03; 	x.Arry[3] = 0x0f; 	x.Arry[2] = 0x93; 	x.Arry[1] = 0x2e; 	x.Arry[0] = 0xbe; 	ULONGLONG a = x.a;
user-0 提问: poj 1002 wrong answer  大家看看有什么问题，没找到

回复:
user: user-1
content: 在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。

user: user-2
content: int num[100000]; 看到这个定义，我就害怕； 你要做什么？必须定义这么大的数组呢？ 没怎么看明白楼主程序的需求或者要求什么，建议详细一些～

user: user-3
content: 开始时把变量定义好，在后边的程序中不能定义变量。 void quicksort(int [],int ,int ); int n;  scanf("%d",&n);  int i,j; for(i=0;i<n;i++)    { scanf("%s",s); int c=0; 这里面：int i,j;和int c=0;以及其他的变量定义放到scanf("%d",&n);之前。
user-0 提问: C语言读取txt任意一个数

回复:
user: user-1
content: 可以先把每行读入一个字符串，然后用sscanf 读取每行里的各个实数

user: user-2
content: 思想是这样的，以‘\n'换行作为判断一行的条件 ，逐个查找匹配，读第三行第二个数。 就是读取第二个换行'\n' ， 然后找第一个空格和第二个空格之间的字符 ，空格是’ ‘  例如 if（ch == ’\n' ）

user: user-3
content: 每一行数据个数都是确定的吗？

user: user-4
content: 使用fscanf读取，一次读一行。无法指定读取某个数据，只能将前几个先读出来，然后在读取你想要的数据。 建议使用fscanf读取，一次读取一行，然后匹配到自己想要的数据。

user: user-5
content: 第几行，fgets 第几个数，参考下面：#include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.
user-0 提问: 求助!链表的选择排序中当最小值对应的结点是最后一个时候该怎么处理？？

回复:
user: user-0
content: 谢谢啦，我已经解决啦，虽然你说的这种方法可行，但我们老师是想要不改变数据的方式做的。我之前的代码写的有点BUG，链了后面的没链前面所以找不到一些节点

user: user-1
content: 除了修改节点的地址之外，还可以只修改节点的数据，而不改变链表的指向顺序。即链表框架不变，节点间的位置不变，而是交换节点里的data。
user-0 提问: 求教此问题如何解决？根据书上的步骤做的就是有很多错误

回复:
user: user-0
content: 引用 2 楼 幻夢之葉的回复:1： 你用到的ElemType，那你就需要include 定义它的头文件  2： 不要include .c 和 cpp文件，虽然不一定有错，但是它们属于编译单元和实现的代码，你include算个什么含义 按书上步骤做的，初学什么都不懂

user: user-1
content: 1： 你用到的ElemType，那你就需要include 定义它的头文件  2： 不要include .c 和 cpp文件，虽然不一定有错，但是它们属于编译单元和实现的代码，你include算个什么含义

user: user-0
content: 附上完整截图
user-0 提问: 请教一下关于binary bomb的问题

回复:
user: user-1
content: 这是一个非常初级的代码，就是把输入的串参数和临时构造的一个串"Wow! Brazilbis big."（不包括引号）比较，不一致则执行explode_bomb代码，估计是显示你没成功破解之类的。

user: user-2
content: 0x08048cfd <+21>:	call   0x8048870 <malloc@plt>  就是调用glibc里的malloc接口申请内存

user: user-2
content: 0x08048cfd <+21>:	call   0x8048870 <malloc@plt>

user: user-3
content: IDAPro6.6_part1 IDAPro6.6_part2   可以直接看汇编的C语言代码

user: user-4
content: VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。
user-0 提问: C语言用指针数组对字符串集合进行快速排序

回复:
user: user-1
content: 引用 2 楼 bcai_yuan 的回复:编译器就是visual C++6.0，alloc是分配存储单元，返回一个指向n个连续字符存储单元的指针。 #include<stdio.h>  #define ALLOCSIZE 10000  static char allocbuf[ALLOCSIZE]; static char *allocp = allocbuf;  /*返回指向n个字符的指针*/ char *alloc(int n) { 	if((allocbuf + ALLOCSIZE) - allocp >= n){  //有足够的空闲空间 		allocp += n; 		return allocp - n;    //分配前的指针p 	}else                    //空闲空间不够 		return 0; }  qsort应该没问题吧，这个是快速排序 哦，我没有这个编译器，另外，你的qsort和Linux下的qsort参数还是有区别的

user: user-0
content: 编译器就是visual C++6.0，alloc是分配存储单元，返回一个指向n个连续字符存储单元的指针。 #include<stdio.h>  #define ALLOCSIZE 10000  static char allocbuf[ALLOCSIZE]; static char *allocp = allocbuf;  /*返回指向n个字符的指针*/ char *alloc(int n) { 	if((allocbuf + ALLOCSIZE) - allocp >= n){  //有足够的空闲空间 		allocp += n; 		return allocp - n;    //分配前的指针p 	}else                    //空闲空间不够 		return 0; }  qsort应该没问题吧，这个是快速排序

user: user-1
content: 你的编译器是那个？alloc没用过，在Linux没有该函数，windows下也没怎么见过这个函数；qsort的参数也有问题，没见过这么调用的。
user-0 提问: 请问十进制数怎么转换成十六进制数？

回复:
user: user-0
content: 引用 1 楼 cfjtaishan 的回复:#include <stdio.h> #include <string.h>  int main(void) {     double FloatNumber= 13800100500;     unsigned long long num = FloatNumber;     unsigned char disp[8];     int i;       printf("%lf\n", FloatNumber);     printf("%llu\n", num);      memcpy(disp, &num, 8);     for (i = 8; i >= 0; i--)         printf("%02X ", disp[i]);     putchar(10);      return 0; } 在内存中，不论是十进制还是16进制，甚至是8进制等等，都是二进制的形式存储的，即以010101这种方式存储的。之所以有10进制或者16进制，而是输出到终端的形式不同而已； 在内存中，浮点数和无符号整数存储的方式不同，因为浮点数有小数。所以，可以先把浮点数的整数部分给一个变量（这个变量需要能够存放这个浮点数的整数部分），然后在memcpy至一个8字节缓存里，最后以16进制形式输出。  解答得非常清楚，多谢！

user: user-1

user: user-2
content: #include <stdio.h> #include <string.h>  int main(void) {     double FloatNumber= 13800100500;     unsigned long long num = FloatNumber;     unsigned char disp[8];     int i;       printf("%lf\n", FloatNumber);     printf("%llu\n", num);      memcpy(disp, &num, 8);     for (i = 8; i >= 0; i--)         printf("%02X ", disp[i]);     putchar(10);      return 0; } 在内存中，不论是十进制还是16进制，甚至是8进制等等，都是二进制的形式存储的，即以010101这种方式存储的。之所以有10进制或者16进制，而是输出到终端的形式不同而已； 在内存中，浮点数和无符号整数存储的方式不同，因为浮点数有小数。所以，可以先把浮点数的整数部分给一个变量（这个变量需要能够存放这个浮点数的整数部分），然后在memcpy至一个8字节缓存里，最后以16进制形式输出。
user-0 提问: windows下如何用C语言写有界面的程序

回复:
user: user-1
content: 装个黑苹果，美滋滋。。

user: user-2
content: 字数被限制了，晕~~ 不需要头文件，也不需要其他什么库~~~ 字数被限制了，LZ留邮箱吧，或者发我邮件yhchen@gc.omron.com，我把附件发给你。 我也是新手刚学不久，不足之处请见谅

user: user-3
content: 引用 1 楼 u010165006 的回复:虚拟机装Mac。。与时俱进+1

user: user-4
content: 看看，c怎么写界面，

user: user-5
content: 仅供参考：#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(200, 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-600, r.top+r.bottom/2-100,"最短画图程序",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 (0==RegisterClass(&wc)) return 1;      if (NULL==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: user-6
content: 虚拟机装Mac。。与时俱进
user-0 提问: 输出的i和j分别是多少？为什么会这样？

回复:
user: user-1
content: 目测你这个 程序编译不过。有static i=0这种定义变量的方式吗?可能我书读的少

user: user-2
content: 不过，没有输出，你的输入计划放在哪？是这吗？ #define _CRT_SECURE_NO_WARNINGS 1  #include <stdio.h>  static int j = 0; void fun1() {     static int i = 0;     i++;     printf("i = %d\n", i); }  void fun2() {     int j = 0;     j++;     printf("j = %d\n", j); } int main() {     int k = 0;     for(k = 0; k<10; k++)     {         fun1();         fun2();     }     return 0; } 这个题目主要是要学到两点：静态变量和局部变量的作用域和生命周期； 静态变量的作用域是：（又分为全局静态变量和局部静态变量），全局静态变量是从定义处开始，后面的函数都是可见和使用的。局部静态变量是在函数了定义的静态变量。它的作用域是该函数内；但是不论是全局或者局部的静态变量，生命周期都是整个程序； 局部变量的作用域只是函数体内，生命周期会随着函数的调用而创建，随着函数的结束而结束； 另，当局部变量和全局变量同名时，局部变量屏蔽全局变量。

user: user-2
content: 不过，没有输出，你的输入计划放在哪？是这吗？   引用 1 楼 hxl199109 的回复:目测你这个 程序编译不过。有static i=0这种定义变量的方式吗?可能我书读的少 可以编译通过，编译器默认会把这两个静态变量定义成int
user-0 提问: 用链式队列 做二叉树的层次遍历为啥不成功啊  麻烦大神们~~

回复:
user: user-1
content: int Out_LQueue(LQueue *q,BiTNode *bt) {     QNode *p;     if(!(Empty_LQueue(q)))     {         printf("队列空");         return 0;     }     else     {         p = q->front->next;         q->front->next = p->next;         *bt = p->data2;         printf("%c ", p->data2.data);         //free(p);   /*这个地方不能释放，因为你还需要它*/         if(q->rear->next == NULL)             q->rear = q->front;     }      return 1; } 你的数据结构看着是，多个二叉树链到一个队列里。队列里每个节点都是一个二叉树的根。不知道这个是否从你的需求出发定义的数据结构。
user-0 提问: 空格='\0'吗？

回复:
user: user-1
content: 不等；根据ASCII码， 可以看到它们的值：空格死40，'\0'是0；

user: user-2
content: 空格字符 指键盘上长长的那个键产生的字符，16进制0x20, 十进制32。而空字符是在字符串结尾系统自动加上的‘\0’，以让系统识别出一个字符串的结尾。如字符串“china”实际上在系统内是以“china\0”储存的

user: user-3
content: 不等于，但是这里涉及到scanf的用法，输入的字符串不能包含空格，否则，会输入结束，但是你用gets()时，带空格不会输入结束。C语言的书上面有说明。
user-0 提问: c#连接Access数据库查询功能，具体如下

回复:
user: user-1
content: C#

user: user-2
content: 我这里有个现成在用的，但是要30万字，无法给你 你有邮箱吗？ 请联系我yhchen@gc.omron.com

user: user-3
content: 问题没描述清楚，button1和textbox1对应哪个控件？
user-0 提问: C语言逻辑运算符的短路,优先级和结合性谁更优先?

回复:
user: user-1
content: &&：左为错，不进行右边的语句； ||：左为对，不进行右边的语句。

user: user-2
content: 没在编辑器上面运行过程序， 但是按你的说法，解释如下：||逻辑运算符当左为1时，不对右边的进行判断。 &&：当左边为1，才对右边进行判断。