Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 大神帮我看看我的程序哪里出了问题啊 啊

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

user: user-2
content: #include <stdio.h> #define  N     3				/* 学生人数 */ struct student { 	char id[15]; 	char name[15]; 	int chinese, math, english, total; } stu[N]; int main() {  	int i,j; 	struct student t; 	for (i = 0; i < N; i++) 	{ 		printf("id name chinese math english\n"); 		scanf("%s %s %d %d %d", stu[i].id, stu[i].name, &stu[i].chinese, &stu[i].math, 			  &stu[i].english); 	 	stu[i].total = stu[i].chinese + stu[i].math + stu[i].english; 	} 	 for (i = 0; i < N-1; i++) 	{ 		for (j=i+1;j<N;j++) 		if (stu[i].total >stu[j].total) 			{t=stu[i];stu[i]=stu[j];stu[j]=t;} 	}for (i=0;i<N;i++) 		printf("\n%s %s %d %d %d\n", stu[i].id, stu[i].name, stu[i].chinese, stu[i].math,stu[i].english); }      匆忙在你的基础上写的，你可以参考一下
user-0 提问: 课程设计，模拟c语言语法分析器

回复:
user: user-1
content: libclang 好像能干这事。

user: user-0
content: 没人吗

user: user-0
content: 完全都没有学过栈

user: user-2
content: 用堆栈来做，网上搜索一下，就是括号匹配的用堆栈做的 完全能够解决你这个问题。

user: user-3
content: 这种东西我觉得还是用js写最方便.  啥时候有空了我写个...

user: user-0
content: 来位大神啊..

user: user-0
content: 我才学c语言，很多都不懂。

user: user-4
content: flex bison  antlr

user: user-0
content: 我只知道变离字符数组，用if判断，可是怎么读取整篇源程序到一个字符数组中。

user: user-0
content: 求代码啊
user-0 提问: 运行程序是停止工作

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

user: user-2
content: FILE *fp= fopen("lmx.txt","r+");    之后检查文件有没打开成功，若没成功就不要再往下执行，否则你在feof(fp)出错

user: user-0
content: 该程序运行后会停止工作，求大神看看
user-0 提问: 求大神帮我看看我的程序哪里出了问题

回复:
user: user-1
content: struct student { 	char id[15]; 	char name[15]; 	int chinese, math, english, total; }; stu[N]  最后的分号应该放到stu[N]后面：  struct student { 	char id[15]; 	char name[15]; 	int chinese, math, english, total; } stu[N];   stu[i].total = stu[i].chinese + stu[i].math + stu[i].english  这句后面少了分号    if(stu[i].total>stu[max}.total)  这里应该是用中括号

user: user-2
content: stu[N]应该是： student stu[N];
user-0 提问: 【菜鸟】找了3个小时没发现哪出错了，虽然知道阅读代码很烦，但是恳请前辈们看看[数据结构]

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

user: user-2
content: 才几个小时……过3天再来。

user: user-3
content: 仅供参考： #include <stdio.h> #include <stdlib.h>  typedef struct node { 	int data; 	struct node *lchild,*rchild; }BItree,*BtNode;  typedef struct{ 	BtNode s[100]; 	int top; }Stack;  void creatree(BtNode &tree)        //递归建立二叉树  { 	char c; 	c=getchar(); 	if(c=='#') 		tree=NULL; 	else { 		tree=(BtNode)malloc(sizeof(BItree)); 		tree->data=c-'0'; 		creatree(tree->lchild); 		creatree(tree->rchild); 	} }//前序遍历： void Forder(BtNode root) { 	BtNode p; 	Stack store; 	store.top=0; 	store.s[store.top++]=root; 	while(store.top>0) 	{ 		p=store.s[--store.top]; 		printf("%3d",p->data); 		if(p->rchild) 			store.s[store.top++]=p->rchild; 		if(p->lchild) 			store.s[store.top++]=p->lchild; 	} }  //中序遍历： void Midorder(BtNode root) { 	BtNode p=root; 	Stack store;   //指针栈  	store.top=0;   //top表示下一个元素的位置  	store.s[store.top++]=root; 	while(p->lchild)   //如果有左孩子，左孩子进栈  	{ 		store.s[store.top++]=p->lchild; 		p=p->lchild; 	} 	while(store.top>0)   //栈不为空就继续访问  	{ 		p=store.s[--store.top];  //p指向栈顶元素  		printf("%3d",p->data); 		if(p->rchild) 		{ 			store.s[store.top++]=p->rchild;   //右孩子进栈  			p=p->rchild; 			while(p->lchild)    //如果有左孩子，左孩子进栈  			{ 				store.s[store.top++]=p->lchild; 				p=p->lchild; 			} 		} 	} }  //后序遍历： void Lorder(BtNode root) { 	BtNode p=NULL,cur=root;  //p为前一个访问的结点，cur为当前结点  	Stack store; 	store.top=0; 	store.s[store.top++]=root; 	while(store.top>0) 	{ 		cur=store.s[store.top-1]; 		if(cur->lchild==NULL&&cur->lchild==NULL||   //判断左右孩子是否不存在  			(p!=NULL&&(p==cur->lchild||p==cur->rchild)))  //判断左右孩子是否被访问过了 		{ 			printf("%3d",cur->data); 			store.top--;   //输出了结点的data后就在栈中把该结点去掉  			p=cur; 		}  		else { 			if(cur->rchild!=NULL)  //有右孩子就让右孩子入栈（先右再左）  				store.s[store.top++]=cur->rchild; 			if(cur->lchild!=NULL)   //有左孩子就让左孩子入栈  				store.s[store.top++]=cur->lchild; 		} 	} }   int main () { 	BtNode root; 	creatree(root); 	printf("\n"); 	printf("*****************************************\n"); 	printf("\n"); 	printf("前序非递归遍历为：");  	Forder(root); 	printf("\n\n"); 	printf("中序非递归遍历为：");  	Midorder(root); 	printf("\n\n"); 	printf("后序非递归遍历为：");  	Lorder(root); 	printf("\n\n"); 	return 0; }
user-0 提问: 关于+++这是什么

回复:
user: user-1
content: 笔误

user: user-0
content: 引用 1 楼 user-2 的回复:表示没看懂。。 说是数组初始化，声明那里数组没赋初值

user: user-0
content: 说是数组初始化，我试了一下，什么也打印不出来

user: user-2
content: 表示没看懂。。
user-0 提问: 关于排列组合的c语言题目 求大神帮我一下

回复:
user: user-1
content: #include<stdio.h> int Eating(int n){ 	if(n==1) return 1; 	if(n==2) return 2; 	int sum=0; 	sum+=Eating(n-1)+Eating(n-2); 	return sum; } int main(){ 	int n; 	scanf("%d",&n); 	printf("%d\n",Eating(n)); 	return 0; }

user: user-0
content: 我用数学排列组合解决了，递推要怎么实现呐？ #include <stdio.h> int main () {    int i,n,s,b,t,q;  int zhan (int n,int m);    scanf ("%d",&n);    s=n/2;    t=0;    for (i=1;i<=s;i++)       { 	      b=n-i*2; 		  if (b!=0) 		  {q=zhan (b+i,i);	  			t=t+q;	} 		  else t+=1;   		  	  } printf ("%d\n",t+1); return 0; } int zhan (int n,int m) {    int a=1,b=1,i,c,j=m;            for (i=1;i<=j;i++) 	 { a*=m; m--;}      for (i=1;i<=j;i++) 	 { b*=n; n--;} 		  c=b/a;   return (c); }

user: user-2
content: 递推式 f(n) = f(n - 1) + f(n - 2)
user-0 提问: x为什么不记数呢

回复:
user: user-1
content: 引用 楼主 a149979032 的回复:我想输出每行最大值的坐标，可x为什么不计数呢？求大神给看看 for (i = 0; i < 4; i++) 	{ 		for (j = 0; j < 4; j++) 		{ 			if (a[i][max] < a[i][j + 1]) 			{ 				max = j + 1; 				x = i; 			} 		} 	}  改成这样  for (i = 0; i < 4; i++) { 	int max = 0; 	for (j = 1; j < 4; j++) 	{ 		if (a[i][j] > a[i][max]) 		{ 			max = j; 		} 	} 	printf("第%d行：最大数的坐标(%d,%d)", i, i, max); }

