Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C语言文件问题。。急。。

回复:
user: user-1
content: while (fscanf(fin, "%*[ \t\n,]%d", &ind) != EOF  && fscanf(fout, "%*[ \t\n,]%d", &outd) != EOF)

user: user-1
content: while (fscanf(fin, "%d%*[ \t\n,]", &ind) != EOF  && fscanf(fout, "%d%*[ \t\n,]", &outd) != EOF)

user: user-1
content: while (fscanf(fin, "%d,", &ind) != EOF  && fscanf(fout, "%d,", &outd) != EOF) 应改为 while (fscanf(fin, "%d%*[ \t,]", &ind) != EOF  && fscanf(fout, "%d%*[ \t,]", &outd) != EOF)

user: user-0
content: 引用 3 楼 mewiteor 的回复:你的新OUT.txt里的数是整数还是浮点数？数据类型错误会使用scanf无法正常读取数据. 引用 2 楼 zhao4zhong1 的回复:不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 while (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： while (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。  数值是一个一个对应的，两个文件中的数值是一样多的，都是1437个，不会出现一个没了另一个还有

user: user-0
content: 引用 1 楼 ilikehigame 的回复:单步调试看看具体每次读到的值是多少数值是一个一个对应的，两个文件中的数值是一样多的，都是1437个

user: user-0
content: 引用 3 楼 mewiteor 的回复:你的新OUT.txt里的数是整数还是浮点数？数据类型错误会使用scanf无法正常读取数据. 都是整形的数据

user: user-2
content: yuji = -0.0000000004314*ind*ind*ind  -0.000002358*ind*ind + 0.7857*ind + 13.17; 的精度问题

user: user-3
content: 你的新OUT.txt里的数是整数还是浮点数？数据类型错误会使用scanf无法正常读取数据.

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

user: user-4
content: 单步调试看看具体每次读到的值是多少
user-0 提问: 程序跑一段时间崩溃，出现严重问题,求高手!!!

回复:
user: user-1
content: 可能是内存泄露了，你程序里面有木有递归调用之类的函数。或者你可否代码贴出来看看。因为程序能运行起来应该是没有问题，而运行了之后再出现问题的话应该是内存不足照成之类的

user: user-2
content: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令

user: user-3
content: 请问楼主如何解决了

user: user-4
content: 客服端跟服务器端进行socket通信时，服务器异常断开，而客户端并不知道服务器已经断开，继续向服务器发送数据，从而引发了SIGPIPE信号，内核响应这个信号，强行终止了程序； signal(SIGPIPE, SIG_IGN);

user: user-5
content: 基本上就是内存泄露或是指针访问了无效地址。注意视频流获取后要及时释放。调试可以缩小范围，比如只保留视频流活取，其余的功能都去掉。然后逐次增加功能，直到出现问题。
user-0 提问: 新人求助  const声明的指针为什么没赋值也报错

回复:
user: user-1
content: 在标准中，这样确实不允许，gcc请开启严格模式

user: user-1
content: 引用 3 楼 我是冰的回复:int * a可以cast成const int * 反过来不行 朋友 我纠正一下，const_cast<T>只能脱去变量的const,即你可以把const int *转为int*

user: user-0
content: 引用 1 楼 user-4 的回复:编译器做类型检查，const 指针不能赋值给非const指针，这个是语法规定，报错是应当的。至于你到底有没有修改内存，那是你自己的事。谢谢谢谢，那么这样就行了对吗？ #include"stdio.h" #include"stdbool.h" bool s(const int a[],int n,int key) { 	for(const int *i=a;i<a+n;i++) 	{ 		if(*i==key) 		{ 			return 1; 		} 	} 	return 0; } int main(void) { 	int a[5],b; 	for(int i=0;i<5;i++) 	{ 		a[i]=i; 	} 	scanf("%d",&b); 	printf("%d",s(a,5,b)); }

user: user-2
content: int * a可以cast成const int * 反过来不行

user: user-3
content: 楼上说的对。问题就出在a赋值给i。出现类型错误，但是在不同的编译器下编译结果不一样，换句话linux下gcc编译只是一个警告。 	int i;	     for(i=0;i<n;i++)     {         if(*(a+i)==key) 这样写也挺好的，谁都能看懂。

user: user-4
content: 编译器做类型检查，const 指针不能赋值给非const指针，这个是语法规定，报错是应当的。至于你到底有没有修改内存，那是你自己的事。
user-0 提问: 问个#if预编译的问题，谢谢

回复:
user: user-0
content: 最后发现是编译器的问题，谢谢各位

user: user-1
content: $ cpp a.c  # 1 "a.c" # 1 "<built-in>" # 1 "<command-line>" # 1 "a.c"        unsigned char i; i = (14/8+1);  这是预处理后的结果

user: user-2
content: 我是在linux下用C 写的，使用gcc编译，得出结果是2。我感觉你问题应该出在 除号“/”上，C语言内 / 表示取整，不是到你那个编译器是怎么定义的。

user: user-3
content: vs 测试 2
user-0 提问: 基础问题：为什么extern声明二位数组时，列大小必须给出？

回复:
user: user-1
content: 多维数组最好每一维都给出具体值  此外，其实压根不需要多维数组，就一维数组，自己计算偏移，还简单实用点

user: user-2
content: 不要纠结，行列都给出

user: user-3
content: extern char a[][]; 如果不给出第一维的大小，  a[1][1] = 1;  当访问元素a[1][1]时编译器无法计算地址的.

user: user-0
content: 引用 5 楼 mymtom 的回复:extern char a[][]; 如果不给出第一维的大小，  a[1][1] = 1;  当访问元素a[1][1]时编译器无法计算地址的. 哦，明白了。你的意思是编译器不需要知道数组的大小，但必须能找到某个数组元素的位置。 一维数组的情况下，程序员写个a[3]，编译器根据首地址+3个单位就能找到a[3] 二维数组，程序员写个a[2][6]，编译器需要移动2*第一维大小+6就能找到，如果不写第一维大小，编译器就不知道乘于几，也就找不到a[2][6]。 多谢。谢谢大家。

user: user-4
content: 因为数组只有一维，二维是一维的递归定义，除了一维的那维（行）可以省略，其余必须给出

user: user-5
content: 如果连列维度都不想给出，那直接用二级指针即可。只不过编译器也就无法在编译期提供更多的数组维度的检查了。

user: user-6
content: 一般来说根据数组的元素个数加上列的信息就可以计算出行的数目。

user: user-2
content: 每个维数，最好都给出
user-0 提问: 热烈庆祝六一国际儿童节！散分＋广告

回复:
user: user-1
content: 现在分还有木有？急需啊

user: user-2

user: user-2

user: user-2

user: user-3
content: 我也来抢个沙发。。。

user: user-4
content: .....哦哈哈，，，赶上一波。。。。

user: user-5
content: .....哈哈哈

user: user-0

user: user-6
content: 祝赵老湿61快乐

user: user-7
content: 接分，祝六一节快乐！

user: user-8
content: 支持分享技术成果。

user: user-9
content: 顶赵老师

user: user-10
content: 接分~

user: user-11
content: 实力接分

user: user-12
content: 接分

user: user-13
content: 赵老湿 没事多散分

user: user-14
content: 谢主隆恩！！！！

user: user-15

user: user-16
content: 多给点分吧。。真心的。我要常顶你啊

user: user-17
content: 顶赵老师,哈
user-0 提问: C语言多文件的编写求教

回复:
user: user-0
content: 谢谢！！！！！！

user: user-1
content: 是一全局变量

user: user-2
content: result是一全局变量，它的生存期是整个进程。 第一次： sum(arr,5);后result=19; 第二次 sum(arr,5);首先，result=0;被清零，相当于重新来过。所以最后result=19;

user: user-3
content: http://blog.csdn.net/freshgamer/article/details/5564283
user-0 提问: c语言读取txt数据一个一个读

回复:
user: user-1
content: so easy:  int main(void) { 	FILE *fi = fopen("IND.txt", "r"); 	FILE *fo = fopen("wucha.txt", "w"); 	int d; 	char c; 	int r; 	while (1) 	{ 		r = fscanf(fi, "%d%c", &d, &c); 		if (-1 == r) break; 		fprintf(fo, "%lg,", 2 * d + 13.76); 	} 	fclose(fi); 	fclose(fo); 	return 0; }

user: user-2
content: #include<stdio.h> int main() { 	int n; 	FILE *fin=fopen("IND.txt","r"),*fout=fopen("wucha.txt","w"); 	if(fin&&fout) 	{ 		while(fscanf(fin,"%d,",&n)!=EOF) 		{ 			double wucha=2*n+13.76; 			fprintf(fout,"%f,",wucha); 		} 	} 	if(fin)fclose(fin); 	if(fout)fclose(fout); 	return 0; }
user-0 提问: C语言中scanf

回复:
user: user-1
content: 同意1L。。

user: user-2
content: __int64 ％I64d 或 long long int %lld

user: user-3
content: 不指定宽度%1d，scanf会把连续的数字当做一个整数，一次性读入，而int放不下17位长的整数，于是出现错误。
user-0 提问: 为什么数组分配的内存空间不连续？？

回复:
user: user-0
content: 哦~~~之前试验的代码没改过来，，，，蒙了，，谢谢！

user: user-1
content: 嘎嘎……指向数组的指针……每次递进……增加一个数组的大小……嘎嘎……
user-0 提问: C语言读取TXT文件，忽略文件空格，把内容写入数组中应该怎么实现？

回复:
user: user-1
content: 为什么我用struct写了一个读取txt表格数据的程序运行时输出了许多不应该出现的数据呀？

user: user-2
content: 弄好了

user: user-2
content: 引用 5 楼 zhangxiangDavaid 的回复:引用 4 楼 miss46799 的回复:回复3楼，太赞！ 能帮我看看我这个么？运行出来都是0，但p的值是对的，感觉像D矩阵写入不对，不知道哪里错了请各位指导一下 txt文件如下0.5 -0.5 0.0 1.0 0.0 0.0 -0.5 -0.5 0.0 0.0 1.0 0.0 0.0 0.5 0.0 0.0 0.0 1.0 6个数一行，每个数之间都有一个空格 [code=c#include "stdafx.h" #include <stdio.h> #define MAXDATA 1000 double D[MAXDATA][6];// char ln[80];//用于存取读出数据的数组 FILE *f; int i,n; char *p;  int main(){ 	f=fopen("D:\\todel\\opengl\\ConsoleApplication3\\Debug\\1.txt","r");//打开txt文件 	if(NULL==f){ 		printf("Can not open file 1.txt!\n");//判断是否可以打开文件 		return 1; 	} 	i=0; 	while (1){ 		if (NULL==fgets(ln,80,f)) break; 		 p = ln ;  	   sscanf(p,"%f%f%f%f%f",&D[i][0],&D[i][1],&D[i][2],&D[i][3],&D[i][4],&D[i][5]); 		i++; 	 	} 	 	n=i; 	for (i=0;i<n;i++){ 			printf("%f %f %f %f %f %f\n",D[i][0],D[i][1],D[i][2],D[i][3],D[i][4]),&D[i][5]; 		} 	       fclose(f); 		return 0; 	}][/code]

user: user-3
content: 引用 4 楼 miss46799 的回复:回复3楼，太赞！

user: user-0
content: 回复3楼，太赞！

user: user-3
content: 这样可好：  #include <stdio.h> #include <stdlib.h> #define SIZE_view 50 struct view_info { 	int id; 	char name[20]; 	int code; 	char shortname[20]; 	char LName[100]; }views[SIZE_view]; FILE *f; char buf[256]; char *p; int i, n; int main(void) { 	if (NULL == (f = fopen("1.txt", "r"))) 	{ 		fprintf(stderr, "Can not open file : 1.txt"); 		return 1; 	} 	i = n = 0; 	while (1) 	{ 		if (n == SIZE_view) break; 		if (NULL == fgets(buf, 256, f)) break; 		if ('\n' == buf[0]) continue;     //空行继续 		p = buf; 		sscanf(p, "%d%s%d%s%s", &views[n].id, views[n].name, &views[n].code, views[n].shortname, views[n].LName); 		n++; 	} 	do 	{ 		printf("%d %s %d %s %s\n", views[i].id, views[i].name, views[i].code, views[i].shortname, views[i].LName); 		i++; 	} while (i < n); 	fclose(f); 	return 0; }

user: user-0
content: buf是什么啊，我还不知道怎么用

user: user-4
content: 你一行行读到自己的buf中，然后从buf中过滤空格解析到你的结构体
user-0 提问: 如何让堆排序稳定

回复:
user: user-0
content: 引用 3 楼 fly_dragon_fly 的回复:以大顶为例, heapify从三个中选出一个最大值, 如果有两个值相等, 你选择那一个, 就是用到这索引的时候 嗯，的确可以实现

user: user-0
content: 引用 1 楼 mymtom 的回复:排序的两个重要动作就是比较和移动 所谓稳定的排序指的是 对于键值比较的结果为相等（==）的元素A和B，如果排序前A在B前，排序后A保持在B前面。 增加索引的意思就是增加键值（比如排序前的位置），当其他键值相同的时候，进行位置的比较。  谢谢版主，我理解了

user: user-1
content: 以大顶为例, heapify从三个中选出一个最大值, 如果有两个值相等, 你选择那一个, 就是用到这索引的时候

user: user-2
content: 可以自己建立一个保存开始时候元素的相对位置信息，如果排序后发现两个相等的元素的相对位置发生了变化，就换回来，这样就稳定了

user: user-3
content: 排序的两个重要动作就是比较和移动 所谓稳定的排序指的是 对于键值比较的结果为相等（==）的元素A和B，如果排序前A在B前，排序后A保持在B前面。 增加索引的意思就是增加键值（比如排序前的位置），当其他键值相同的时候，进行位置的比较。

user: user-4
content: 引用 1 楼 mymtom 的回复:排序的两个重要动作就是比较和移动 所谓稳定的排序指的是 对于键值比较的结果为相等（==）的元素A和B，如果排序前A在B前，排序后A保持在B前面。 增加索引的意思就是增加键值（比如排序前的位置），当其他键值相同的时候，进行位置的比较。 版主威武!
user-0 提问: 编译出错帮忙看下

回复:
user: user-1
content: 写全路径试试

user: user-1
content: 好吧，这么奇葩，俺也没有招了

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

user: user-3
content: 没用过  装2008以及以上，   vc6好多不支持，太老了

user: user-0
content: 引用 3 楼 hnwyllmm 的回复:头文件的路径配置了吗  配置了，我安装的是SDK 日期是2003年2月的,13个文件包，include文件夹53兆，lib文件夹154兆，请问下是VC6支持的最新SDK么？

user: user-1
content: 头文件的路径配置了吗

user: user-0
content: 引用 1 楼 hnwyllmm 的回复:缺少头文件..... 加了#include <commctrl.h>和#include <prsht.h>依旧报错

user: user-1
content: 缺少头文件.....
user-0 提问: 新手求指导

回复:
user: user-1
content: 引用 6 楼 zhangxiangDavaid 的回复:[quote=引用 5 楼 u013685226 的回复:] getchar（）目的在于刷新缓冲区，以免下一次读入时，读入了缓冲区中剩余的\n 常见的用法还有 ： while（getchar（））； getchar刷新缓冲区？这个比喻不对。 刷新缓冲区用fflush(stdin);[/quote] 没错，准确的说是读取缓存区中剩余的字符。和刷新还是有区别的。

user: user-2
content: 引用 5 楼 u013685226 的回复:getchar（）目的在于刷新缓冲区，以免下一次读入时，读入了缓冲区中剩余的\n 常见的用法还有 ： while（getchar（））； getchar刷新缓冲区？这个比喻不对。 刷新缓冲区用fflush(stdin);

user: user-1
content: getchar（）目的在于刷新缓冲区，以免下一次读入时，读入了缓冲区中剩余的\n 常见的用法还有 ： while（getchar（））；

user: user-2
content: 楼上正解

user: user-3
content: 我们所有的键盘输入都会放在一个buffer中（stdin流）。scanf()和getchar()都从这个buffer中取得数据。getchar()是为了读出 \n 然后，将buffer的指针指向下一个键盘输入。scanf（）函数会在读取非%c的时候一般会忽略空白字符。所以，如果本例中，如果scanf()读入的是%d的话。。就不需要getchar()。 我就随便一说。。你别当真

user: user-4
content: 不是删除，而是“吃掉”。免得换行符作为后序读入

user: user-2
content: 这里的getcahr()是读入回车符，以免影响下一次的scanf
user-0 提问: c/c++怎样定义int a[10个G]的全局变量才能使用

回复:
user: user-1
content: 另外， 这么大的数据放内存没意义，可以考虑放硬盘，如果哪部分读取频率高，把那一部分提到内存

user: user-1
content: 这么大的内存，只有动态分配，否则你栈哪够这么多，而且动态分配也不一定能分配得到这么大

user: user-2
content: 引用 10 楼 zhao4zhong1 的回复:[quote=引用 7 楼 zhao4zhong1 的回复:] 用文件读写模拟内存读写，参考_fseeki64函数（Windows），fseeko64（Linux）。 如果你硬盘空间够的话， int a[10个T];也毫无违和感！（刚学会这套词，可找到地方捅一捅啦！）[/quote]  要看楼主要的是真正的数组，还是一个类似缓冲区的东西。 如果要的是一个真正的数组，那么，首要的问题是进程的虚拟地址空间是否足够。指针的加、减、++、--、地址比较运算以及解引用倒还可以通过底层转换来对用户透明，但是，最最要命和核心的问题是，请考虑一下，如果要输出每个元素的（线性）地址，底层该怎么办。 举个例子，对于32位x86体系+WINDOWS，考虑到OS内核占用每个任务（进程）的一半虚拟地址空间，故理论上的数组长度为2^32个char。 如果要的仅仅是一个类似于缓冲区的东西，对元素地址的连续性没有要求，多大内存都不是问题。

user: user-3
content: 引用 12 楼 Zof_A 的回复:[quote=引用 7 楼 zhao4zhong1 的回复:] 用文件读写模拟内存读写，参考_fseeki64函数（Windows），fseeko64（Linux）。 就是只要求应用全局整型10G数组，只在内存应用，其它软硬件，编译器什么都可以调整，都用什么、还需要调配什么，求推荐[/quote]不要挣扎了。谁也满足不了你

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:用文件读写模拟内存读写，参考_fseeki64函数（Windows），fseeko64（Linux）。 就是只要求应用全局整型10G数组，只在内存应用，其它软硬件，编译器什么都可以调整，都用什么、还需要调配什么，求推荐

user: user-4
content: 引用 10 楼 zhao4zhong1 的回复:[quote=引用 7 楼 zhao4zhong1 的回复:] 用文件读写模拟内存读写，参考_fseeki64函数（Windows），fseeko64（Linux）。 如果你硬盘空间够的话， int a[10个T];也毫无违和感！（刚学会这套词，可找到地方捅一捅啦！）[/quote] 莫非你LOL的时候也爱用赵信？

user: user-5
content: 为什么有这样的需求，可以提下具体需求场景...

user: user-6
content: 这么大的空间，已经不是编译器的事情了，而是你自己的事情了。

user: user-3
content: 等进程空间破了4G再说吧

user: user-7
content: 目前应该不太可能，编译器不允许这么大，就算允许，系统也没地方能运行

user: user-8
content: 引用 7 楼 zhao4zhong1 的回复:用文件读写模拟内存读写，参考_fseeki64函数（Windows），fseeko64（Linux）。 如果你硬盘空间够的话， int a[10个T];也毫无违和感！（刚学会这套词，可找到地方捅一捅啦！）

user: user-9
content: 表示RAM放不下

user: user-10
content: 你有这么大的物理内存？

user: user-8
content: 用文件读写模拟内存读写，参考_fseeki64函数（Windows），fseeko64（Linux）。

user: user-11
content: 10G*8,内存就要80G,还不如放数据库里

user: user-12
content: 10G=2^31 那至少是64位，并且是static才有可能编译通过吧
user-0 提问: C语言如何调用DOS命令

回复:
user: user-1
content: 包含stdlib.h库 使用system（）。 格式为system（”命令行”）； 比如system（“pause”）；

user: user-2
content: system("F:\\xxxxx.bat"); //可以这样试一下，把那段代码放到一个批处理文件里面
user-0 提问: 如何将无符号char数组转为相应字符串

回复:
user: user-0
content: 学习了，非常感谢！ 引用 3 楼 bjym1987 的回复: unsigned char c1 = (0x00F0 & src[0]) > 1;  //第二位 unsigned char c2 = 0x000F & src[0]; //第一位 其它依次类推，然后拼起来就好了

user: user-0
content: 谢谢一休哥~~ 引用 4 楼 zhangxiangDavaid 的回复: int main(void) { 	//“2132658709ba” 	unsigned char src[6] = { 0x12, 0x32, 0x56, 0x78, 0x90, 0xab }; 	char s[13] = { 0 }; 	int i; 	char c1, c2; 	for (i = 0; i < 6; i++) 	{ 		c1 = src[i] & 0xFu; 		c2 = (src[i] >> 4) & 0xFu; 		sprintf(s + i * 2, "%x%x", c1, c2); 	} 	printf(s); 	return 0; } //2132658709ba

user: user-0
content: 相当感谢赵4老师的再次帮助~~学习啦，哈哈！ 引用 5 楼 zhao4zhong1 的回复:[quote=引用 2 楼 lion7beckham 的回复:] 赞一个，太感谢啦！~~ 此外再请教下， 如果要转成“2121658709ba”，有没有比较方便的方法？ [quote=引用 1 楼 bjym1987 的回复:]  	unsigned char src[6] = {0x12, 0x32,0x56,0x78,0x90,0xab}; 	char a[12]; 	sprintf(a, "%0x%0x%0x%0x%0x%0x", src[0],src[1],src[2],src[3],src[4],src[5]); [/quote] #include <stdio.h> unsigned char src[6] = {0x12,0x32,0x56,0x78,0x90,0xab}; unsigned char v; char a[13]; int i; int main() {     for (i=0;i<6;i++) {         v=src[i]%16;         a[i*2]=v+((v>=10)?'a'-10:'0');         v=src[i]/16;         a[i*2+1]=v+((v>=10)?'a'-10:'0');     }     a[i*2]=0;     printf("[%s]\n",a);     return 0; } //[2123658709ba] // [/quote]

user: user-0
content: 赞一个，太感谢啦！~~ 此外再请教下， 如果要转成“2121658709ba”，有没有比较方便的方法？ 引用 1 楼 bjym1987 的回复: 	unsigned char src[6] = {0x12, 0x32,0x56,0x78,0x90,0xab}; 	char a[12]; 	sprintf(a, "%0x%0x%0x%0x%0x%0x", src[0],src[1],src[2],src[3],src[4],src[5]);

user: user-1
content: unsigned char src[6] = {0x12, 0x32,0x56,0x78,0x90,0xab}; 	char a[12]; 	sprintf(a, "%0x%0x%0x%0x%0x%0x", src[0],src[1],src[2],src[3],src[4],src[5]);

user: user-2
content: 引用 2 楼 lion7beckham 的回复:赞一个，太感谢啦！~~ 此外再请教下， 如果要转成“2121658709ba”，有没有比较方便的方法？ [quote=引用 1 楼 bjym1987 的回复:]  	unsigned char src[6] = {0x12, 0x32,0x56,0x78,0x90,0xab}; 	char a[12]; 	sprintf(a, "%0x%0x%0x%0x%0x%0x", src[0],src[1],src[2],src[3],src[4],src[5]); [/quote] #include <stdio.h> unsigned char src[6] = {0x12,0x32,0x56,0x78,0x90,0xab}; unsigned char v; char a[13]; int i; int main() {     for (i=0;i<6;i++) {         v=src[i]%16;         a[i*2]=v+((v>=10)?'a'-10:'0');         v=src[i]/16;         a[i*2+1]=v+((v>=10)?'a'-10:'0');     }     a[i*2]=0;     printf("[%s]\n",a);     return 0; } //[2123658709ba] //

user: user-3
content: int main(void) { 	//“2132658709ba” 	unsigned char src[6] = { 0x12, 0x32, 0x56, 0x78, 0x90, 0xab }; 	char s[13] = { 0 }; 	int i; 	char c1, c2; 	for (i = 0; i < 6; i++) 	{ 		c1 = src[i] & 0xFu; 		c2 = (src[i] >> 4) & 0xFu; 		sprintf(s + i * 2, "%x%x", c1, c2); 	} 	printf(s); 	return 0; } //2132658709ba

user: user-1
content: unsigned char c1 = (0x00F0 & src[0]) > 1;  //第二位 unsigned char c2 = 0x000F & src[0]; //第一位 其它依次类推，然后拼起来就好了
user-0 提问: 是不是我的电脑注定用不了Visual c++ 6.0?!

回复:
user: user-1
content: 总是发现Path环境变量被某些软件安装时错误修改。比如带空格的目录名未加引号、带汉字的目录引起目录查找混乱等问题，严重影响系统查找可执行文件和dll。 编译此源代码，生成PathShortener.exe，然后在cmd窗口里面运行PathShortener.exe>path.txt，打开path.txt，手动将其内容拷贝粘贴覆盖修改‘我的电脑、属性、高级、环境变量、系统变量、Path、编辑、变量值’即可纠正设置错误的Path http://download.csdn.net/detail/zhao4zhong1/2652343

user: user-2
content: 要不装个win98试试看

user: user-3
content: 把这个批处理文件运行一下，配置下环境

user: user-4
content: 可以考虑虚拟机

user: user-5
content: 出错的原因可能是没有找到cl.exe  打开vc界面 点击VC“TOOLS（工具）”—>“Option（选择）” —>“Directories（目录）”重新设置“ Excutable Fils  如果你是按照初始路径安装vc6.0的，路径应为： executatble files: C:\Program Files\Microsoft Visual Studio\VC98\BIN  看一下上面的路径是否正确, CL.exe就存在于上面的路径中。

user: user-5
content: 建议楼主用英文版的VC6，换个路径重新安装，全路径名不要包含中文。如果是做新项目就用VS。

user: user-6
content: msdn.microsoft.com  一大把开发工具可以下载  就是你们这种人懂一点皮毛就以为开发Windows应用了

user: user-7
content: vc不好,vs好

user: user-8
content: vs2012 好，现在回头看vc6的界面这不好看  同问，机器的操作系统是啥？

user: user-9
content: 不知楼主什么操作系统?

user: user-10
content: 你确定代码没问题吗/

user: user-11
content: 已经不建议用VC6.0了，现在C++增了很多新东西了，而且编译器最新已经有VS2013了（需要WIN8系统），WIN7可以用VS2012，建议楼主直接用VS了

user: user-12
content: 换版本重装呗...

user: user-13
content: 不建议使用vc6，建议vs2005或2008版本
user-0 提问: 求大神 为什么我这个链表编译器报错

回复:
user: user-1
content: 大致看下来逻辑没有错误，应该把错误也贴出的。  那个int i 的地方，把int i放到最前面，放前面。有些编译器是对c语言是要先声明的。   ----------------- 个人理解。

user: user-2
content: 你定义struct cl了吗？ 还有提问编译器报错的时候，希望你把编译器报错的内容贴出来，这样方便找错误。
user-0 提问: 用C或C++读取文件中send之后的数据，求指导

回复:
user: user-1
content: 正常的读文件，稍微加下判断就好了

user: user-0
content: 不知道程序怎么编写

user: user-2
content: 你这有啥问题么。不就是显示了send之后的？

user: user-3
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: %32[^\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-4
content: MFC  CStdioFile类 CStdioFile  f1,f2; f1.Open("文本的路径"，CFile：：ModeRead)； f2.Open("写入文本路径"，CFile::ModeCreate|CFile::ModeWrite:); CString line；  if(f1.ReadString(line)) {    if(line.Find("send:")!=-1)    {      f2.WriteString(line.Left(line.Getlength()-5));     }  }
user-0 提问: c语言新手求助~

回复:
user: user-1
content: 分享下曾经做过的类似题目,希望可以对楼主学习有些帮助. 字符串2插入到字符串1中 http://www.cnblogs.com/xingyunblog/p/3657691.html 字符串插入以及字符串结束标志的考察 http://www.cnblogs.com/xingyunblog/p/3951053.html

user: user-1
content: #include <stdio.h> #include <stdlib.h> void SwapString(char *source ,char *des); int main(void) {     char *str1="Japan";     char *str2="Chine";      printf("%c\n",*(str1+1));//a     printf("%c\n",*(str2+1));//h     // *(str1+1)=*(str2+1);//这句会导致程序崩溃.     SwapString(str1,str2);     return 0; } void SwapString(char *source, char *des) {     printf("%c\n",*(source+0));// J     printf("%c\n",*(source+1));// a     printf("%c\n",*(source+2));// p     printf("%c\n",*(source+3));// a     printf("%c\n",*(source+4));// n      printf("----------------------\n");     printf("%c\n",*(des+0));// C     printf("%c\n",*(des+1));// h     printf("%c\n",*(des+2));// i     printf("%c\n",*(des+3));// n     printf("%c\n",*(des+4));// e     printf("%c\n",*(des+5));// s     printf("%c\n",*(des+6));// e      printf("----------------------\n");      printf("%s\n",source+0);//Japan     printf("%s\n",source+1);//apan     printf("%s\n",source+2);//pan     printf("%s\n",source+3);//an     printf("%s\n",source+4);//n      printf("----------------------\n");      int i=0;     char temp;     while(temp!='\0')     {         temp=*(source+i);         *(source+i)=*(des+i);         *(des+i)=temp;         i++;     } }  我是这么理解的.  类似题目

user: user-2
content: char *str1="Japan"; char *str2="Chinese";  这种写法表明str1和str2是常量字符串，不可写入 修改如下：  #include<stdio.h> #include<string.h> void SwapString(char *source, char *des); int main(void) { 	//char *str1 = "Japan"; 	char str1[10] = "Japan"; 	//char *str2 = "Chinese"; 	char str2[10] = "Chinese"; 	SwapString(str1, str2, 10); 	printf("%s\n", str1); 	printf("%s\n", str2); 	return 0; } void SwapString(char *source, char *des, int n) { 	int i = 0; 	char temp; 	while (i < n) 	{ 		temp = *(source + i); 		*(source + i) = *(des + i);//这个步骤的调试为什么会报错呢？错在哪里了呢？求解答，3q 		*(des + i) = temp; 		i++; 	} }
user-0 提问: 在c/c++中如何理解，函数也是种数据类型

回复:
user: user-1
content: 在c/c++中，函数就不是一种数据类型，它属于二等公民。如果是一等公民就不用搞出函数指针了，c++也不用添加Lambd概念了。

user: user-2
content: 说函数是一种数据类型的，你得去找他才能知道原委。

user: user-3
content: 冯·诺依曼体系。 仅供参考：//仅对VC6 #include <stdio.h> void fun1() {     int f1=1;     printf("fun1\n");     printf("fun1\n"); } void fun2() {     int f2=2;     printf("fun2\n"); } void fun3() { } void main() { #ifdef _DEBUG     printf("sizeof(fun1)==%d\n",*(int *)((int)fun2+1)-*(int *)((int)fun1+1));     printf("sizeof(fun2)==%d\n",*(int *)((int)fun3+1)-*(int *)((int)fun2+1)); //sizeof(fun1)==59 //sizeof(fun2)==43 #else     printf("sizeof(fun1)==%d\n",(int)fun2-(int)fun1);     printf("sizeof(fun2)==%d\n",(int)fun3-(int)fun2); //sizeof(fun1)==32 //sizeof(fun2)==16 #endif }

user: user-4
content: 简化版： 对于C来说，“类型”意味着可以声明该类型的变量，变量有地址，有内容，可以做操作。 比如int是种类型，可以声明该类型变量a，如int a = 0; a有地址：&a； a有内容：0； 可以对a做操作：a + 1；  函数类似，不过诚如LS某位所讲，函数不是first class的，所以某些概念需用指针来表达： typedef void (*func)(); 可以近似认为func为函数类型 可以声明变量： void foo() {} func a = foo; a有地址：&a； a有内容：foo； a可操作：a();；  个人认为“类型”最重要的特征就是“有操作”（某种意义上来说就是OO中的method）。

user: user-3
content: 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
user-0 提问: 帮我看看这个程序怎么改啊，初学者

回复:
user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:只会对着屏幕拍，不会拷贝粘贴代码到帖子上 或者 只愿意对着屏幕拍（比较轻松），不愿意拷贝粘贴代码到帖子上（比较繁琐）  我劝楼主还是趁早改行，知难而退吧。我是学机械的在校大学生，只是开了课，然而并没有什么卵用，呵呵哒

user: user-1
content: 引用 5 楼 zhao4zhong1 的回复:只会对着屏幕拍，不会拷贝粘贴代码到帖子上 或者 只愿意对着屏幕拍（比较轻松），不愿意拷贝粘贴代码到帖子上（比较繁琐）  我劝楼主还是趁早改行，知难而退吧。 赵老师一针见血

user: user-2
content: 只会对着屏幕拍，不会拷贝粘贴代码到帖子上 或者 只愿意对着屏幕拍（比较轻松），不愿意拷贝粘贴代码到帖子上（比较繁琐）  我劝楼主还是趁早改行，知难而退吧。

user: user-3
content: 修改如下：  #include <stdio.h> //index用于统计字符串t在字符串s中出现的次数 int index(char *s, char *t) { 	if (NULL == s || NULL == t) return 0; 	int count = 0; 	int i, j; 	for (i = 0; s[i]; i++) 	{ 		for (j = 0; s[i + j] && t[j]; j++) 		{ 			if (s[i + j] != t[j]) break; 		} 		if (0 == t[j]) count++; 	} 	return count; } int main(void) { 	int count = 0; 	char f[100], g[50]; 	printf("Please input:\n"); 	scanf("%s%s", f, g); 	count = index(f, g); 	printf("%d\n", count); 	return 0; } //abczxdefzxhizx //zx //3

user: user-0
content: 引用 1 楼 syrchina 的回复:图片根本看不清，你还是贴代码吧看楼下

user: user-0
content: 图好像看不太清

user: user-4
content: 图片根本看不清，你还是贴代码吧
user-0 提问: 大神围观

回复:
user: user-1
content: 换成double的时候 你scanf里面的参数是否做相应修改呢

user: user-2
content: 换成double后，scanf后接%lf，而不是%f，如果只是把float改成double，后面的代码没有相应改变，肯定会出错
user-0 提问: C语言一个诡异的问题，百思不得其解

回复:
user: user-1
content: 引用 2 楼 FightForProgrammer 的回复:第一种方式，当b==0输出    0.00 第二种方式，当b==0输出    -0.00 当然，a要是正数才有负号输出

user: user-1
content: 第一种方式，当b==0输出    0.00 第二种方式，当b==0输出    -0.00

user: user-0
content: 简单总结一下我的问题，应该就是：  if(b == 0)   printf("%.2f", 0.00) else   printf("%.2f", -b/2/a) 和   printf("%.2f", -b/2/a)  这两段代码在什么情况下会不一样? 其中a,b都是double

user: user-2
content: #include <stdio.h> #include <string.h>  int main(int argc, char *argv[]) {     int    i, n;     char   s[sizeof(double)];     double a = -1.0;     double b = +1.0;      n = sizeof(s);      while (a != 0.0) {         a = a / 2.0;     }     printf("a=%.2g\n", a);     memcpy(s, &a, sizeof(s));     for (i = 0; i < n; i++) {         printf("%02x ", (unsigned char)s[i]);     }     printf("\n");      while (b != 0.0) {         b = b / 2.0;     }     printf("b=%.2g\n", b);     memcpy(s, &b, sizeof(s));     for (i = 0; i < n; i++) {         printf("%02x ", (unsigned char)s[i]);     }     printf("\n");      return 0; }  /* 输出: a=0 00 00 00 00 00 00 00 80 b=0 00 00 00 00 00 00 00 00 */

user: user-3
content: 楼主的这个问题的原因在于浮点数(float/double)的表示方法，按照IEEE754的标准，零是区分正零和负零的(-0.0, +0.0)

user: user-3
content: 计算机不会骗人，只会按照程序的意图去执行的。 楼主的这个问题的原因在于浮点数(float/double)的表示方法，按照IEEE754的标准，零是正零和负零的(-0.0, +0.0) 题目的意思要求 b==0的时候要按正零输出，这就是你所说的"结果就会有一个测试点通不过" 看下面的程序你就会明白了。  #include <stdio.h> #include <string.h>  int main(int argc, char *argv[]) {     int    i, n;     char   s[sizeof(double)];     double a = -1.0;     double b = +1.0;      n = sizeof(s);      while (a != 0.0) {         a = a / 2.0;     }     printf("a=%.2f\n", a);     memcpy(s, &a, sizeof(s));     for (i = 0; i < n; i++) {         printf("%02x ", (unsigned char)s[i]);     }     printf("\n");      while (b != 0.0) {         b = b / 2.0;     }     printf("b=%.2f\n", b);     memcpy(s, &b, sizeof(s));     for (i = 0; i < n; i++) {         printf("%02x ", (unsigned char)s[i]);     }     printf("\n");      return 0; }  /* 输出: a=-0.00 00 00 00 00 00 00 00 80  b=0.00 00 00 00 00 00 00 00 00  */  a=-0.00 00 00 00 00 00 00 00 80  b=0.00 00 00 00 00 00 00 00 00

user: user-2
content: 试试%.2g

user: user-4
content: double数值 不能跟0直接比较吧 一般不是用 |a-0| < 0.0000001 这种方式么？
user-0 提问: pNodeAccount=(p_node_account)malloc(sizeof(node_account));求帮忙

回复:
user: user-1
content: 你 把错误翻译一下就知道了

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

回复:
user: user-1
content: LZ你仔细看一看Input和Sample Input，哪有n呀,直接用scanf(..)!=EOF判断结尾

user: user-2
content: 根据你的代码，猜测意图：判断字符串s中的字符是否都在字符串t中。 如果真的是这样，你的算法有些问题。 可以这样：  int cmp(void *pa, void *pb) { 	return *(char*)pa - *(char*)pb; } int main() { 	char t[100001], s[100001]; 	int n, i, j; 	scanf("%d", &n); 	while (n--) { 		int k = 0; 		scanf("%s", s); 		scanf("%s", t); 		int m = strlen(s), n = strlen(t); 		qsort(s, m, 1, cmp); 		qsort(t, n, 1, cmp);  		for (i = 0, j = 0; i<m, j<n; i++, j++) { 			if (s[i] == t[j]) 			{ 				k++; 				j--;    //加一句 			} 			else 				i--; 		} 		if (k == m) 			printf("Yes"); 		else 			printf("No"); 	} 	return 0; }  //以上效率不高，只是为了保留你的for循环

user: user-3
content: t,s太大，移到外面作全局变量

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

user: user-5
content: acm1936是干什么的？
user-0 提问: 如何能显示字符个数

回复:
user: user-1
content: 你都算出来了，逗我们玩的吧

user: user-2
content: char str[ ][40] strlen(str[0]) + strlen(str[1]);

user: user-3
content: 引用 3 楼 bjym1987 的回复:你都算出来了，逗我们玩的吧 人家是菜鸟小辈。

user: user-4

user: user-5
content: sizeof(str[0])/sizeof(char)

user: user-6
content: 理解循环：   for(int i=0;i<2;i++)  //find the lengths of  string     while(str[i][count[i]])   //count[i]充当二维数组的下标      count[i]++;  count[0]记录了字符串 "Today is fine day" 的长度 count[1]记录了字符串"Yes you are say that again"的长度

user: user-3
content: printf("%d",count[0]+count[1]);
user-0 提问: Linux Socket  recv  send  重复多次接受发送

回复:
user: user-1
content: linux中的select里的坑不小心就掉进去了，比如第一参数的含义 nfds is the highest-numbered file descriptor in any of the three sets, plus 1 即最大fd加1 linux里有效率更高的poll或者epoll，为何不用呢？

user: user-0
content: 查到了，如果活动不是发生在服务器套接字上，那肯定是客户的活动。如果接收到的活动是close，就说明客户已经离开。 需要在服务器端代码的第58行加上 ioctl(fd,FIONREAD,&nread); if(nread == 0) {     close(fd);     FD_CLR(FD,&readfds); } else { //原服务器代码58-64行 }

user: user-2
content: 为什么会多"发送"两次产生的原因简单，但要说明这个过程有点复杂。 要知道 stdin  stdout   stderr 的 fd 是 0 1 2 而代码中有  for( fd = 0; fd < maxfd; fd++)   ... .... ...  楼主搞错了几处 1) 搞错 select 的参数 select(FD_SETSIZE, &testfds, NULL, NULL, NULL); 这个 FD_SETSIZE 应该是 maxfd， 这个参数是说明在  FD_SET 中的 fd 的范围， 而不是个数  2) 搞错 fd  应该有一个记录所有 fd 的数组...每当有新的 fd ,就把fd 记录到数组中, fd 个数++ 如 fds[MAX_NUM]; fd_count;              // fd 个数统计  select(maxfd, &testfds, NULL, NULL, NULL); for( i = 0; i < fd_count; ++i)  {  if(FD_ISSET(fds[i],&testfds)) {    ...  楼主再查查资料吧

user: user-3
content: 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://bbs.csdn.net/topics/380167545
user-0 提问: 输入10个数，找出其中绝对值最小的数，将它和最后一个数交换，然后输出这10个数     怎么不输出交换后的数组

回复:
user: user-1
content: 引用 2 楼 zhao4zhong1 的回复:m=a[n]; a[n]=a[8]; a[8]=m;  “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？赵老师，引个题外话，http://bbs.csdn.net/topics/391044546 以前在c/c++论坛经常看到你，转了java之后，现在有回c/c++板块。诚心请教java转mfc问题！

user: user-2
content: for(i=1;i<10;i++) { if(abs(a[i])<min) min=abs(a[i]); n=i; }  你这个if后面的两句代码是不是要{}呢

user: user-3
content: 楼上看错了吧，程序没有差1的问题，是if(abs(a[i])<min)后面没有加{},导致n每次都被赋值，或者改为 if(abs(a[i])<min) min=abs(a[i])，n=i;

user: user-4
content: 为什么都不好好贴代码呢？  #include<stdio.h> #include<stdlib.h> int main() { 	int a[10]; 	int min, i, m, n; 	for (i = 0; i < 10; i++) scanf("%d", &a[i]); 	min = abs(a[0]); 	n = 0; 	for (i = 1; i < 10; i++) 	{ 		if (abs(a[i]) < min) 		{ 			min = abs(a[i]); 			n = i; 		} 	} 	m = a[n]; 	a[n] = a[9]; 	a[9] = m; 	for (i = 0; i < 10; i++) printf(" %d", a[i]); 	return 0; } // 1 2 3 0 4 5 6 7 8 9 // 1 2 3 9 4 5 6 7 8 0

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

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

回复:
user: user-1
content: 哈哈 java或者c#过来的吧

user: user-2
content: C语言里没有private修饰符。  建议楼主找找C11看看。  学C语言，要从基本词汇（关键字）和语法学起

user: user-3
content: 应该是从java或者c#转来的？ java和c#都是纯面向对象的，定义的全局变量本身也是类的一个成员变量，所以可以用private c语言不是面向对象的，c程序不是一个类，也没有private关键字。

user: user-4
content: c语言关键字中没有private，将其去掉就可以了

user: user-5
content: 嗯，C语言中不存在所谓的private关键字，C++有，但是不是用在这里的。 全局变量的什么方法就是在全局命名空间声明一个变量，简单的说就是在所有函数的外部声明。 除此之外，如果想声明作用域文整个文件而连接性为内部的变量，那么需要在文件内的所有函数外声明，并且使用关键字static。 拥有内部连接的全局变量的意思就是：在这个文件内部的所有部分，这个变量都可见（排除被局部变量覆盖的情况），而在这个文件的外部，这个变量是不存在的。 也就是说如果你打算为一个组织在一个文件中的模块定义一个全局的变量，而不希望与其他文件中重名的变量冲突，那么在定义需要使用关键字static。

user: user-6
content: lz应该花点时间看下C语言语法基础

user: user-7
content: 去掉private就对了

user: user-8
content: private 是 C++ 类成员的属性，全局变量显然是不属于类的。  引用 楼主 BugAndError 的回复:#include<stdio.h> private int index;  int main(){     index = 0;     printf("%d",index); }    为什么上面的代码不能编译通过，C语言的全局变量难道不是这么申明的吗？求大神赐教！

user: user-9
content: # define private

user: user-10
content: 不严格意义的讲 C语言有32个关键字 auto 局部变量（自动储存） break无条件退出程序最内层循环 case   switch语句中选择项 char单字节整型数据 const定义不可更改的常量值 continue中断本次循环，并转向下一次循环 default switch语句中的默认选择项 do  用于构成do.....while循环语句 double定义双精度浮点型数据 else构成if.....else选择程序结构 enum枚举 extern在其它程序模块中说明了全局变量 float定义单精度浮点型数据 for构成for循环语句 goto构成goto转移结构 if构成if....else选择结构 int基本整型数据 long长整型数据 registerCPU内部寄存的变量 return用于返回函数的返回值 short短整型数据 signed有符号数 sizoef计算表达式或数据类型的占用字节数 static定义静态变量 struct定义结构类型数据 switch构成switch选择结构 typedef重新定义数据类型 union联合类型数据 unsigned定义无符号数据 void定义无类型数据 volatile该变量在程序中执行中可被隐含地改变 while用于构成do...while或while循环结构  并没有你写的private  C++中有这个关键字  这种调试环境 会报语法错误 你可以仔细看看报的什么错误 在决定你是否要问这个问题。

user: user-11
content: private 是什么意思
user-0 提问: 结构化程序设计方法

回复:
user: user-1
content: 一般使用牛顿法逼近。。

user: user-2
content: https://www.baidu.com/s?wd=%E7%AB%96%E5%BC%8F%E6%B1%82%E5%B9%B3%E6%96%B9%E6%A0%B9&rsv_spt=1&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=20041099_adr&rsv_enter=1&rsv_n=2&rsv_sug3=1

user: user-3
content: 可以先找到一种“算法”，比如： 假定x ^ 2 = n; 然后不断尝试x，比如： n = 5 x = 1 小了，不对 x = 2 小了，不对 x = 3 大了，不对 x = 2.5 大了，不对 …… 如此反复，找到“精度”允许范围内最接近的值。  找到根号n的数学展开式，用语言实现。

user: user-2
content: 搜“竖式求平方根”
user-0 提问: 如何用C标准库画图

回复:
user: user-1
content: C标准肯定不会有绘图的东西额，它不属于语言的范畴。它属于窗口系统的范畴。一般都是基于x11的开发库。如果想用c写界面，推荐使用GTK

user: user-2
content: 你画图只是想生成一张图片还是希望在程序中显示到屏幕上 如果是显示到屏幕上在windows下用GDI就可以绘制了，高效高级一点的可以directX或者OpenGL 如果只要生成图片，那么你可以按每个点一个int数字的方式组织号内存，用jpg库，png库编码，或者直接保存bmp格式

user: user-3
content: http://www.easyx.cn

user: user-4
content: c语音里画图函数很多，比如circle,line。

user: user-5
content: c标准库里没有图形库  你要在显示器上画图，就必须经过系统---因为是系统把硬件结合起来的  所以我们不会把图形库嵌到c标准里  因为c是跨平台的  你嵌个图形库 不就只能在特定的系统上跑了吗？

user: user-6
content: Non-ANSI/ISO Libraries

user: user-7
content: 推荐使用opencv或opengl 简单的图片也可以自己按着图片的文件格式自己用c语言写，如bmp格式的，就是工作量太大

user: user-8
content: C标准库中没有图形函数  图形都跟环境有关

user: user-3
content: 仅供参考：#pragma comment(lib,"user32") #pragma comment(lib,"gdi32") #include <stdio.h> #include <conio.h> #include <stdlib.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;     RECT   rect,wsize;     HBRUSH hbrush;     int    y,x,d,g;      system("color F0");     system("cls");     HideTheCursor();     hwnd  =GetConsoleWindow();     GetClientRect(hwnd,&wsize);     hdc   =GetDC(hwnd);     hfont =CreateFont(48,0,0,0,0,0,0,0,0,0,0,0,0,"华文楷体");     hbrush=CreateSolidBrush((COLORREF)0x00FFFFFF);     SelectObject(hdc,hfont);     y=10;x=30;d=4;g=3;     while (1) {         rect.left=x;         rect.top=y;         rect.right=x+300+d+1;         rect.bottom=y+60+d+1;         FillRect(hdc, &rect, hbrush);         TextOut(hdc,x+10,y+10,"地球人都知道！",14);         MoveToEx(hdc,x+5,y+5,NULL);         LineTo(hdc,x+300,y+  5);         LineTo(hdc,x+300,y+ 60);         LineTo(hdc,x+  5,y+ 60);         LineTo(hdc,x+  5,y+  5);         Sleep(15);         if (_kbhit()) {getch();break;}         switch (g) {         case 0:if (y>                d) y-=d; else g=2;if (x>                d) x-=d; else g=1;break;// ↖         case 1:if (y>                d) y-=d; else g=3;if (x<wsize.right-300-d) x+=d; else g=0;break;// ↗         case 2:if (y<wsize.bottom-60-d) y+=d; else g=0;if (x>                d) x-=d; else g=3;break;// ↙         case 3:if (y<wsize.bottom-60-d) y+=d; else g=1;if (x<wsize.right-300-d) x+=d; else g=2;break;// ↘         }     }     DeleteObject(hbrush);     DeleteObject(hfont);     ReleaseDC(hwnd,hdc);     system("color 07");     system("cls");     ShowTheCursor();     return 0; }
user-0 提问: 请教一个关于 c语言 pow() 函数 的问题

回复:
user: user-1
content: To set a breakpoint when a variable changes value   From the Edit menu, click Breakpoints.   Click the Data tab of the Breakpoints dialog box.   In the Expression text box, type the name of the variable.   Click OK to set the breakpoint.

user: user-1
content: pow Calculates x raised to the power of y.  double pow( double x, double y );  Routine Required Header Compatibility  pow <math.h> ANSI, Win 95, Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  pow returns the value of xy. No error message is printed on overflow or underflow.   Values of x and y Return Value of pow   x < > 0 and y = 0.0 1  x = 0.0 and y = 0.0 1  x = 0.0 and y < 0 INF    Parameters  x  Base  y  Exponent  Remarks  The pow function computes x raised to the power of y.   pow does not recognize integral floating-point values greater than 264, such as 1.0E100.  Example  /* POW.C  *  */  #include <math.h> #include <stdio.h>  void main( void ) {    double x = 2.0, y = 3.0, z;     z = pow( x, y );    printf( "%.1f to the power of %.1f is %.1f\n", x, y, z ); }   Output  2.0 to the power of 3.0 is 8.0   Floating-Point Support Routines  See Also   exp, log, sqrt
user-0 提问: 关于一个C语言指针操作的问题

回复:
user: user-1
content: 你这是linux内核代码中很出名的两个宏。 #define offset_of(type, member) \     ((unsigned long)(&(((type*)0)->member))) 求结构体某个成员的地址偏移量，如 struct a {     int x;     char c[2];     float y; }; 字节对齐的话，成员y在结构体的字节偏移量是8. 第二个 #define container_of(ptr, type, member) \     ((type*)((unsigned long)(ptr) - offset_of(type, member))) offset_of已经解释过了 struct node {     node *prev;     node *next; }; struct B {     int x;     node n;     int y; }; B b; 该宏的目的是，已知b.n的地址，求b的地址。（ptr就是&b.n， type是 B，member是n ）

user: user-2
content: member的偏移，从0开始算

user: user-3
content: 类似这样:char *P = NULL. 有时候你可以这样写 char *p = 0,但是,最好是这样写char *p = (char*)0; ---- 就是说题目中的0 相当于NULL,只不过怕你的系统中没有定义,所以强制转化了而已.
user-0 提问: 用动态规划法解决0/1背包问题，运行过程中一直崩，求解救！

回复:
user: user-1
content: 引用 1 楼 zhao4zhong1 的回复:崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。  TMD 这种水法有意思么。

user: user-2
content: 代码排版一下，j-w[i]，没判断j<w[i]的情况

user: user-3
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。
user-0 提问: 请教大神一个问题，socket服务器端 不同的端口向客户端发送数据 如何实现这个呢？

回复:
user: user-1
content: 三年过去啦，你有答案了吗，可以分享下吗

user: user-2
content: 如果是TCP   方式一.  客户端与服务端建立多个链接。如                 client                    / \                  /     \  server: 80    81   不同链接对应不同端口   方式二 . 建立一个  网关服(链接服)  ---- gateway.这种方式比较常见 如  client <-----------------------> 80:gateway                                                     / \     \-------- n 个内部链接 ------与服务                                                   /     \              \         \                                          s1:80      s1:81    s2  ... sn

user: user-3
content: UDP 内容中包含加密后的下一个要使用的端口号 ？

user: user-4
content: tcp连接必须确定端口

user: user-0
content: 顶啊啊啊              啊 啊
user-0 提问: 求助：在for循环到第三个的时候数据输出异常

回复:
user: user-1
content: 调试就知道了。

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

回复:
user: user-1
content: -1的补码0xffffffff -1 + 1 == 0 0xffffffff + 0x1 == 0

user: user-2
content: 引用 5 楼 s332031515 的回复:[quote=引用 3 楼 s332031515 的回复:] [quote=引用 1 楼 adlay 的回复:] 这样正数和负数的加法可以用同一条指令，用同样的硬件电路来实现。 引用 1 楼 adlay 的回复:这样正数和负数的加法可以用同一条指令，用同样的硬件电路来实现。  嗯嗯，谢谢。那负数的补码和原来的负数已经不同了，为什么还可以计算呢 [/quote]  难道是负数的补码参与运算使用的加法，，负数的原码参与运算使用的减法，，由于计算结果相同，这个加法比减法简单，就硬性规定使用补码[/quote] 差不多吧，可以用补码表示负数来参与计算主要就是计算机的位数是有限的，而超出的位数会被舍弃

user: user-0
content: 引用 3 楼 s332031515 的回复:[quote=引用 1 楼 adlay 的回复:] 这样正数和负数的加法可以用同一条指令，用同样的硬件电路来实现。 引用 1 楼 adlay 的回复:这样正数和负数的加法可以用同一条指令，用同样的硬件电路来实现。  嗯嗯，谢谢。那负数的补码和原来的负数已经不同了，为什么还可以计算呢 [/quote]  难道是负数的补码参与运算使用的加法，，负数的原码参与运算使用的减法，，由于计算结果相同，这个加法比减法简单，就硬性规定使用补码

user: user-3
content: 负数是2补码 这样解释吧 一个数的负数为0-它本身 对于char来说0x100也是0 于是一个数的负数为0x100-它本身 又规定signed型一半是负数，一半是非负 所以0x7f表示127，0x81表示-127，两者和为0x100 特别的有0x80表示-128，它不具有正数形式 又因为2进制数加上它的1补码正好是0xff，在加一才是0x100 因此2进制数的负数是它的2补码 好处在于signed和unsigned的运算方式一致，除移位运算

user: user-0
content: 引用 1 楼 adlay 的回复:这样正数和负数的加法可以用同一条指令，用同样的硬件电路来实现。 引用 1 楼 adlay 的回复:这样正数和负数的加法可以用同一条指令，用同样的硬件电路来实现。  嗯嗯，谢谢。那负数的补码和原来的负数已经不同了，为什么还可以计算呢

user: user-0
content: 嗯嗯，谢谢。那负数的补码和原来的负数已经不同了，为什么还可以计算呢

user: user-2
content: 这样正数和负数的加法可以用同一条指令，用同样的硬件电路来实现。
user-0 提问: 负数的原码，反码，补码是否相等

回复:
user: user-1
content: 反码不怎么用，补码主要是为了加减法方便，如是a为正数，那么-a在二进中表示为2^x-a, 相加结果去掉溢出位，刚好为0

user: user-2
content: 负数的原码、反码和补码，从二进制上看，肯定不一样。 理解补码的存在性即可。
user-0 提问: 学生管理系统代码运行会关闭

回复:
user: user-1
content: 去学调试器。

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

user: user-3
content: if (strcmp(&str[i].name,&x)==0)  这个没问题吗？

user: user-0
content: 引用 3 楼 user-4 的回复:看堆栈设断点调试呗  看不太懂。。 int Find_(STU str[],int n)  //查找成绩 { 	char x; 	int i; 	printf("----------------请输入学生的姓名----------------\n"); 	printf("\t\t姓名："); 	scanf("\t\t%s",&x); 	for (i=0;i<n;i++) 	{ 		if (strcmp(&str[i].name,&x)==0) 		{ 			printf("\t\t学期：%d\n",str[i].term); 			printf("\t\t班级：%d\n",str[i].class1); 			printf("\t\t学号：%ld\n",str[i].num); 			printf("\t\t姓名：%s\n",str[i].name); 			printf("\t\t科目：%s\n",str[i].score.subject); 			printf("\t\t分数：%d\n",str[i].score.grade); 		} 	} 	return 0; } 比如这个我实在不知道是哪里导致文件关闭

user: user-4
content: 看堆栈设断点调试呗

user: user-0
content: 顶一下 麻烦帮个忙 谢谢

user: user-0
content: 知道有的功能还有错误 可是就是想知道一下为什么会关闭 谢谢
user-0 提问: 请问那个版本的linux默认gcc是4.1.2的？

回复:
user: user-1
content: 引用 4 楼 u012421456 的回复:不知楼主要干什么需要用到这个低版本，同楼上，自己编译安装吧 可参考——http://www.it165.net/os/html/201401/7117.html    make编译的时候一直报错：gnu/stubs-32.h: No such file or directory

user: user-1
content: make编译的时候报这种错gnu/stubs-32.h: No such file or directory

user: user-1
content: make编译的时候宝这种错

user: user-2
content: 楼主要编译tfs吗?

user: user-3
content: 基本新的系统都是最新的gcc,你试试老版本的linux系统吧、。；

user: user-4
content: 引用 3 楼 iyomumx 的回复:自己编译一个吧编译太慢

user: user-5
content: 为什么要用老的？

user: user-6
content: 编译器还是用新的吧,老的以后维护会更加困难?

user: user-7
content: 不知楼主要干什么需要用到这个低版本，同楼上，自己编译安装吧 可参考——http://www.it165.net/os/html/201401/7117.html

user: user-8
content: 自己编译一个吧

user: user-0
content: 引用 1 楼 user-9 的回复:这么旧的gcc，有个毛用？ 大神知道吗？

user: user-9
content: 这么旧的gcc，有个毛用？
user-0 提问: C语言的题目 新人求帮助 跪谢大神了TAT

回复:
user: user-1
content: 修改如下：  #include <stdio.h> #include <stdlib.h> typedef int datatype; typedef struct node { 	datatype data; 	struct node *next; }linknode, *linklist; //检查输入 int Check_Input(char *buf) { 	if (NULL == buf) return 0; 	int n = strlen(buf); 	int i; 	for (i = 0; i < n; i++) 		if (buf[i] < '0' || buf[i] > '9') 			return 0; 	return 1; } //建立链表(含头节点) linklist CreateList() { 	char buf[12]; 	linklist Head = (linklist)malloc(sizeof(linknode)); 	linklist tmp = Head; 	tmp->next = NULL; 	linklist loc; 	printf("请输入相应的数据（以0作为结束）如2 6 4 7 3 0\n"); 	int input = 0; 	do { 	begin: 		printf("input:"); 		scanf("%s", buf); 		if (0 == Check_Input(buf)){ 			printf("Input error!,input again\n"); 			goto begin; 		} 		sscanf(buf, "%d", &input); 		if (0 == input) break; 		//申请新节点 		loc = (linklist)malloc(sizeof(linknode)); 		loc->data = input; 		loc->next = NULL; 		//更新前一节点 		tmp->next = loc; 		tmp = loc; 	} while (true); 	return Head; } //寻找最优解 datatype Adjmax(linklist H) { 	linklist tmp = H->next; 	datatype maxTmp, max = 0; 	datatype result; 	while (tmp != NULL) { 		if (tmp->next != NULL) 			maxTmp = tmp->data + tmp->next->data; 		else 			maxTmp = tmp->data; 		if (maxTmp > max) { 			max = maxTmp; 			result = tmp->data; 		} 		tmp = tmp->next; 	} 	return result; } //释放链表 void FreeList(linklist H) { 	linklist midTmp, tmp = H; 	while (tmp != NULL) { 		midTmp = tmp->next; 		free(tmp); 		tmp = midTmp; 	} } void solve() { 	linklist H = CreateList(); 	printf("所求的节点的值为：%d\n", Adjmax(H)); 	FreeList(H); } int main() { 	char choice; 	do { 		solve(); 		printf("是否继续？（y/n）\n"); getchar(); 		choice = getchar(); 		if (choice == 'n') { 			printf("GoodBye!"); 			break; 		} 	} while (true); 	return 0; }

user: user-2
content: 那你只能scanf("%s"去得到字符串，自己判断是不是数字

user: user-3
content: 输出格式获取用字符串，之后自己写一个字符串parse函数来判断字符串是否含有非法字符，含有就报错，如果是纯数字就再将字符串转为整型存入链表。
user-0 提问: 为什么调用函数传递形参变量自增自减运算符有时没有效果？

回复:
user: user-1
content: 这一次判断：c[i]==c[j] 下一次就得判断：c[i-1]==c[j-1]; 所以必须使用：++i; --j; 而不是：i++; j--;

user: user-2
content: i++和++i的区别，前者是先取i传递过去，i再自加，后者是i先自加再传递过去

user: user-3
content: 按值传递参数的时候，会在栈区新建变量，把参数的值赋给这个变量，作用到函数中。  假如 i 的值是 1 调用 com( i++ ) 的时候，会创建一个新的变量 i' (为了区分加了一撇） 相当于 int i' ; i' =i; i += 1;  显然 i 增加了1 成了2 ，但 i' 依然还是 1 ，而 i' 才是新函数里的 i  于是，你无数次地递归，创建了无数个不同的 i ，i 的值永远都是1  而 ++i 是先递增后赋值，等效于 i+=1; int i' ; i’=i;  如果要实现你理想的效果，用引用作参数 com(char *c,int &i,int &j) 这样不会创建新的变量，而是直接在原来的 i 和 j 上操作。

user: user-0
content: 问题在代码注释里.............
user-0 提问: 用无限循环监控全局变量，CPU占用99！！！

回复:
user: user-1
content: while中加Sleep(50)，相当于放弃执行权50毫秒，如果你不加，CPU一直在执行，当然是满占用啦

user: user-2
content: #include <windows.h>  Sleep(30);

user: user-3
content: 别的且不说，就算你用死循环等待，也得在循环内部哪怕sleep(0)啊

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

user: user-4
content: 模块2的问题应该不大，循环在等待你输入的时候不会执行下去。 模块1中死循环是为了等待线程全部执行完成么？如果是可以不用死循环的方式等待，看看WaitForMultipleObjects，然后尝试替换死循环去等待线程完成。

user: user-5
content: while中不加sleep就是来耗cpu资源的

user: user-6
content: 关键字：线程同步对象
user-0 提问: 请教C语言中while循环和文件操作语言fread/fwrite的问题

回复:
user: user-0
content: 引用 1 楼 user-2 的回复:1、循环条件是fread读取返回值，也就是是否读取到了数据，因为fread没读到数据返回0，while结束 2、fwrite返回写入的个数，你要让他写3个，它返回不是3不就出错了么。。 3 总的来说，lz需要看看函数的参数和返回值的含义 谢谢

user: user-1
content: 建议lz，先弄懂语言基础。

user: user-2
content: 1、循环条件是fread读取返回值，也就是是否读取到了数据，因为fread没读到数据返回0，while结束 2、fwrite返回写入的个数，你要让他写3个，它返回不是3不就出错了么。。 3 总的来说，lz需要看看函数的参数和返回值的含义
user-0 提问: 请教一个如何设置source insight的问题

回复:
user: user-0
content: 真的没人了解吗

user: user-1
content: 是不是因为有near，整个union是不是在某个ifdef中？

user: user-2
content: 额 。。。用的也不熟。。

user: user-0
content: 忘了说，这个联合体的定义是在.h文件里的。.h文件已经被添加到文件过滤里面了了。
user-0 提问: C 1+2+3测试中发现的一个问题，求解答指导谢谢

回复:
user: user-0
content: 引用 2 楼 weixin_28404455 的回复:i从1加到7加6次，sum加了6次3 是不是可以理解为for的循环让I循环6次，也让sum的值循环了6次+3，   i<=3所代表的循环次数由于for语句所以控制着i++的次数和sum+3的次数

user: user-1
content: i从1加到7加6次，sum加了6次3

user: user-0
content: 这到底是为什么？
user-0 提问: 求帮忙看下为什么程序会关闭

回复:
user: user-1
content: 调试是必须学会的

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

user: user-3
content: 至少有三处需要改动：  void Find_(STU str[], int n)  //查找成绩 { 	char x[20];     //改动，20个字节，够吗？ 	int i; 	printf("----------------请输入学生的姓名----------------\n"); 	printf("\t\t\t"); 	scanf("%s", x);   //改动 	for (i = 0; i < n; i++) 	{ 		//if (strcmp(&str[i].name, &x) == 0) 		if (strcmp(str[i].name, x) == 0)    //改动 		{ 			printf("\t\t学期：%d\n", str[i].term); 			printf("\t\t班级：%d\n", str[i].class1); 			printf("\t\t学号：%d\n", str[i].num); 			printf("\t\t姓名：%s\n", str[i].name); 			printf("\t\t科目：%s\n", str[i].score.subject); 			printf("\t\t分数：%d\n", str[i].score.grade); 		} 	} }

user: user-0
content: 引用 1 楼 user-4 的回复:x是char型，只能存放一个字节，应该char x[12]; 还是会关闭

user: user-4
content: x是char型，只能存放一个字节，应该char x[12];
user-0 提问: 求助：const的用法一例，急急急

回复:
user: user-1
content: 不要纠结各种常量了，这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢！

user: user-2
content: int a = 0; void foo(const int * a) {     // *a = 1; } foo(&a);  在函数调用的过程中实参和形参是否该保持一致？ 是，这里的一致表示一致或者兼容的意思。 比如有函数void foo(long a); long x; foo(x);这是一致 int y; foo(y);这是兼容，因为int可以转化成long，且无精度损失。 另外兼容还有一种情形，就是这种non-const传给const的，因为函数调用对non-const的实参没有影响。  int a = 0; void foo(const int * a) {     // *a = 1; // 由于const，这条语句是不允许的。 } foo(&a);

user: user-3
content: 你问的问题太深了，我不知道。

user: user-4
content: 传地址 travers(&movies, show（。。。）); 这样是可以的。 大多数情况下，要求类型匹配，对于const有例外：右侧类型可以转化为左侧类型。 如：const int i = 12.1;        //double->int

user: user-5
content: movies的类型是list ，而函数要求是const list *,这样调用是错的，跟const无关

user: user-6
content: 实参和形参该保持一致。没看明白楼主第二个问题到底想问啥。。。
user-0 提问: 如何理解int *number = 100

回复:
user: user-1
content: 做死的写法，谁家的教材这么坑！

user: user-0
content: 哦，原来100是个地址啊，我一直看成一个int型数字了，现在明白了，我就说以前输出*number会失败，原来存入的是100的地址，但是100那个地址里并没有值。多谢楼上三位朋友的热心解答。

user: user-2
content: 你那句就是把100作为一个地址存放到number这个指针变量里面。至于100这个地址上是否存放有一个整形变量，这个你心里应该是清楚的。至于输出正常因为你本身就是输出了number这个变量，而非这个地址里面包含的整型值。仅此而已。

user: user-3
content: 请查阅"指针的初始化"相关资料.

user: user-4
content: 为什么不把100看成一个地址，  地址实际上不也是一个整数吗
user-0 提问: 写个新数据写入数组的0位置，老数据向后推移一位

回复:
user: user-1
content: var list = [4,5,6];  list.push(7);  var newList = list.sort(x => x !== 7) 		 document.write(newList)

user: user-0
content: 谢谢各位，明白了

user: user-2
content: 你一看就应该明白啊。 while (i<40) { g_peak[i+1] = g_peak[i]; i++; } 这样后面的元素都被覆盖了。 应该 i = 39; while(i>=0) { g_peak[i] = g_peak[i-1]; i--; }

user: user-3
content: 从0到39循环是不行的，得反过来，从39到0才可以

user: user-4
content: 1 2 3 指向你的 i+1 = i 变成  1 1 3 再执行 i+i = i 变成  1 1 1  当然不行了  从后向前 i-1 = i
user-0 提问: 请问 unsigned char 数组和char数组怎么互相转换?

回复:
user: user-1
content: 直接强制类型转换。

user: user-2
content: 同意楼上的，对输入有把握，直接强转

user: user-3
content: unsigned char和char是不兼容的两种类型； unsigned char *和char *也是不兼容的两种类型。 如果能保证存放的是基本执行字符集的成员，ie，就像你说的，全是英文字母，那么，可以强制转换，没问题，不会损失什么。

user: user-4
content: 你的这种情况直接强转即可。  HalLcdWriteString((char *) buffer, option);
user-0 提问: C语言中如何实现 大数 求 对数，或者仅仅是求对数

回复:
user: user-1
content: 看题目不是直接求大数的对数，试着推导了一下 已经知a=lgx,b=lgy,求lg(x+y) =lg(2^a+2^b) , 假设a>=b，令k=a-b 式子为 lg(2^b(2^k+1)) == b + lg(2^k+1) 如果k>=32，那么lg(2^k+1)应该接近为k，否则double的pow可以直接计算。 剩下就是写一个大数的相加和相减