user: user-0
content: 引用 2 楼 a149979032 的回复:[quote=引用 1 楼 user-3 的回复:] if (a[i][max] < a[i][j + 1])  改成：  if (a[i][j] > max)   max = j + 1;  改成：  max = a[i][j]; 只需要坐标就行，不求值[/quote] 那个x为什么不动啊

user: user-0
content: 引用 1 楼 user-3 的回复:if (a[i][max] < a[i][j + 1])  改成：  if (a[i][j] > max)   max = j + 1;  改成：  max = a[i][j]; 只需要坐标就行，不求值

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

user: user-3
content: if (a[i][max] < a[i][j + 1])  改成：  if (a[i][j] > max)   max = j + 1;  改成：  max = a[i][j];
user-0 提问: 寻求64位vc6.0

回复:
user: user-1
content: 八成没有吧。

user: user-2
content: 应该没有64位vc6.0，vc6的最后补丁sp6是2004年发布的，而ms的第一个64位windows，xp64，到2007年才出来。

user: user-3
content: 没有纯 64 位的 Visual C++ ？！！

user: user-4
content: 可以明确地告诉你：没有 64 位的 Visual C++ 6.0。 但是： (1) 32 位的 Visual C++ 6.0 可以运行在 64位的 Windows 上面。 (2) 尽管没有 64 位的 Visual C++，但是 32 位的 Visual C++ 可以编译 64 位的程序。

user: user-5
content: 学习的话，32位或64位有区别吗？64位平台可以运行32位程序。  C与C++程序设计学习与实验系统 2013.3 可以不用建立项目（单文件），简单的试验代码甚至不用保存为文件，直接编译运行观察结果，比较方便。 只有几十M大小。  自带TC编译器和VC 6.0编译器（选项可设置），自带DOSBox运行TC生成的exe程序。
user-0 提问: 如何用栈来实现商品日期管理

回复:
user: user-1
content: 楼上简直是在瞎扯，加不加空格效果都是一样的。 关键在于你输入完一组数据后就s.releaseddata++;了 你while循环结束后应该加一句s.releaseddata = s.bottom;  #include<stdio.h> #include<stdlib.h> #define SIZE 100 typedef struct released{ 	int year; 	int month; 	int day; }; typedef  struct sqstack{ 	struct released *releaseddata; 	struct released *bottom;  }sqstack; void main() { 	sqstack s; 	char ch; 	int k = 0;  	s.bottom = (struct released *)malloc(SIZE*sizeof(struct released)); 	s.releaseddata = s.bottom; 	do{ 		printf("输入商品日期（例如2000 1 1）\n"); 		scanf("%d %d %d", &(s.releaseddata->year), &(s.releaseddata->month), &(s.releaseddata->day)); 		s.releaseddata++; 		k++; 		fflush(stdin); 		printf("是否继续输入(y/n)\n"); 		ch = getchar(); 	} while (ch == 'y'); 	s.releaseddata = s.bottom; 	for (int i = 0; i<k; i++) 		printf("%d %d %d\n", s.releaseddata->year, s.releaseddata->month, s.releaseddata->day); }

user: user-2
content: scanf("%d %d %d",你这里改成scanf("%d%d%d",不要空格就可以了

user: user-3
content: 为什么要用栈？？队列不是更好？？
user-0 提问: 有关%s的输出

回复:
user: user-1
content: scanf("%100[^\n]",a);

user: user-2
content: 不是printf的问题，是scanf本身就是空格分割字符输入的。

user: user-3
content: scanf收到空格会结束，你用gets的话就可以接受空格，如果你用scanf输入不要有空格输入，gets就可以

user: user-0
content: 引用 7 楼 include_xy 的回复:#include<stdio.h>  int main()  { char a[101];  int n;  printf("input a string:\n");  scanf("%s",a);  //a[0]=a[0]-32;  printf("%s",a); //遇到空格自动结束 return 0;  } 可以输出的呀你输入一串英文句子 例如 :i am a student. 输出的就是:I

user: user-4
content: #include<stdio.h>  int main()  { char a[101];  int n;  printf("input a string:\n");  scanf("%s",a);  //a[0]=a[0]-32;  printf("%s",a); //遇到空格自动结束 return 0;  } 可以输出的呀

user: user-5
content: 看你文章内容 应该是"" 和“” 搞错了

user: user-6
content: 引用 4 楼 qq_36502045 的回复:[quote=引用 2 楼 qq_36409192 的回复:] 谁告诉你不能用的，当然可以字符串输出啊并没有搞错 我把代码给你们你们可以试试 #include <stdio.h> int main() { char a[101]; int n; printf("input a string :\n"); scanf("%s",a); //a[0]=a[0]-32; printf("%s",a);//遇到空格自动结束  return 0; }  讲真的 ，我特别奇怪这一点，就是有关输出问题，当你从键盘上输入的时候，包括%c 以及puts()putchar（）都不可以输出空格[/quote] 正常啊   哪里有问题了？？

user: user-0
content: 引用 1 楼 qq_37067803 的回复:看你文章内容 应该是"" 和“” 搞错了这倒没有，我打的只是顺手打的题目，并不是代码，所以有点小缺漏。

user: user-0
content: 引用 2 楼 qq_36409192 的回复:谁告诉你不能用的，当然可以字符串输出啊并没有搞错 我把代码给你们你们可以试试 #include <stdio.h> int main() { char a[101]; int n; printf("input a string :\n"); scanf("%s",a); //a[0]=a[0]-32; printf("%s",a);//遇到空格自动结束  return 0; }  讲真的 ，我特别奇怪这一点，就是有关输出问题，当你从键盘上输入的时候，包括%c 以及puts()putchar（）都不可以输出空格

user: user-0
content: 并没有搞错 我把代码给你们你们可以试试 #include <stdio.h> int main() { 	char a[101]; 	int n; 	printf("input a string :\n"); 	scanf("%s",a); 	//a[0]=a[0]-32; 	printf("%s",a);//遇到空格自动结束  	return 0; }  讲真的 ，我特别奇怪这一点，就是有关输出问题，当你从键盘上输入的时候，包括%c 以及puts()putchar（）都不可以输出空格

user: user-6
content: 谁告诉你不能用的，当然可以字符串输出啊
user-0 提问: 求助帮忙看下为什么错

回复:
user: user-1
content: 帮结贴

user: user-0
content: 改好了，不用了

user: user-0
content: #include <stdio.h> #include <conio.h> #include<stdlib.h> #include<malloc.h> //函数 void jiemian(void);//主界面 void gongneng(void);//功能的选择 int input(int a);//商品的入库 int output(void);//商品的出库   struct xinxi { 	char name[100]; 	int daima; 	char changjia[100]; 	char riqi[100]; 	int shuliang; 	double qian; 	int chuku; };  int main(void) { 	int a,i=0; 	 	jiemian(); 	gongneng(); 	do 	{ 		scanf("%d",&a); 	}while(a!=1&&a!=2&&a!=3&&a!=4&&a!=5&&a!=6&&a!=7);  	switch (a) 		{ 		case 1: 			input(i++); break;    //商品信息输入 		case 2: 			output(); break;/*//添加商品出库记录 		case 3:    			find(); break;//商品查询，按名称，按代码，按商品生产商（内部调用三个查询的函数find_1()，find_2()，find_3()） 		case 4:    			change(); break;//修改商品信息 		case 5:    			display(); break;//商品信息的盘点 		case 6:    			order();  break;//出库数量排序（内部调用升序函数shun，降序函数dao） 		case 7:     			save(); quit();  break;//保存信息函数，退出系统函数 		default:     			break;*/  		} 	 	return 0; }   void jiemian(void) { 	printf("\n\n\n\n\n\n\t                 ◆◆◆    ^ v ^   ◆◆◆   "); 	printf("\n\n\n\t\t\t  →  ※　欢迎使用　※   ←"); 	printf("\n\n\n\t\t  ★〓★〓★商品库存管理系统★〓★〓★"); 	printf("\n\n\n\t\t\t\t\t→◆作者：第一组"); 	printf("\n\n\t\t\t\t\t　　◎◎◎◎◎2016年12月24日\n"); 	printf("\n\n\n\t按回车键进入主菜单:");            /*界面*/ 	getchar(); 	system("cls"); }  void gongneng(void) { 	printf("\n"); 	printf("\t\t\t  ************\n"); 	printf("\t\t\t  *  主菜单  *\n");               /*主菜单*/ 	printf("\t\t\t  ************\n\n\n"); 	printf("\t        1 商品入库        2 商品出库\n\n\n\n"); 	printf("\t   3 查询商品     7 退出系统       4 修改商品\n\n\n\n"); 	printf("\t        5  日盘点          6 出库排序\n\n\n"); 	printf("\n\n"); 	printf("\t 请选择[1/2/3/4/5/6/7]: "); 		 	getchar(); 	system("cls"); /*清屏*/  }  int input(int a)//把商品的信息录入并存储  { 	struct xinxi * pArr; 	pArr = (struct xinxi *)malloc(100 * sizeof(struct xinxi));  	printf("请输入商品的名称："); 	scanf("%s",pArr[a].name); 	printf("请输入商品代码："); 	scanf("%d",&pArr[a].daima); 	printf("请输入商品生产厂家："); 	scanf("%s",pArr[a].changjia); 	printf("请输入商品生产日期："); 	scanf("%s",pArr[a].riqi); 	printf("请输入商品的数量："); 	scanf("%d",&pArr[a].shuliang); 	printf("请输入商品的价格："); 	scanf("%lf",&pArr[a].qian); 	printf("请输入商品出库："); 	scanf("%d",&pArr[a].chuku); 	return 0; }  void output(void) { 	int b,c,d,a; 	printf("请输入商品的代码："); 	c=scanf("%d",&b); 	if(c=1) 	{ 		for(d=0;d<100;d++)//利用for循环和下面的118行的代码，把输入的代码和以有的代码作比较  		{ 			if(b=pArr[d].daima) 			{ 				printf("请输入商品的出库数量："); 				scanf("%d",&a);//输入本次出库的数量  				if(a>pArr[d].shuliang) 				{ 					printf("你输入的出库数量以超过现有的库存量,现有的库存量为：%d",pArr[d].shuliang);  				} 				else 					pArr[d].name+=a;//将本此出库的数量加上原来已经出库的数量  					pArr[d].ruku-=pArr[d].chuku;//用以有库存减去出库数量  			} 			else 				printf("请输入正确的代码，检查步到你所输入的代码"); 		} 	} }

user: user-0
content: 还没编完 ，但是我建立的动态结构体为什么在那个函数中不能运用
user-0 提问: 关于结构的初始化

回复:
user: user-0
content: 引用 3 楼 user-3 的回复:你使用了一个嵌套的循环，当进入内循环后。 你的循环可能是一个死循环。 当你初始化 life 为真的时候。 这就是你初始化的原因。 当你没有初始化的时候，全局变量自动在编译的时候初始化为 0.谢谢你，对我帮助很大！

user: user-1
content: 引用 4 楼 shanshenyuyou 的回复:初入论坛菜鸟怎么发程序像你们那样的 点击图标“<>”

user: user-2
content: 初入论坛菜鸟怎么发程序像你们那样的

user: user-3
content: 你使用了一个嵌套的循环，当进入内循环后。 你的循环可能是一个死循环。 当你初始化 life 为真的时候。 这就是你初始化的原因。 当你没有初始化的时候，全局变量自动在编译的时候初始化为 0.

user: user-0
content: 所以发上来看看大家意见

user: user-0
content: 问题出在initsnake函数上，我把它注释后，就能运行了，不然的话还是卡在这个函数。
user-0 提问: 各位大神前辈请看过来，新手有个关于“if”的问题

回复:
user: user-0
content: 刚试了，真的是这样，非常感谢

user: user-1
content: if(0<num<=9)     place=1;   0<num为真返回1，1<=9也为真，执行place=1;   所以place=1。  改成：  if(0<num && num<=9)         place=1;
user-0 提问: c语言怎么把二进制流文件用fread读取到结构体，然后排序

回复:
user: user-1
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了
user-0 提问: 下面的代码怎么改啊?真心不知道了

回复:
user: user-1
content: 楼上正解，注意字符和字符数组的区别，占位符和类型的匹配

user: user-2
content: #include<stdio.h> void main() {     struct Student     {         int num;         char name[32]; // 存放字符串，改为字符数组         float score[3];     }student[5];      int i,j;     for(i=0;i<5;i++)     {         printf("please enter the number and name:\n");         scanf("%d %s",&student[i].num,&student[i].name);          for(j=0;j<3;j++)         {             printf("please enter the score[%d]:",j+1);             scanf("%f",&student[i].score[j]); // score是float型，改为%f         }     }     for(i=0;i<5;i++)     {         printf("%d %s\n",student[i].num,student[i].name);         for(j=0;j<3;j++)         {             printf("%f ",student[i].score[j]); // score是float型，改为%f         }         putchar('\n');     } }

user: user-3
content: 现在有什么问题？
user-0 提问: 求助求助！！！急！！！

回复:
user: user-0
content: 对了，谢谢！！@AnonymousRookie

user: user-1
content: int search(int array[],int m);函数中的n是传入数组的大小，没有初始化，最好作为函数参数进行传递   int search(int array[],int n, int m) {     int x=0,i;     for (i=0;i<n;i++) {         if (array[i]==m)              x++;     }     return x; }   printf("%d\n",search(a,5,y));

user: user-2
content: search函数中n没有赋值吧…
user-0 提问: 求助！，C语言编程，文件无法打开。

回复:
user: user-1
content: // GETCWD.C /* This program places the name of the current directory in the   * buffer array, then displays the name of the current directory   * on the screen. Specifying a length of _MAX_PATH leaves room   * for the longest legal path name.  */  #include <direct.h> #include <stdlib.h> #include <stdio.h>  void main( void ) {    char buffer[_MAX_PATH];     /* Get the current working directory: */    if( _getcwd( buffer, _MAX_PATH ) == NULL )       perror( "_getcwd error" );    else       printf( "%s\n", buffer ); }  /* CHGDIR.C: This program uses the _chdir function to verify  * that a given directory exists.  */  #include <direct.h> #include <stdio.h> #include <stdlib.h>  void main( int argc, char *argv[] ) {    if( _chdir( argv[1] )   )       printf( "Unable to locate the directory: %s\n", argv[1] );    else       system( "dir *.wri"); }

user: user-0
content: 建立一个霍夫曼树，将输入的字符和对应的权值保存在“hfmtree.txt”中，在第二次打开的时候就直接调用，但是在运行的时候,以读的方式一直打不开“hfmtree.txt”。但是就在刚才又不知道为什么行了。。。

user: user-2
content: 你要实现什么功能呀？？
user-0 提问: 如何读取指定目录中的最新文件 

回复:
user: user-1
content: ReadDirectoryChangesW

user: user-1
content: 参考MSDN98中的例子fwatch MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\FWATCH\FWATCH.DSP MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\FWATCH\FWATCH.C MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\FWATCH\MAKEFILE MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\FWATCH\FWATCH.INI MSDN98\SAMPLES\VC98\SDK\WINBASE\IO\FWATCH\README.TXT  MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix,  MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:ReadDirectoryChangesW 赵老师，这个怎么用？
user-0 提问: 递归求助：怎么用递归计算数组中数据的和，要用类似二分法从中间折半递归。。。

回复:
user: user-0
content: 引用 5 楼 user-1的回复:[quote=引用 4 楼 zzf1510711060 的回复:] [quote=引用 3 楼 user-1 的回复:] int sum(int a[], int n) { 	if (n == 1) 		return a[0];  	int		mid = n / 2; 	int		lefts = sum(a, mid); 	int		rights = sum(a + mid, n - mid); 	return lefts + rights; } 这里的a+mid是原数组折半的意思吗？ [/quote]数组a元素中，下标从0到mid-1共mid个，是前一半；从mid到n-1共n-mid个，是后一半；分别求和，再相加[/quote] 懂了，谢谢！！！！！！！！

user: user-1
content: 引用 4 楼 zzf1510711060 的回复:[quote=引用 3 楼 user-1 的回复:] int sum(int a[], int n) { 	if (n == 1) 		return a[0];  	int		mid = n / 2; 	int		lefts = sum(a, mid); 	int		rights = sum(a + mid, n - mid); 	return lefts + rights; } 这里的a+mid是原数组折半的意思吗？ [/quote]数组a元素中，下标从0到mid-1共mid个，是前一半；从mid到n-1共n-mid个，是后一半；分别求和，再相加

user: user-0
content: 引用 3 楼 user-1 的回复:int sum(int a[], int n) { 	if (n == 1) 		return a[0];  	int		mid = n / 2; 	int		lefts = sum(a, mid); 	int		rights = sum(a + mid, n - mid); 	return lefts + rights; } 这里的a+mid是原数组折半的意思吗？

user: user-1
content: int sum(int a[], int n) { 	if (n == 1) 		return a[0];  	int		mid = n / 2; 	int		lefts = sum(a, mid); 	int		rights = sum(a + mid, n - mid); 	return lefts + rights; }

user: user-0

user: user-0
user-0 提问: Segmetation Fault是什么鬼

回复:
user: user-1
content: 出现了Segmentation fault，基本上的原因是，非法的内存访问。 例如数组的越界，在循环操作时循环变量的控制问题，也有字符串拷贝时长度溢出，指针指向了非法的空间，还有就是申明一个指针，但却没有对其初始化，就直接引用，或者没有开辟内存空间就释放内存，所以要检查申请空间时间偶成功。。。

user: user-2
content: if(argc!=2){      printf("usage:a.out <descriptor#>");    }   return 1;
user-0 提问: 关于srand()函数的一个问题 求解

回复:
user: user-1
content: 可以先产生一个随机数iNormalFood，比如范围（2~6），然后每产生一个正常食物，NormalFoodCount++，当NormalFoodCount达到iNormalFood，产生一个特殊食物，然后重新产生一个随机数iNormalFood。

user: user-0
content: 没有学那么深噢...大一学生 有没有简单一点的方法？？？

user: user-2
content: 采用定时器，每隔一段时间调用一次Creat_Food()函数
user-0 提问: acm大佬快来，格式错误是什么鬼，还有为什么C语言多个空格少个空格答案差别那么大

回复:
user: user-0
content: 没有人回复宝宝我自己回答吧，一个学长帮我修改了另一道题代码，错误一样格式错误。 代码如下：#include<stdio.h> #include<string.h> int main() {     char s[20] ;     int i,t,j;     scanf("%s",s);     int len=strlen(s);     for(j=0; j<len-1; j++)     {         {             for(i=0; i<len-1-j; i++)                 if(s[i]>s[i+1])                  {                     t=s[i];                     s[i]=s[i+1];                     s[i+1]=t;                 }         }     }     for(i=0; s[i]!='\0'; i++)         if(i==0) printf("%c",s[i]);         else printf(" %c",s[i]);  } acm输出后面可能不能有回车空格，遇见需要一个数字一个空格这样输出的先输出首位，然后其他的前面加空格，，，，，以上都是废话相信和我一样的小白看见代码就明白了
user-0 提问: free释放内存空间出错, 不知道什么原因, 求指点,谢谢

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

user: user-0
content: 好的, 谢谢, 我改成申请时加1了     int *tz = (int *)calloc(n + 1, sizeof(int));

user: user-1
content: i <= n 改为 i<n

user: user-2
content: for (int i = 2; i <= n; i++)  --->  for (int i = 2; i < n; i++)  越界了，不是free的错

user: user-0
content: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h>  //斐波那契数列迭代法求解 int  tz2(int n) { 	int *tz = (int *)calloc(n, sizeof(int)); //定义一个数组有来存放每个月的兔子总数. 用的最大整数了 	tz[0] = 0; 	tz[1] = 1; 	printf("1月 免子数量为%d\n", tz[1]);  //打印1月总兔子数 	for (int i = 2; i <= n; i++) 	{ 		tz[i] = tz[i - 1] + tz[i - 2]; 		printf("%d月 免子数量为%d\n", i, tz[i]);  //打印总兔子数 	} 	free(tz);  //不知道为什么, 加上会出错?????? 	return 1; }   int main() { 	tz2(20); 	system("pause"); }  上面没有格式,重新发下代码, 求指点

user: user-0
user-0 提问: 归并排序递归部分

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

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

user: user-0
content: void mergearray(int a[], int first, int mid, int last, int temp[])   {       int i = first, j = mid + 1;       int m = mid,   n = last;       int k = 0;              while (i <= m && j <= n)       {           if (a[i] <= a[j])               temp[k++] = a[i++];           else               temp[k++] = a[j++];       }              while (i <= m)           temp[k++] = a[i++];              while (j <= n)           temp[k++] = a[j++];              for (i = 0; i < k; i++)           a[first + i] = temp[i];   }  这是合并部分
user-0 提问: gcc编译c文件怎么不用指定链接库啊

回复:
user: user-1
content: linux 链接动态的会去掉lib, 看看有没有 -lc 呢

user: user-0
content: 能不能自己指定具体链接什么库啊，就好像vs有/NODEFAULTLIB

user: user-0
content: 引用 1 楼 user-1 的回复:运行下 $ gcc -dumpspecs 看看  这是什么，不过grep libc没有啊，只找到另一个链接库

user: user-1
content: 运行下 $ gcc -dumpspecs 看看
user-0 提问: 求大神帮忙看一下哪里错了，关于选择语句的编程题

回复:
user: user-0
content: 哦，也就是说float型和int型作运算时，得数时float型

user: user-1
content: %.2d  改成  %.2f

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

user: user-3
content: %d 是替换为整数

user: user-3
content: printf("%f",s*0.01f);
user-0 提问: 编译器出问题了，麻烦帮我调试下。告诉一下问题出哪里了

回复:
user: user-1
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:调试不了建议洗洗睡吧。 程序没解决，睡不着啊！！

user: user-1
content: 调试不了建议洗洗睡吧。

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

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

user: user-0
content: 引用 1 楼 幻夢之葉的回复:所以你还是重装下IDE吧 现在要是下的了我就不会发帖子了。

user: user-3
content: 所以你还是重装下IDE吧
user-0 提问: 关于循环队列的错误 新人找不到哪错了

回复:
user: user-1
content: 边界条件 是码农永远的痛！

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

user: user-3
content: int Enqueue(Queue *Q, int *e)//入  {   //if((Q->rear+1)%MAXSIZE == Q->front)   if((Q->rear+1)%MAXSIZE > Q->front)   {           return FALSE;   }   Q->data[Q->rear] =*e;   Q->rear = (Q->rear + 1)%MAXSIZE;   }  int Empty(Queue *Q) {         if (Q->front == Q->rear) //此判断也可能是满的         return TRUE;         else          return FALSE; }    建议rear用size代替，size代表队列当前有多少个元素 入队直接放在 front + size 的位置 size++; 出队 front++, size--  size == 0 空队列 size == MAXSIZE 即为满队列 这两种情况都不能进行入队操作
user-0 提问: 求助，真的很急

回复:
user: user-1
content: 我也想知道。

user: user-2
content: Finding prime numbers - Kenneth Haugland  Different schemas for finding prime numbers explained with code http://www.codeproject.com/Articles/429694/Finding-prime-numbers

user: user-2
content: 如果这问题很简单的话，RSA加密还怎么号称安全？

user: user-3
content: SO 有个 libc++ 的实现，http://stackoverflow.com/questions/4475996/given-prime-number-n-compute-the-next-prime
user-0 提问: 这句sprintf怎么理解

回复:
user: user-1
content: 英语也是一门计算机语言的说。

user: user-2
content: 让str中的内容为： 变量a = %X ，其中%X用 变量B 的十六进制值替换

user: user-3
content: http://blog.csdn.net/kevinhg/article/details/40409041

user: user-4
content: http://baike.baidu.com/link?url=u4eChnDAq-0ixBy5yCTv3LmDa6NtHkIV7qVDO2obI00chnvtNDBuAzVaz0h7jAAGruz5aWzpUdAQsIrsy60sYK

user: user-5
content: 产生一个字符串“变量a=b”（变量b是十六进制的形式的数，“变量a=”是四个字符），并且保存到str中
user-0 提问: 输入正确的文件名会得到错误的结果

回复:
user: user-1
content: scanf("%[^\n]",filename);

user: user-2
content: 文件名最好不要带空格和中文 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-3
content: 你输入的那个文件名中间有空格，scanf是以空格作为输入项的分隔符的
user-0 提问: 来个能人帮我改c语言程序为c++么

回复:
user: user-1
content: C是C++的子集，楼主的问题就好比将一个"男人"变成一个"人"一样!

user: user-2
content: C++是支持C语言的语法的,你直接改一下文件后缀名,用C++的编译器也能编过和运行

user: user-3
content: C能跑，C++也能跑

user: user-4
content: c++ 基本兼容 c，直接编译就行了吧。有一些不一样的地方可能会导致编译错误，具体问题具体分析就行了。
user-0 提问: 求助

回复:
user: user-1
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-2
content: // gongshi.cpp : Defines the entry point for the console application. //  #include "stdafx.h" #include "math.h"  //2.4e9<=3e8sqrt(m*m/a/a+n*n/b/b+p*p/d/d)<=2.5e9 //其中a=0.46,b=0.4,d=0.4,求m,n,p数的组合，m,n,p为0-9的整数。  int main(int argc, char* argv[]) { 	double a = 0.46; 	double b = 0.4; 	double d = 0.4; 	int m, n, p; 	for( m = 0; m <= 9; m++ ) 	{ 		for( n = 0; n <= 9; n++ ) 		{ 			for( p = 0; p <= 9; p++ ) 			{ 				double result; 				result = 3 * 10000000 * sqrt( m * m / a / a + n * n / b / b + p * p / d / d ); 				if( result >= 2.4 * 1000000000 					&& 					result <= 2.5 * 1000000000 					) 				{ 					printf( "ok ---- m = %d, n = %d, p = %d, result = %f\r\n", m, n, p, result ); 				} 				else 				{ 					printf( "error - m = %d, n = %d, p = %d, result = %f\r\n", m, n, p, result ); 				} 			} 		} 	} 	//printf("Hello World!\n"); 	return 0; }    解不出来

user: user-1
content: // 2.4e9<=3e8sqrt(m*m/a/a+n*n/b/b+p*p/d/d)<=2.5e9 // 其中a=0.46,b=0.4,d=0.4,求m,n,p数的组合，m,n,p为0-9的整数。 #include <stdio.h> #include <math.h> int main() {     int m,n,p;     double a=0.46,b=0.4,d=0.4,v;     for (m=0;m<10;m++) {         for (n=0;n<10;n++) {             for (p=0;p<10;p++) {                 v=3e8*sqrt(m*m/a/a+n*n/b/b+p*p/d/d);                 if (2.4e9<=v && v<=2.5e9) {                     printf("m,n,p:%d,%d,%d\n",m,n,p);                 }             }         }     }     return 0; } //m,n,p:1,1,3 //m,n,p:1,3,1 //m,n,p:2,2,2 //m,n,p:3,0,2 //m,n,p:3,2,0 //

user: user-2
content: 原来我少写了个0。

user: user-3
content: int main() {     int m,n,p;     double a=0.46,b=0.4,d=0.4,v;     for (m=0;m<10;m++) {         for (n=0;n<10;n++) {             for (p=0;p<10;p++) {                 v=3e8*sqrt(m*m/a/a+n*n/b/b+p*p/d/d);                 if (2.4e9<=v && v<=2.5e9) {                     printf("m,n,p:%d,%d,%d\n",m,n,p);                 }             }         }     }     return 0; }

user: user-0
content: 谢谢您，刚刚我又重新算了一下，是这样计算编程的。

user: user-0
content: 老师你好，今天您给的代码在计算过程中出现的结果不符合不等式的限制。您看看有什么问题吗？
user-0 提问: 输入到文件尾C语言

回复:
user: user-1
content: gets, _getws Get a line from the stdin stream.  char *gets( char *buffer );  wchar_t *_getws( wchar_t *buffer );  Routine Required Header Compatibility  gets <stdio.h> ANSI, Win 95, Win NT  _getws <stdio.h> or <wchar.h> ANSI, Win 95, Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  Each of these functions returns its argument if successful. A NULL pointer indicates an error or end-of-file condition. Use ferror or feof to determine which one has occurred.  Parameter  buffer  Storage location for input string  Remarks  The gets function reads a line from the standard input stream stdin and stores it in buffer. The line consists of all characters up to and including the first newline character ('\n'). gets then replaces the newline character with a null character ('\0') before returning the line. In contrast, the fgets function retains the newline character. _getws is a wide-character version of gets; its argument and return value are wide-character strings.  Generic-Text Routine Mappings  TCHAR.H Routine  _UNICODE & _MBCS Not Defined _MBCS Defined _UNICODE Defined  _getts gets gets _getws    Example  /* GETS.C */  #include <stdio.h>  void main( void ) {    char line[81];     printf( "Input a string: " );    gets( line );    printf( "The line entered was: %s\n", line ); }   Output  Input a string: Hello! The line entered was: Hello!   Stream I/O Routines  See Also   fgets, fputs, puts

user: user-0
content: 1009  时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte 总提交: 46            测试通过: 29  描述    在C语言里，定义整型变量a可以使用语句：  int a;  而定义一重指针变量p1指向a变量，即把a变量的地址储存在指针变量p1里，可以使用语句：  int *p1;  p1 = &a;  若要通过p1访问变量a，应该使用：  *p1  定义二重变量p2指向p1指针，即把p1的地址存储在p2里，可以使用：  int *p2;  p2 = &p1;  由于p1之前已经指向a，因此通过p2可以访问到a变量，使用：  **p2  以此类推......  现在给出一个x重指针变量的定义，并假设之前已经定义过1重，2重，...，x-1重指针变量，而且已经将1重指针变量指向a变量，2重指针指向1重指针，...，x重指针指向x-1重指针。  问如何通过x重指针访问变量a？    输入    输入数据有多组，每组只描述x重指针变量的定义，定义格式为：   intX Y;  其中X为若干个*，Y遵守C语言标识符命名规则。每行总长度不超过100个字符。  输入直到文件结束为止。    输出    每组输出一行，每行输出一串字符，表示如何通过定义的指针访问a变量，不留空格。    样例输入  int* p; int** prr; int**** yyy;   样例输出  *p **prr ****yyy   这是题目
user-0 提问: 这两者的区别是什么

回复:
user: user-1
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

user: user-2
content: for() { //此处有代码就不同了   for() //此处有代码就不同了 }

user: user-3
content: for()循环后面必须是一条语句或者一条复合语句，{}大括号内的就是一条复合语句， for(...)   sum+=i; 这样也是一条复合语句。 有些情况使用{}，代码更加清晰。

user: user-4
content: 没啥区别，看习惯了

user: user-5
content: 似乎没区别

user: user-6
content: 目前没区别，但加入代码就有区别了

user: user-7
content: 没区别。for结构整体上就是一个语句，外面加不加大括号无所谓

user: user-8
content: 一个嵌套，一个平级！

user: user-9
content: 没区别。你要非说区别的话，就是一个把循环体标出来了，一个没标出来。
user-0 提问: 关于0<=10为真还是为假的问题

回复:
user: user-1
content: 楼主该补补小学算数了。

user: user-2
content: 这是一个数学上的逻辑的问题，0<10固然正确，0=10肯定错误。0<=10这个式子等价于0<10“或”0=10，即（“真”||“假”），得到的值当然是真了。

user: user-3
content: C语言里没有这种n>=1<=10写法，这个写法本身就很奇怪 要写也应该写成1<=n<=10(虽然这种写法也是错的)

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:楼主该补补小学算数了。 跟你什么关系？让我补数学？咱俩很熟么？什么时候轮到你给我说三道四了？ 我不懂就问怎么了？我要是不懂1+1等于多少那我照样也能问的出来！我给你说 每个人在这里都是想让自己编程进步的人，最讨厌这种不解决问题还往别人身上泼冷水的人。

user: user-4
content: 莫名其妙，不清不楚

user: user-5
content: n >= 1 <= 10 第一次判断：0（n） >= 1，假，所以（n >= 1）值为 0。 第二次判断：0（n >= 1） <= 10， 真，所以整个式子为 真。 所以便执行了 if 里的语句。 但是标准的写法应该是 if (n >= 1 && n <= 10) 这样的话 n>= 1 便不满足，不会执行。

user: user-6
content: 引用 3 楼 qq_37120435 的回复:为什么0<=10为true呢？0不等于10啊 <=是小于或者等于，就是不大于。 莫非你能找出一个等于10并且小于10的数？

user: user-0
content: 为什么0<=10为true呢？0不等于10啊

user: user-7
content: if(n>=1<=10)  就会先判断 n >= 1 为 false false 跟 int 比较，false转int为0 0 <= 10 当然是true了

user: user-7
content: if(n>=1 && n<=10)
user-0 提问: 代码输出超限是什么鬼，acm是怎么判断的，为什么每次在codeblocks上运行感觉都非常正常

回复:
user: user-1
content: 100万以内的素数有78498个

user: user-1
content: 网上说使用查表法，使用空间换速度。 100万之前的可以预先做张表格

user: user-0
content: 引用 10 楼 qq_36409192 的回复:#include<stdio.h> int main() {     int n,tag,i,j; 	scanf("%d",&n); 	for(i=2;i<n;i++) 	{ 		tag=0; 		for(j=1;j<=i;j++) 			if(i%j==0) 				tag++; 		if(tag==2) 			printf("%d  ",i); 	} 	return 0; } 谢谢对了，但是要少个空格

user: user-2
content: #include<stdio.h> int main() {     int n,tag,i,j; 	scanf("%d",&n); 	for(i=2;i<n;i++) 	{ 		tag=0; 		for(j=1;j<=i;j++) 			if(i%j==0) 				tag++; 		if(tag==2) 			printf("%d  ",i); 	} 	return 0; }

user: user-0
content: 引用 7 楼 u012909435 的回复:这个要用筛法。。。。 筛法是什么，筛选么

user: user-0
content: 引用 6 楼 m1478 的回复:会不会是多了或少了空格。 不知道，样例里输出之间是有空格的

user: user-3
content: 这个要用筛法。。。。

user: user-4
content: 会不会是多了或少了空格。

user: user-0
content: 引用 1 楼 xsklld 的回复:随便给个大点的N，比如123456789，看看在Code::Blocks上要跑多久。好慢要22多秒

user: user-0
content: 引用 1 楼 xsklld 的回复:随便给个大点的N，比如123456789，看看在Code::Blocks上要跑多久。 会不会是我定义的N范围太小，

user: user-0
content: 引用 2 楼 FancyMouse 的回复:你这应该是超时不是超输出吧它上面是说输出超限，，没有说超时

user: user-5
content: 你这应该是超时不是超输出吧

user: user-6
content: 随便给个大点的N，比如123456789，看看在Code::Blocks上要跑多久。
user-0 提问: 关于strcmp函数的疑惑

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

user: user-2
content: for (i = 1; i < 7; i++) 这一句错了， 改为]for (i = 0; i < 7; i++)

user: user-3
content: 循环从1开始，Sunday是date[0]，根本没匹配到，把for循环里面的i=1改成i=0试试
user-0 提问: 程序找错 下面一段程序有什么错，找出并改正

回复:
user: user-1
content: 栈中的变量通常包括函数参数和函数里声明的临时变量。 栈中的基本变量退出其作用域时，没有谁执行一段代码去释放/销毁/析构它所占用的内存，仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。 而栈中的类变量退出其作用域时，会自动执行其析构函数，……

user: user-2
content: 不要返回局部变量，标准对于这种行为未定义

user: user-3
content: 返回局部变量的地址是未定义行为

user: user-4
content: #include <stdio.h>  char *foo(int *handle) {     static char str[] = "okay\n";     *handle = 1;      return str; }  int main(void) {     //void **handle;     int handle;      char *result;     result = foo(&handle);     if (handle == 1) {         printf("%s", result);     }     return 0; }  问题1, 使用野指针,handle就是野指针,如果单从你的去求是从函数foo中获取一个标志值,没必要使用二重指针,直接使用一重指针即可. 问题2: 获取栈上的地址；函数foo中str数组是栈上空间,获取其地址,然后在main函数里再次使用没有意义.因为foo函数调用完后栈空间会被自动释放,在使用没有意义,很容易被别的程序再次申请foo的使用过的栈空间.  改的方法:handle使用了变量,str使用了静态数组,因为字符串"oky\n"是在数据段,不会跟着foo的释放而无效,所以main函数也可以读到正确的字符串..

user: user-5
content: #include <stdio.h>  char *foo(void **handle) { char str[] = "okay\n"; *handle = 1; //void* 的数据不能直接被使用，地址用int 赋值也不匹配 return str; }  int main(void) { void **handle; //没有分配内存就直接使用  char *result; result = foo(handle); if (*handle == 1) {  printf("%s", result); } return 0; }
user-0 提问: 栈内存定义大小有什么需要注意的？

回复:
user: user-1
content: /STACK   (Stack Allocations) Home |  Overview |  How Do I |  Linker Options  The Stack Allocations (/STACK:reserve[,commit]) option sets the size of the stack in bytes.   To find this option in the development environment, click Settings on the Project menu. Then click the Link tab, and click Output in the Category box. The Reserve text box (or in the reserve argument on the command line) specifies the total stack allocation in virtual memory. The default stack size is 1 MB. The linker rounds up the specified value to the nearest 4 bytes.  The optional value specified in the Commit text box (or in the commit argument on the command line) is subject to interpretation by the operating system. In Windows NT, it specifies the amount of physical memory to allocate at a time. Committed virtual memory causes space to be reserved in the paging file. A higher commit value saves time when the application needs more stack space, but increases the memory requirements and possibly the startup time.  Specify the reserve and commit values in decimal or C-language notation.  Another way to set the size of the stack is with the STACKSIZE statement in a module-definition (.DEF) file. STACKSIZE overrides the Stack Allocations (/STACK) option if both are specified. You can change the stack after the .EXE file is built by using the EDITBIN tool.

user: user-2
content: 栈大小一般只有几M（1~10M） http://blog.csdn.net/xxxxxx91116/article/details/10068555

user: user-3
content: 太大的变量无法在栈中分配(比如说你分配一个大小为10000000的int型数组)，这时候就需要从内存中分配空间给变量，否则会造成程序崩溃。

user: user-4
content: 程序运行的栈空间没有那么大,它是反复使用的段内存空间,因为函数,局部变量,代码都会用到栈上的空间.空间小,内容也不少,所以,平时定义栈上的数据(比如局部变量数组)时应根据需要来定义大小；如果实在需要比较大空间,建议使用堆上空间,相对栈还是比较大的.或者定义成全局的变量,但是一般对于大数句还是在堆上申请比较好.
user-0 提问: 非常简单的一道函数水题，但是提交上去就是答案错误不知道为什么，代码看起来还算正常

回复:
user: user-1
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-2
content: 你的格式不匹配，输入和输出的形式都有点问题，具体见楼上答案

user: user-3
content: 你的输入不满足题目要求的，改成这样试试：  #include<stdio.h> void add(int x, int y) { 	printf("%d", x + y); } void main() { 	int a, b, n, i, sum; 	scanf("%d", &n); 	getchar(); 	for (i = 0; i<n; i++) 	{ 		scanf("add(%d,%d)", &a, &b); 		getchar(); 		add(a, b); 		printf("\n"); 	} }

user: user-1
content: 边界条件 输入输出格式 ……

user: user-4
content: 输出答案的格式不对，你这是一个数据，一个结果，不是输完数据，连出结果。

user: user-5
content: 输入是add(1,7)不是1 7

user: user-6
content: scanf("%d%d",&a,&b); 里面缺个分割符吧，比如逗号什么的。scanf("%d,%d",&a,&b);  不知道你输入具体啥样，猜的。

user: user-0
content: 引用 5 楼 qq423399099 的回复:你的输入不满足题目要求的，改成这样试试：  #include<stdio.h> void add(int x, int y) { 	printf("%d", x + y); } void main() { 	int a, b, n, i, sum; 	scanf("%d", &n); 	getchar(); 	for (i = 0; i<n; i++) 	{ 		scanf("add(%d,%d)", &a, &b); 		getchar(); 		add(a, b); 		printf("\n"); 	} }   谢谢，是我没有看清题目，太不好意思了，，，，
user-0 提问: 关于C栈的一些疑问

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

user: user-1
content: 栈中的变量通常包括函数参数和函数里声明的临时变量。 栈中的基本变量退出其作用域时，没有谁执行一段代码去释放/销毁/析构它所占用的内存，仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。 而栈中的类变量退出其作用域时，会自动执行其析构函数，……

user: user-2
content: int d = 6；也许被优化掉了，因为后面没有再使用，嵌入式里面尤其常见。

user: user-3
content: 未定义行为，不同的编译器可能结果不同

user: user-4
content: 你这是在测试编译器，而编译器想怎么干都可以。

user: user-2
content: 赵老师吃定冯诺依曼结构了。

user: user-5
content: 这叫未定义行为，楼主不要纠结了，记住别写这样的代码就行。 即便你费半天劲研究明白了主楼的例子，获得的知识也没有通用性。 具体到这个例子，c 和 d 都是同时进出栈的，不存在 d 先用了一块地，用完了腾出的空间 c 又复用了。

user: user-6
content: 引用 9 楼 u010165006 的回复:客人住酒店，在房间遗落了一个东西（值），下一个客人入住同一个房间，房间里还有那样东西。  下一个客人入住同一个房间，不清理的话房间里还有那样东西。

user: user-6
content: 客人住酒店，在房间遗落了一个东西（值），下一个客人入住同一个房间，房间里还有那样东西。

user: user-7
content: 引用 4 楼 guoke312 的回复:我的本意就是c不赋值，因为前面的a局部变量，if后面已经消亡，a就出栈了，栈内存是脏的那么c入栈不就应该是6吗？加了打印列2可以一直保证是6，而列一却不行，这是为何？ d出栈为什么它的值会留在栈中？？而且又为什么会和c匹配？？你知道c存的地址会是之前d的位置？？

user: user-8
content: while (TRUE) { 		int a ; 		printf("%p",&a); 	} 试试不就知道了

user: user-0
content: 引用 5 楼 guoke312 的回复:[quote=引用 2 楼 user-10 的回复:] 在同一个函数内，变量放在栈的哪个部分是不确定的，编译器可以自行优化  函数执行完才会移动栈帧理清所有占上的内容  那我有个疑问，若是函数执行完毕清理的话，那么while（1）死循环里面定义的局部变量，一直分配不清理不就会导致栈内存溢出？我想应该变量生命周期结束就该清理？[/quote]  曲解了您的意思，那么变量放栈随机的，为何加了打印以后c就是一定放在a消亡的栈地址？

user: user-0
content: 引用 2 楼 user-10 的回复:在同一个函数内，变量放在栈的哪个部分是不确定的，编译器可以自行优化  函数执行完才会移动栈帧理清所有占上的内容  那我有个疑问，若是函数执行完毕清理的话，那么while（1）死循环里面定义的局部变量，一直分配不清理不就会导致栈内存溢出？我想应该变量生命周期结束就该清理？

user: user-0
content: 我的本意就是c不赋值，因为前面的a局部变量，if后面已经消亡，a就出栈了，栈内存是脏的那么c入栈不就应该是6吗？加了打印列2可以一直保证是6，而列一却不行，这是为何？

user: user-9
content: int c 不赋值 ，它的值打印出来是随机的，这两个例子并不能说明什么即使。

user: user-10
content: 在同一个函数内，变量放在栈的哪个部分是不确定的，编译器可以自行优化  函数执行完才会移动栈帧理清所有占上的内容

user: user-7
content: c没进行赋值，输出的值是随机的。
user-0 提问: linux C 消息队列求助！

回复:
user: user-1
content: LZ的问题跟消息队列有关系吗?如果定义全局变量,并且在其他源文件里使用,建议把全局变量放在源文件里而不是生命在头文件里,因为这样很容易造成重定义的错误. 把定义和引用都放在源文件里.

user: user-2
content: key.h const int key; key.c const int key = 0x1234567;  要引用的文件的头文件里面这么玩 #include "key.h" extern const int key;

user: user-2
content: “程序中包含了这个头文件  是否这2个程序就可以直接使用这个key和值了”，你这个两个程序是什么概念，如果是同一个工程里面，可以这么用，但是另外两个程序.........不太理解你的程序是个什么概念！

user: user-3
content: 包含(#include)是预处器指令，是复制文件，也就是把变量声明复制过来，只能安慰编译器，如果没有把包含key的定义的obj文件链接进来，链接时会报"undefied reference to xxx"错误
user-0 提问: 帮忙大神看个程序，在VS2015上写的

回复:
user: user-1
content: 1.要在函数内改变指针的指向必须传二级指针或者一级指针的引用才行  #include <stdio.h> #include <stdlib.h> #include <string.h> void GetMemory(char **p) { 	*p = (char *)malloc(100); } void main(void) { 	char *str = NULL; 	GetMemory(&str); 	strcpy(str, "hello world"); 	printf(str); }   2.要在堆上分配的空间才行，否则是未定义行为  #include <stdio.h> #include <string.h> #include <stdlib.h> char *GetMemory(void) { 	char str[] = "hello world"; 	char *p = (char *)malloc(strlen(str) + 1); 	strcpy(p, str); 	return p; } void main() { 	char *str = NULL; 	str = GetMemory(); 	printf(str); }

user: user-2
content: 第二个直接是错的，因为你返回的是一个局部数组变量，函数运行完就销毁了

user: user-2
content: 第一个，你GetMemory是按值传递的，你在GetMemory中申请的内存是给了一个复制后的指针，并没有改变原指针：  这样改：   #include <stdio.h> void GetMemory(char **p) { 	*p = (char *)malloc(100); } void main(void) { 	char *str = NULL; 	GetMemory(&str); 	strcpy(str, "hello world"); 	printf(str); }
user-0 提问: C中出现 [Error] ld returned 1 exit status问题，如何解决？

回复:
user: user-1
content: 我也是这问题

user: user-2
content: 弱弱的问一句 解决了吗 我也是这个问题

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

user: user-4
content: scanf("%s",&G->vexs[i]);  这里的G->vexs[i]只是一个字符的空间，如果你需要的是字符串，G->vexs应该用二维字符数组

user: user-5
content: printf("请输入第%d个单位的名称：",i+1); scanf("%s",&G->vexs[i]);  //?  写成：scanf("%c", &G->vexs[i]);  或者 typedef char VerTexType;   ==>     typedef char* VerTexType;

user: user-5
content: AMGraph *G = new AMGraph;
user-0 提问: 关于 ++i 的一些问题

回复:
user: user-1
content: 运算符优先级等价于  ++i | | (++j && ++k) || 和 && 运算符都遵循短路规则 即判断左侧值就能得出结果，后续的判断就忽略

user: user-2
content: 因为这是个逻辑或前面真，后面就不执行了，所以会这样

user: user-3
content: ++i 值为2，为真，后面的不需求值了。j、k不变。
user-0 提问: union和struct的问题

回复:
user: user-0
content: 引用 3 楼 赵4老师的回复:浮点数格式 http://bbs.csdn.net/topics/390676437 你给的链接看不懂，不适合我这个初学者！

user: user-0
content: 引用 4 楼 zhaozhu110的回复:union是共用体,strcut是结构体,union可以共用，后者不行~ 怎么回答你好咧，竟然要求要打十个字

user: user-0
content: 引用 2 楼 自信男孩的回复:你的程序在Linux下是可以运行的,结果和你的一样. float浮点数因为有整数部分和小数部分,其表示方法与整形的是不一样的.详见这个链接 http://www.cnblogs.com/dolphin0520/archive/2011/10/02/2198280.html w.a = 65; 那么其二进制是100000001,这是32位中的低位,即低9位,但是浮点数是1位符号为,8位解码为阶码为,23为尾数位.65的二进制实在浮点数的尾数位里,所以是0.00000 你给的连接我看了，懂了一些。谢谢，但是怎么处理才能让其打印出的float数据是65而不是0.000000？

user: user-1
content: union是共用体,strcut是结构体,union可以共用，后者不行~

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

user: user-3
content: 你的程序在Linux下是可以运行的,结果和你的一样. float浮点数因为有整数部分和小数部分,其表示方法与整形的是不一样的.详见这个链接 http://www.cnblogs.com/dolphin0520/archive/2011/10/02/2198280.html w.a = 65; 那么其二进制是100000001,这是32位中的低位,即低9位,但是浮点数是1位符号为,8位解码为阶码为,23为尾数位.65的二进制实在浮点数的尾数位里,所以是0.00000

user: user-4
content: 这只是GCC的扩展功能，不是标准，VC不支持这种用法
user-0 提问: 两个整形商无法得到浮点的商

回复:
user: user-0
content: 谢谢各位，将分母变为1000.0就能得到浮点的商。

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

user: user-2
content: 不会吧，如果已经转换成了浮点数，除法运算得到的结果也是float类型的  结果肯定是1.5，可能你程序运行了之前生成的结果，建议清理工程重新编译链接再试下

user: user-3
content: 你是咋看到 1.0 的?

user: user-4
content: 把除数1000改成1000.0

user: user-5
content: VS测试没问题，楼主用printf打印得到的是1？

user: user-6
content: VS2013测试可以，你什么编译器？  试试下面的 float default_time=GetBase()/1000.0;
user-0 提问: 三个整数排序的代码，我写的代码为什么运行不对？求救

回复:
user: user-0
content: 引用 3 楼 qq423399099 的回复:scanf才需要加上&,你"%d,%d,%d"的话，输入的时候必须是用逗号来分隔3个数（不能用空格或者回车） 犯低级错误了，谢谢你

user: user-1
content: 把printf("The three integer small to big:%d,%d,%d\n", &x, &y, &z);中的&去掉

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

user: user-3
content: &的问题，多敲点代码

user: user-4
content: scanf才需要加上&,你"%d,%d,%d"的话，输入的时候必须是用逗号来分隔3个数（不能用空格或者回车）

user: user-5
content: 输出不需要&。

user: user-6
content: printf("The three integer small to big:%d,%d,%d\n", &x, &y, &z);  改成：  printf("The three integer small to big:%d,%d,%d\n", x, y, z);
user-0 提问: 以下程序输出的结果是8341，为什么顺序会换呢？求详解

回复:
user: user-1
content: 1.少了个括号 2.main里的for循环for (k = 0; k,n; k++)应该是for (k = 0; k< n; k++)

user: user-2
content: 引用 2 楼 qq423399099 的回复:1.少了个括号 2.main里的for循环for (k = 0; k,n; k++)应该是for (k = 0; k< n; k++) 引用 楼主 qq_36379181 的回复:#include <stdio.h> void sort(int a[],int n) {  int i,j,p;int t;    for(i=1;i<n-1;i+=2)    {  p=i;       for(j=i+2;j<n;j+=2) 		  if(a[j]>a[p]) 			  p=j; 		  if(p!=i) 		  {  t=a[i];a[i]=a[p];a[p]=t; 		  }    }    void main()    {  int s[]={8,1,4,3},n=4,k;       sort(s,n); 	  for(k=0;k,n;k++) 		  printf("%4d",s[k]); 	  printf("\n"); 	  } 这个是选择排序算法，不过写得不完善  void sort(int a[],int n) {     int i,j,p;     int t;     for(i=0;i<n-1;i++)     {         p=i;         for(j=i+1;j<n;j++)         {             if(a[j]>a[p])             {                 p=j;             }         }                  if(p!=i)         {             t=a[i];             a[i]=a[p];             a[p]=t;         }     } }  int main(int argc, const char * argv[]) {     // insert code here...     int s[]={8,1,4,3},n=4,k = 0;     sort(s,n);     for(k=0; k<n; k++)     {         printf("%4d",s[k]);     }     printf("\n");     return 0; }

user: user-3
content: 建议单步跟踪程序运行，观察变量变化情况，看是哪一步和你期望的不一致，然后分析原因
user-0 提问: core文件分析

回复:
user: user-1
content: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令  搜出错代码对应地址附近的若干条汇编指令对应的opcode 使用IDA Pro带pcode反汇编 应该比较容易找到对应源代码位置。

user: user-0
content: 就是不知道怎么去定位到底哪行代码出了问题。。。
user-0 提问: c语言里true是1？-1？别的？

回复:
user: user-1
content: 。。。更正下自己的说法。只要是非0的数，转成bool都是true，不要求整数

user: user-1
content: 你这个放到编译器里试下就知道了， 这么说吧，true转成int的值确实是1； 但是所有非0的整数，转成bool都是true； 	bool a=999;//a=true 	int b=true;//b=1

user: user-2
content: 引用 11 楼 dreambyday 的回复:[quote=引用 10 楼 paschen 的回复:] TRUE是int型，通常是被定义为1 true是bool型，转换后的整型结果也是1   如果要判断是否为真时，不应该判断是否等于1，而应判断是否非零 计算机考试时问 小写的true的值为______填1？我看网上有人说-1的，，，确定是1？[/quote]  true转换成整数后的值是1

user: user-0
content: 引用 10 楼 paschen 的回复:TRUE是int型，通常是被定义为1 true是bool型，转换后的整型结果也是1   如果要判断是否为真时，不应该判断是否等于1，而应判断是否非零 计算机考试时问 小写的true的值为______填1？我看网上有人说-1的，，，确定是1？

user: user-2
content: TRUE是int型，通常是被定义为1 true是bool型，转换后的整型结果也是1   如果要判断是否为真时，不应该判断是否等于1，而应判断是否非零

user: user-3
content: 非0为真，0为假

user: user-4
content: 我们自定义的写成这样...typedef enum{false = 0,true =!false} bool;

user: user-0
content: 引用 2 楼 meixu568 的回复:哪里的-1？ 抱歉写错了，教科书上说true是-1

user: user-0
content: 引用 1 楼 jyxuan94 的回复: 你不是说了吗，宏定义TRUE是1教科书也是，自己输出也是。。。不懂你为什么懵 还有TRUE和true还是有区别的 小写的true的值是1还是-1？

user: user-0
content: 啊，教科书上说是-1

user: user-5
content: http://blog.csdn.net/shiwei408/article/details/7925528

user: user-6
content: 非0

user: user-7
content: 哪里的-1？

user: user-1
content: 你不是说了吗，宏定义TRUE是1教科书也是，自己输出也是。。。不懂你为什么懵 还有TRUE和true还是有区别的
user-0 提问: 最后一句调用出错，为什么？

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

user: user-2
content: SeqList *initSL() 函数中，L没有初始化就使用了，你L只是个指针，还没分配内存你就访问自然会出错

user: user-0
content: 现在又要学习10年前学的东西，忘的也差不多了，今天找了一本C书看了看，谢谢各位。

user: user-3
content: SeqList *initSL(SeqList )  {  int i;  SeqList * L =new   SeqList ;    // 这    L->last=3;  for(i=0;i<=L->last;i++)  scanf("%d",L->elem[i]);  printf("your array has been initialized:\n");  return(L);  }  main()  {   SeqList * L;   L=initSL(); delete L;    //  这  }

user: user-4
content: SeqList * L 中定义的L是在在栈中的，众所周知，栈中的变量都是临时的，当前函数执行完成后，这些临时变量和参数都会被清除，所以不能将指向这些临时变量的指针返回给调用者，这样的指针指向的变量都是随机的，所以程序会出现意想不到的的错误。
user-0 提问: linux上的.c文件和windows上的.c文件语法规则不同？

回复:
user: user-1
content: 编译器不同很正常，用memset就可能了

user: user-2
content: 随时定义变量是 C99 才加的,  M$ 不支持 C99 ..

user: user-3
content: vs 支持的 c 语言版本比较旧，= {0} 这个可能是新语法吧。用 memset 清零就行了。

user: user-4
content: 有如下几种可能： 1 代码运行的平台硬件不同。 不同的CPU，如嵌入式CPU，intel CPU，以及IBM的CPU，在硬件最底层就是不同的，而C语言是一门和底层相关性极大的语言，在不同的硬件上运行出不同结果是很正常的。  2 代码运行的系统不同。 相同CPU在不同操作系统上跑相同代码时，一样会出现不同的结果。这是由于系统底层的实现不同造成的。比如Linux和Windows，在底层处理上就有一定的差异。  3 编译器不同，同时代码中使用了C规范未定义规则的语句。 C语言规范并没有对C语言的所有行为做定义，所以相同语句，不同编译器的运行效果可能有所不同。比如同样的sizeof(int)，在16位编译器上结果为2，而32位编译器上就会是4。  4 代码获取到的外部数据不同。 比如运行代码时获取到的其它输入不同，包括程序中获取的环境变量，实时信息，以及各种外部输入等，均有可能出现不同。 比如在做随机数时，如果以当前时间设定随机数种子，由于每次的时间是不同的，同一个程序每次运行的结果都是不同的。

user: user-5
content: 编译器支持的 C 语言版本不一样。