Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问:  这个输出没有看懂，请帮忙。

回复:
user: user-0
content: 明白了明白了。谢谢了。刚才真是转不弯来。

user: user-1
content: 格式化输入输出的格式串参数中的格式，就是一个占位符号。  输出时，会被实参，按照格式输出的数据，替换掉。 ---实参转换成对应格式的字符串，替换掉对应的格式符号----   这里 “%s”就是一个格式符号。 实参是"%s! c is cool!\n"  替换以后输出 %s! c is cool!\n! c is cool!\n  其中\n是转义字符，会产生换行，实参的%s会原样输出。  printf("%s! c is cool!\n","%s! c is cool!\n");  相当于  puts("%s! c is cool!\n! c is cool!\n");

user: user-2
content: 第二个字符串替换了第一个字符串中的%s 也就是说输出来的第一行实际上是第二个字符串，第二行才是第一个字符串

user: user-3
content: #define FORMAT "%s! c is cool!\n"  //帮你换一下，这样应该看懂了吧！后面的那个a变量，你只不过没有有变量名，而用了它本身名来当地址传 char a[] = "%s! c is cool!\n"; printf("%s! c is cool!\n", a);

user: user-4
content: 其实你还真没理解为什么会输出前面那句有%s，不然就不会这么问了。 printf后面的参数会按前面的格式替换掉相应的内容，所以printf实际上转换成了这种形式：printf("%s! c is cool!\n! c is cool!\n");
user-0 提问: C语言 为结构体中的变量赋值，为什么不能用scanf？

回复:
user: user-1
content: 必须可以

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

user: user-3
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-4
content: 可能是中间输入“错误”

user: user-0
content: 引用 3 楼 Adol1111 的回复:除了main()写成mian没发现什么问题啊 又是马虎的结果

user: user-5
content: 除了main()写成mian没发现什么问题啊

user: user-6
content: scanf遇空格，TAB，回车，会停止读取，无法确保赋值正确

user: user-7
content: 你确认每次都成功输入了？scanf()函数成功返回了？

user: user-8
content: 当然可以！楼主在调试一下
user-0 提问: 想将书上一个例子程序分成几个部分~~不会引用结构类型~~编译器是codeblocks~~求指教~~

回复:
user: user-1
content: int main().c这样的文件命名不合法吧？你可以重命名为main.c，在当中写入： int main(int argc, char* argv[]) {     return 0; }  引用 楼主 pokerLee 的回复:范例程序如下~~程序过长~~想分成几个部分~~ http://my.oschina.net/u/1408882/blog/178570 个人练习的分成如下几部分~~ 报错不正常~~程序本身可以运行~~求指点~~

user: user-1
content: 先学学基础的东西，按部就班的练习，没有那本书上会建议你用含空格和括号的源文件名称。  引用 3 楼 pokerLee 的回复:引用 1 楼 user-2 的回复:除了main是.c文件以外，其他的都是.h文件吧引用结构类型的时候怎么引用？求指点~~

user: user-0
content: 引用 1 楼 user-2 的回复:除了main是.c文件以外，其他的都是.h文件吧引用结构类型的时候怎么引用？求指点~~

user: user-2
content: 除了main是.c文件以外，其他的都是.h文件吧
user-0 提问: C语言 新人请教一个问题。

回复:
user: user-0
content: 引用 5 楼 max_min_ 的回复:[quote=引用 4 楼 u012388912 的回复:] [quote=引用 3 楼 max_min_ 的回复:] 楼主为什么认为解密是返回-10的操作呢？ 假设a的话，加密+5变成了f，然后解密的话-5才能变成a的吧，如果-10，回不去了！  噢，，这点我理解错了。。  但是  假设经过加密函数abc后 a变成了f。 那下面调用解密函数的时候传给形参的值为什么是f而不是原先的a呢？  经过加密函数原字符串应该是不会变的啊？ [/quote] 第一：形参只有类型有用而已，里面放不放变量名都是没有关系的！ 第二：因为你传的数组名，数组作为参数的时候和指针是一样的，操作的是地址！当你修改地址上的内容的时候，显然当你再通过地址访问的时候，它的值已经发生变化的的！而且你这样是才是正确的！要不然也达不到加密的作用了![/quote]  明白了~  谢谢啦~~

user: user-1
content: 5楼正解

user: user-2
content: 引用 4 楼 u012388912 的回复:[quote=引用 3 楼 max_min_ 的回复:] 楼主为什么认为解密是返回-10的操作呢？ 假设a的话，加密+5变成了f，然后解密的话-5才能变成a的吧，如果-10，回不去了！  噢，，这点我理解错了。。  但是  假设经过加密函数abc后 a变成了f。 那下面调用解密函数的时候传给形参的值为什么是f而不是原先的a呢？  经过加密函数原字符串应该是不会变的啊？ [/quote] 第一：形参只有类型有用而已，里面放不放变量名都是没有关系的！ 第二：因为你传的数组名，数组作为参数的时候和指针是一样的，操作的是地址！当你修改地址上的内容的时候，显然当你再通过地址访问的时候，它的值已经发生变化的的！而且你这样是才是正确的！要不然也达不到加密的作用了!

user: user-0
content: 引用 3 楼 max_min_ 的回复:楼主为什么认为解密是返回-10的操作呢？ 假设a的话，加密+5变成了f，然后解密的话-5才能变成a的吧，如果-10，回不去了！  噢，，这点我理解错了。。  但是  假设经过加密函数abc后 a变成了f。 那下面调用解密函数的时候传给形参的值为什么是f而不是原先的a呢？  经过加密函数原字符串应该是不会变的啊？

user: user-2
content: 楼主为什么认为解密是返回-10的操作呢？ 假设a的话，加密+5变成了f，然后解密的话-5才能变成a的吧，如果-10，回不去了！

user: user-3
content: 运算是应该减5...............

user: user-4
content: 应该是-5，LZ可以运行看看啊
user-0 提问: 大神！帮帮忙！结构体里只有一个变量有什么意义？

回复:
user: user-0
content: 引用 4 楼 taodm 的回复:楼主可以去买一本《重构：改善既有代码的设计》，看代码的22种坏味道 之 基本数据类型偏执 引用 5 楼 u011488256 的回复:这个结构题里面的值很重要，单独开来。   或者他的存在标志着另外一个结构体来着·  大神，爱死你们了！

user: user-1
content: 这个结构题里面的值很重要，单独开来。   或者他的存在标志着另外一个结构体来着·

user: user-2
content: 楼主可以去买一本《重构：改善既有代码的设计》，看代码的22种坏味道 之 基本数据类型偏执

user: user-3
content: 你的看看ui32是怎么使用的（在哪些地方被调用）。

user: user-0
content: 引用 1 楼 user-4 的回复:有各种可能，正确的答案要问开发者 那么能不能举个例子呢？

user: user-4
content: 有各种可能，正确的答案要问开发者
user-0 提问: for循环语句与递归语句结合使用的执行过程？

回复:
user: user-1
content: 调试的时候单步执行，查看变量的值的变化。  引用 楼主 u012406782 的回复:字符串的全排列的实现代码：求执行过程？ void Permutation(char* pStr, char* pBegin)   {       assert(pStr && pBegin);          if(*pBegin == '\0')           printf("%s\n",pStr);       else       {           for(char* pCh = pBegin; *pCh != '\0'; pCh++)           {               swap(*pBegin,*pCh);               Permutation(pStr, pBegin+1);               swap(*pBegin,*pCh);           }       }   }

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

user: user-3
content: 好吧  今天比较闲 这个说起来比较复杂，不如画图清晰 abc为例 首先pCh和pBegin都指向a 进入第一次for循环 swap(a,a)相当于没交换 然后递归调用函数（设为函数2），参数分别是abc(pStr),bc(pBegin+1) 函数2中 pCh和pBegin都指向b 进入这个递归函数2的第一次for循环 在这里先swap， 在递归，设为函数3，参数分别是abc(pStr),c(pBegin+1) pCh和pBegin都指向c 进入函数3的第一次for循环 swap(c,c), 再递归，设为函数4，参数分别是abc(pStr),\0(pBegin+1) 注意，在递归函数4中，*pBegin=='\0',所以打印出abc,并且返回到调用它的函数，即函数3的for循环中 函数3执行Permutation函数后的swap，并且结束for循环，返回到调用它的函数，即函数2的for循环中 我们上面讨论过，函数2的参数是abc和bc，并且以上步骤在函数2中pCh指向的b 那么，下一次循环pCh指向c，进入for swap(b,c)，那么字符串就变成了acb 然后再递归调用Permutation（acb，cb） 按照之前的步骤，会输出acb  这样一步一步来，没有什么特殊的技巧，熟能生巧而已，最好的办法就是单步调试，跟踪变量的值

user: user-0
content: 我希望得到的是执行过程，一步一步的，举个简单的例子abc执行过程应该不是太多，求细致的讲解，小弟才大一实在是不懂？

user: user-3
content: 引用 3 楼 u012406782 的回复:还是不懂，能不能讲得更详细一些，拜托了。 自己举个例子，字符串abc 在算法的else部分里 首先以a作为第一个字符，递归全排列bc 然后pCh++，指向b，swap(a,b)就是以b作为第一个字符，再全排列ac 最后pCh指向字符c，swap(a,c)就是以c作为第一个字符，全排列ba

user: user-0
content: 还是不懂，能不能讲得更详细一些，拜托了。
user-0 提问: linux c程序往Mysql中插入一条数据。错误百出啊

回复:
user: user-1
content: gcc加这个： -L/usr/lib64/mysql -lmysqlclient 参考你的系统平台

user: user-2
content: 引用 楼主 abc594986308 的回复: /*往Mysql数据库中插入一条数据。好多未定义，还外带一个返回值错误，我的智商受不了啊。求大神来看看*/ #include<mysql/mysql.h>		//包含MySQL函数库 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() {    MYSQL *mysql;					// 声明MySQL操作符    MYSQL_RES *res;					// 声明结果集    MYSQL_ROW row;					// 声明行操作符    char sqlcmd[200];					// 保存插入语句    int t,r;    mysql=mysql_init(NULL);						// 初始化连接处理程序    if (!mysql_real_connect(mysql, "127.0.0.1", "root", "", "test", 0, NULL, 0)){	// 建立数据库连接       fprintf(stderr, "无法连接数据库，错误原因：%s\n",       mysql_error(mysql));	       							// 捕捉MySQL错误    }    else {       puts("数据库连接成功");       sprintf(sqlcmd, "%s", "insert into users(name,password) value(\'mr\',\'111\')");       t = mysql_real_query(mysql,sqlcmd,(unsigned int) strlen(sqlcmd));			// 执行插入语句       if (t)          printf("插入数据库失败：%s\n", mysql_error(mysql));       else {                       printf("插入成功！\n");          }                }       mysql_close(mysql);								// 关闭数据库连接    return EXIT_SUCCESS; }   贴下错误 在函数‘main’中： 14.2.c:(.text+0x21)：对‘mysql_init’未定义的引用 14.2.c:(.text+0x63)：对‘mysql_real_connect’未定义的引用 14.2.c:(.text+0x77)：对‘mysql_error’未定义的引用 14.2.c:(.text+0x130)：对‘mysql_real_query’未定义的引用 14.2.c:(.text+0x14e)：对‘mysql_error’未定义的引用 14.2.c:(.text+0x17b)：对‘mysql_close’未定义的引用 collect2: error: ld returned 1 exit status 在编译的时候要链接一下对应的动态链接库

user: user-3
content: 连接数据库了吗？

user: user-4
content: 你编译的时候连接库了吗？

user: user-5
content: 你是在什么平台上编译的，linux上么，编译的命令什么？
user-0 提问: 渐进时间复杂度的计算，谁还记得

回复:
user: user-1
content: 一个是时间复杂度，一个是渐近时间复杂度。前者是某个算法的时间耗费，它是该算法所求解问题规模n的函数，而后者是指当问题规模趋向无穷大时，该算法时间复杂度的数量级。

user: user-2
content: 引用 7 楼 truelance 的回复:你就不会百度一下么. 渐进时间复杂度就是普通说的时间复杂度(大O记法) 渐进时间复杂度T(n) = O(f(n))的要求是当n趋向无穷大时, T(n)/f(n)是一个非0常数. 引用 7 楼 truelance 的回复:你就不会百度一下么. 渐进时间复杂度就是普通说的时间复杂度(大O记法) 渐进时间复杂度T(n) = O(f(n))的要求是当n趋向无穷大时, T(n)/f(n)是一个非0常数. ++ 简单来说，就是商的极限是常量。

user: user-3
content: 引用 5 楼 u012915167 的回复:[quote=引用 4 楼 lidonghit 的回复:] 里面的求和为n-i-1。i=0一直加到i=n-2,即从n-1加到1得n(n-1)/2。 哟西.你还记得那个"E"的计算吗?[/quote] 请查查等差数列求和公式

user: user-4
content: 你就不会百度一下么. 渐进时间复杂度就是普通说的时间复杂度(大O记法) 渐进时间复杂度T(n) = O(f(n))的要求是当n趋向无穷大时, T(n)/f(n)是一个非0常数.

user: user-5
content: 真心觉得这个不是很常用

user: user-0
content: 引用 4 楼 lidonghit 的回复:里面的求和为n-i-1。i=0一直加到i=n-2,即从n-1加到1得n(n-1)/2。 哟西.你还记得那个"E"的计算吗?

user: user-3
content: 里面的求和为n-i-1。i=0一直加到i=n-2,即从n-1加到1得n(n-1)/2。

user: user-0
content: 引用 2 楼 lidonghit 的回复:一个是时间复杂度，一个是渐近时间复杂度。前者是某个算法的时间耗费，它是该算法所求解问题规模n的函数，而后者是指当问题规模趋向无穷大时，该算法时间复杂度的数量级。 我是说计算呢,概念你还记得哈.

user: user-3
content: 一个是时间复杂度，一个是渐近时间复杂度。前者是某个算法的时间耗费，它是该算法所求解问题规模n的函数，而后者是指当问题规模趋向无穷大时，该算法时间复杂度的数量级。

user: user-0
content: 抢到沙发
user-0 提问: 求大神帮忙看看这段代码

回复:
user: user-0
content: 找到原因了，，因为直接执行put()的话，，head就没有分配空间了，，用malloc给head分配个空间就行了  分享一下修改后的代码 #include<stdio.h> #include<stdlib.h> #include<malloc.h> #define N sizeof(struct person)  struct person { 	int num;//联系人序号 	char name[20];//联系人名字 	int phone;//联系人电话 	struct person *next; };  void menu();//主菜单 void put();//输出联系人 void save(struct person *head);//存储联系人 void add(struct person *head);//添加联系人 struct person *creat(int nn);  int i,j;  void main() { 	int aa; 	struct person *head; 	 	while(1) 	{ 		printf("输入\n"); 		scanf("%d",&aa); 		fflush(stdin); 		switch(aa) 		{ 		case 1:	head=creat(1); 				save(head);break;  		case 2:	put();break;  		case 3:	add(head); 				break; 		case 0: exit(0); 		} 	} 	 }  struct person *creat(int nn) { 	int n=0; 	int no;//记录联系人序号 	no=nn; 	struct person *head,*p1,*p2; 	p1=p2=(struct person *)malloc(N); 	p1->num=no; 	printf("输入联系人姓名:"); 	gets(p1->name); 	printf("输入联系人5位号码:"); 	scanf("%d",&p1->phone); 	head=NULL; 	while(p1->phone!=0) 	{ 		n=n+1; 		if(n==1)head=p1; 		else p2->next=p1; 		p2=p1; 		p1=(struct person *)malloc(N); 		fflush(stdin); 		printf("输入联系人姓名:"); 		gets(p1->name); 		no++; 		p1->num=no; 		printf("输入联系人5位号码:"); 		scanf("%d",&p1->phone); 		 	} 	p2->next=NULL; 	 	return head; 	  }   void save(struct person *head) { FILE *fp; 	if((fp=fopen("PhoneBook.dat","wb"))==NULL) 	{ 		printf("打开错误"); 		return; 	} 	struct person *p; 	p=head; 	if(head!=NULL) 	do 	{ 		if(fwrite(p,sizeof(struct person),1,fp)!=1) 		{printf("写入错误");} 		p=p->next; 	}while(p!=NULL); 	fclose(fp); }   void put() { 	FILE *fp; 	struct person *p; 	if((fp=fopen("PhoneBook.dat","rb"))==NULL) 	{ 			printf("打开错误"); 			return; 	} //	p=head; 	p=(struct person *)malloc(N*sizeof(struct person));  		while(fread(p,sizeof(struct person),1,fp)) 		{ 			printf("%d\t%s\t%d\t\n",p->num,p->name,p->phone); 			p++; 		} 	fclose(fp);	 }

user: user-0
content: 那个复制的时候漏掉了，，还有一件找到原因了，，谢谢啊

user: user-1
content: void main() {     int aa;             while(1)     {         printf("输入\n");         scanf("%d",&aa);         fflush(stdin);         switch(aa)         {         case 1:    head=creat(1);                 save(head);break;           case 2:    put(head);break;//这个head定义在哪里？？？？           case 3:    add(head);                 break;         case 0: exit(0);         }     }       }
user-0 提问: 关于归并排序的错误

回复:
user: user-1
content: 供参考： // // divide and conquer //   #include <stdio.h> #include <stdlib.h>   //#define N 10 #define N 9   void merge(int a[], // target 		   int b[], int bn, int c[], int cn) { 	int i, bi, ci;  	for (i=0, bi=0, ci=0; bi<bn && ci<cn; ) 	{ 		if (b[bi] <= c[ci]) 			a[i++] = b[bi++]; 		else 			a[i++] = c[ci++]; 	}  	if (bi < bn) 	{ 		while (bi < bn) a[i++] = b[bi++]; 	} 	else if (ci < cn) 	{ 		while (ci < cn) a[i++] = c[ci++]; 	} }  void merge_sort(int a[], int n) { 	if (n > 1) 	{ 		int b[N], c[N];  		memcpy(b, a, n/2 * sizeof(int)); 		memcpy(c, a + n/2, (n/2 + n%2) * sizeof(int));  		merge_sort(b, n/2); 		merge_sort(c, n/2 + n%2); 		merge(a, b, n/2, c, n/2 + n%2); 	} }   int main(void) { 	int a[N], i;  	// random N int-numbers 	srand((unsigned int)GetTickCount()); 	for (i = 0; i < N; i++) a[i] = rand();  	// print 	printf("Before sorting: \n"); 	for (i = 0; i < N; i++) printf("%d ", a[i]);  	merge_sort(a, N);  	// print 	printf("After sorting: \n"); 	for (i = 0; i < N; i++) printf("%d ", a[i]);  	getch(); 	return 0; }

user: user-2
content: msort(L->R,L->R,0,L->length-1);  归并排序需要2倍存储空间,  不能在自身空间上进行归并
user-0 提问: 我想问一下32数据异或和64数据异或时间为什么消耗的时间相差不大

回复:
user: user-1
content: 引用 3 楼 guogl1988 的回复:[quote=引用 1 楼 truelance 的回复:] 如果CPU是64位的, 那就应该是一样快啊. 如果CPU是32位的, 那64位运算才会慢. 哦，这样，与CPU位数有关，那就是说CPU内部对于按位异或操作是一个并行化的操作吗？在64位CPU中64个位上的数据都同时完成，对吗？[/quote] 是的

user: user-0
content: 引用 1 楼 truelance 的回复:如果CPU是64位的, 那就应该是一样快啊. 如果CPU是32位的, 那64位运算才会慢. 哦，这样，与CPU位数有关，那就是说CPU内部对于按位异或操作是一个并行化的操作吗？在64位CPU中64个位上的数据都同时完成，对吗？

user: user-0
content: 哦，这样，与CPU位数有关，那就是说CPU内部对于按位异或操作是一个并行化的操作吗？在64位CPU中64个位上的数据都同时完成，对吗？

user: user-1
content: 如果CPU是64位的, 那就应该是一样快啊. 如果CPU是32位的, 那64位运算才会慢.
user-0 提问: 如果英语不好，数学不好，啥也不好，能学好C/c++吗？

回复:
user: user-1
content: 引用 31 楼 zouanxu01 的回复:谢谢你们哦！，但是关于数学的算法，函数学好，还有那些，我现在是初中生。 佩服！加油！！！

user: user-1
content: 完全能胜任一个coder的工作， 但是永远成不了一名programmer.

user: user-2
content: 只要你喜欢编程,好好去学了, 我觉得一定可以!  跟英语.数学.什么的关系不大.  这么说吧,计算机本来就是一门比较杂的科目,英语你不会都可以(个人认为). 数学的话是研究数据结构等课程要用到的,跟你学习C/C++也没多大关系.  最后: 放开去学吧,祝你成功

user: user-3
content: 引用 31 楼 zouanxu01 的回复:谢谢你们哦！，但是关于数学的算法，函数学好，还有那些，我现在是初中生。看了这么久，才发现你是初中生，我  引用 46 楼 zhang5476499 的回复:答案是：能。但是你要想做出搞质量的程序，你花费的时间和脑力要比别人多。看看数据结构的头痛问题就知道啦。对了楼主，据我目前接触的编程与数学挂钩的问题，一般都不是和中学的数学挂钩，而是与大学的数学挂钩。

user: user-3
content: 哦，对了，这里先给楼主泼盆冷水，不是说学了某某语言之后，或者说放弃什么来一心学某某语言时候，你就可以当上总经理，迎娶白富美，走上人生巅峰的。   写代码的也有三六九等。如果你什么都不懂，只学C语言的话，那么很不幸，你就是干那些最底层的活，领情那点不够挥霍的薪水。   当然我相信随着你的深入学习，你的很多观念会越来越成熟的。

user: user-3
content: 答案是：能。但是你要想做出搞质量的程序，你花费的时间和脑力要比别人多。看看数据结构的头痛问题就知道啦。

user: user-4
content: 可以入门，想学精还是要看老外写的原版的书籍，国产的那些个垃圾书籍···

user: user-5
content: 引用 41 楼 u012967319 的回复:故事來自一本忘記的事  有2個數學家跟2個程式員一起坐火車去北京,他們坐了在一起  數學家問程式員:你們買了多少張票? 程式員回答:2張票! 數學家說:我們只買了一張票!  到了檢票時,數學家們躲了在廁所里,檢票員敲敲門,叫檢票啦!! 數學家說,我正在忙中,然後把票從門逢下申出,讓檢票員檢查.  回程時,2個數學家跟2個程式員又同一車了  數學家問程式員:你們買了多少張票? 程式員回答:1張! 數學家說:我們沒買票!  到了檢票時,程式員們躲了在廁所里,檢票員敲敲門,叫檢票啦!! 程式員說,我正在忙中,然後把票從門逢下申出,讓檢票員檢查.  這票一去就沒回過了 这个故事我可以转走吗？

user: user-6
content: 故事來自一本忘記的事  有2個數學家跟2個程式員一起坐火車去北京,他們坐了在一起  數學家問程式員:你們買了多少張票? 程式員回答:2張票! 數學家說:我們只買了一張票!  到了檢票時,數學家們躲了在廁所里,檢票員敲敲門,叫檢票啦!! 數學家說,我正在忙中,然後把票從門逢下申出,讓檢票員檢查.  回程時,2個數學家跟2個程式員又同一車了  數學家問程式員:你們買了多少張票? 程式員回答:1張! 數學家說:我們沒買票!  到了檢票時,程式員們躲了在廁所里,檢票員敲敲門,叫檢票啦!! 程式員說,我正在忙中,然後把票從門逢下申出,讓檢票員檢查.  這票一去就沒回過了

user: user-6
content: 英文不好不是什麼大不了,如果學深了,很多時候書是教不了你 都是要上網找的,資料最多的就是英文網,但現在國家人才出眾 已經有很多中文翻譯,英文已經不再是入門的條件了, 話是這麼說,但真的學深工作後,會與上很多變量,總不能A,B,C的改名吧 雖然英文文法用不上,但一點英文詞也得學學  數學不好就是大事,學程式可以不會數學,但開發有用的程式肯定離不開數學 由其想理解程式更深的一面,或看懂別人的程式,不會數學,就算知道程式過程, 也不知道到底在運算什麼,應該出什麼結果

user: user-3
content: 楼主，告诉你一个有意思的事。 我曾经主持公司的招聘工作，得出几个有趣的公式。  1. 编程能力强的，英语一般不好。 2. 英语好的，编程能力一般都不强。 3. 如果是D员，英语和编程都不强。

user: user-7
content: 去试了才知道，毕竟不一样的角度。

user: user-8
content: 数学和英语都比C++重要。

user: user-9
content: 今天不好不代表明天不好明天好不代表后天好只要每天好好学习就会越来越好。

user: user-10
content: 不会影响的,英语和编程语言完全是两码事,数学的话,也就是会运用到一些算法,不过算法不会很难,只要弄懂了算法的公式,剩下的就是+-*/了,因为计算机做的就只有基本的简单运算!

user: user-11
content: 不好分很多种  没天赋，咋学都没用 特别懒，就是不学，能好才怪 方法不对，事倍功半，找个好老师跟着学  看自己是哪一种，懒是最没得治的，懒人就该让他烂一辈子吧。

user: user-12
content: 数学还是要懂点，怎么说算法都是要求数学知识啊

user: user-13
content: 有兴趣学好的可能性会大些

user: user-0
content: 谢谢你们哦！，但是关于数学的算法，函数学好，还有那些，我现在是初中生。

user: user-14
content: 学校学不好只是代表你没学 又不是证明你笨你傻  用心学没什么学不会的
user-0 提问: printf  函数输出结果为0 为什么？是函数实参中的优先级问题吗？

回复:
user: user-1
content: 楼上你的答案输出是b=2，a=1 完全是因为你前面的输出是b=%d，a=%d 先输出的值是2*b的后输出的才是a+b 其运算的还是先算b=a+b，即是1。再算a=2*b，即是2。请不要偷换概念好吗？

user: user-2
content: 将a和b颠倒就正常？为什么？ #include <stdio.h> int main() { 	int a = 1, b = 0; 	//printf("b=%d,a=%d\n",b=a+b,a=2*b);  	//b=0,a=0 说明你的编译器是从右到左求值的，就是说先计算a=2*b,这时a=0,在计算b=a+b,这时b=0 	//如果换了编译器，可能就是先算b=a+b,这时b=1,再算a=2*b,这时a=2 	//编译器不同，就可能导致结果不同-->这就是所谓的“未定义行为” 	//所以，这样输出就不一样了：  	printf("b=%d,a=%d\n",a=2*b,b=a+b); // b=2,a=1 	return 0; }

user: user-3
content: 不懂lz在问什么，你的代码你好好看过了吗？ a，b都=0了，printf在怎么折腾a，b，难道还能出现不为0的值？？

user: user-2
content: 引用 17 楼 zhouda829829 的回复:楼上你的答案输出是b=2，a=1 完全是因为你前面的输出是b=%d，a=%d 先输出的值是2*b的后输出的才是a+b 其运算的还是先算b=a+b，即是1。再算a=2*b，即是2。请不要偷换概念好吗？ 恩，谢谢提醒！ 但这不是偷换概念，是我写的顺序错了。  printf("a=%d,b=%d\n",a=2*b,b=a+b); // a=2,b=1

user: user-0
content: #include <stdio.h> #include <conio.h> int main() {      int a=1,b=0;      a=2*b;      b=a+b;      printf("b=%d,a=%d\n",b,a);      getch(); }  这是用变量存储参数的代码，可结果还是0 为何？

user: user-0
content: 那就是在使用函数时，所有的参数用变量来存储，以防止  编译器决定了不确定的优先级  错误的发生？对吧?

user: user-4
content: 顶置贴就是给初学者看的. 要是你觉得他说的概念跟你学到的完全不一样,那就应该换本正常的书来入门.

user: user-5
content: 编译器决定了不确定的优先级。解决方法：尽量避免表达式作为参数入参。

user: user-0
content: 我想知道如何避免这种错误的发生和解决的方法，置顶贴看了但是太专业了，不是给初学者看的，置顶贴太啰嗦了，我只求解决方法，是否用汇编可以解决？

user: user-6
content: lz问的莫名其妙啊， PS：zhao老师知识真广博⊙﹏⊙b汗  引用 13 楼 zhao4zhong1 的回复:解决办法参考《仙剑奇侠传》中“书中仙”解决“沉思鬼”的“先迈左脚还是先迈右脚”问题的办法。

user: user-7
content: 解决办法参考《仙剑奇侠传》中“书中仙”解决“沉思鬼”的“先迈左脚还是先迈右脚”问题的办法。

user: user-8
content: #include <stdio.h> #include <conio.h> int main() {      int a=1,b=0;      a=2*b;     // 因为b = 0, 所以 a = 2 * b; 的最终结果也就是a = 0;      b=a+b;     // 因为a = 0, b = 0; 所以b = a + b; 的最终结果也就是b = 0;      // 现在a 和b 的结果都是0，LZ在问什么呢？      printf("b=%d,a=%d\n",b,a);      /* printf("b=%d,a=%d\n",b=a+b,a=2*b); */      getch(); }  LZ 想说这a 和 b 的结果不应该是0吗？  楼上讨论看置顶贴是什么意思啊？   这贴怎么看得那么迷糊啊！！！！~~~~      到底是个什么情况啊？

user: user-9
content: 属于未指定行为（unspecified behavior）因为函数参数的求值顺序未定~~ 参数的求值顺序 和 参数的入栈顺序 是两个概念 求值早于入栈 置顶贴不都说了吗

user: user-10
content: 怎么可能，printf，参数肯定是从左到右进行匹配的  int a=1,b=0;      a=2*b;      b=a+b  b=a+b不是0是什么？既然b=0，那b=2*a不就是0？

user: user-11
content: #include <stdio.h> #include <conio.h> int main() {      int a=1,b=0;      a=2*b;      b=a+b;      printf("b=%d,a=%d\n",b,a);      /* printf("b=%d,a=%d\n",b=a+b,a=2*b); */      getch(); } 结果 a=0，b=0     lz 认为答案是？

user: user-12
content: 说明编译器对参数从后往前求值。

user: user-13
content: 置顶帖没看了吧  你的做法就是 置顶帖描述的未定义行为

user: user-14
content: 这样试试： int main() {      int a=1,b=0;      printf("a=%d,b=%d\n",a+b,2*b);      return 0; ｝  这种简单的计算，可以自己心算一下； 至少可以笔算出结果； 然后在编译执行。  如果你自己计算了，就不会问为什么了！！！！！
user-0 提问: if（0）和if（1）有区别吗？代表布尔吗？

回复:
user: user-0
content: 引用 8 楼 AnYidan 的回复:引用 7 楼 ztzi321 的回复:[quote=引用 5 楼 Adol1111 的回复:] C/C++中非0表示真，但0一定表示假已解决！我笨了，写个程序就能解决！仍旧感谢！  教导的是，您学计算机多长时间了，向您学习！

user: user-1
content: 引用 7 楼 ztzi321 的回复:引用 5 楼 Adol1111 的回复:C/C++中非0表示真，但0一定表示假已解决！我笨了，写个程序就能解决！仍旧感谢！  真的不是苯不笨，而是根本没看书

user: user-0
content: 引用 5 楼 Adol1111 的回复:C/C++中非0表示真，但0一定表示假已解决！我笨了，写个程序就能解决！仍旧感谢！

user: user-0
content: 引用 1 楼 tyy_wjt 的回复:0代表假,1代表真   main() { 	if (1) 		printf("这部分会打印"); 	if (0) 		printf("这部分不打印"); }已解决！还是程序说了算！我笨了！

user: user-2
content: C/C++中非0表示真，但0一定表示假

user: user-0
content: 引用 1 楼 tyy_wjt 的回复:0代表假,1代表真   main() { 	if (1) 		printf("这部分会打印"); 	if (0) 		printf("这部分不打印"); }  int s; if（s）printf(); 如果s可以去0或者1怎么理解？ 是不是0时不打印，1时打印？你确定吗？

user: user-3
content: if（0）永远不成立 if（1）永远成立

user: user-4
content: C语言中，0代表false，非0代表true

user: user-5
content: 0代表假,1代表真   main() { 	if (1) 		printf("这部分会打印"); 	if (0) 		printf("这部分不打印"); }
user-0 提问: 二维数组怎么异或？

回复:
user: user-0
content: 有点迷糊，不知运行结果对不对？

user: user-1
content: 任何数之间都可以异或，不需要恰好都是15

user: user-0
content: 引用 9 楼 worldy 的回复:当然是通过逐个单元异或 比如i=3，j=4 state[3][4]=state[3][4]^ key[3][4]; 就是说我输进去的数是第三行第四列的数，恰好两个都是15，然后再将他们异或吗？

user: user-2
content: 引用 2 楼 u012620515 的回复:就是state[i][j]^=key[i][j]; 这两个数组里的元素怎么异或?  还是取的state[i][j]的值去和key[i][j]的值，进行异或操作的啊！他们本身也只是一个数值而已嘛！ 不要陷进去了

user: user-1
content: 当然是通过逐个单元异或 比如i=3，j=4 state[3][4]=state[3][4]^ key[3][4];

user: user-3
content: 引用 7 楼 u012620515 的回复:我就是不知道怎么把输进去的数，通过state[i][j]^=key[i][j]; 得出结果  printf() 然后在纸上用二进制算算，对照一下

user: user-0
content: 我就是不知道怎么把输进去的数，通过state[i][j]^=key[i][j]; 得出结果

user: user-4
content: 4 8 12 136?这是我运行后的结果

user: user-0
content: 我输出来的结果是: 4, 8, 12, 192. 不知道对不对

user: user-0
content: 我输出来的结果是4, 8 ,12 ,192. 我不知道对不对

user: user-5
content: 引用 2 楼 u012620515 的回复:就是state[i][j]^=key[i][j]; 这两个数组里的元素怎么异或?state[i][j]^=key[i][j];//这样就可以啊

user: user-0
content: 就是state[i][j]^=key[i][j]; 这两个数组里的元素怎么异或?

user: user-5
content: 你的问题到底是什么？
user-0 提问: Dec-C++编译报错

回复:
user: user-1
content: 引用 8 楼 u011322908 的回复:[quote=引用 2 楼 sundq12 的回复:] void createDateList(int (*date)[3],int &num){//此函数应该这样定义  是这样子的，改成这样那个问题就消失了，，，，不过想问一下为什么这样子定义。。。。[/quote]既然函数接收的是引用，那么当然需要在函数定义里面说明了，不然编译器怎么知道是值传递，还是引用传递呢，你可以研究一下引用的用法。

user: user-2
content: 引用 8 楼 u011322908 的回复:[quote=引用 2 楼 sundq12 的回复:] void createDateList(int (*date)[3],int &num){//此函数应该这样定义  是这样子的，改成这样那个问题就消失了，，，，不过想问一下为什么这样子定义。。。。[/quote]  那是因为后面的问题没有提出来而已！编译器卡在这个问题上了而已！  数组指针，指针数组，双指针！google下这些区别联系

user: user-0
content: 引用 2 楼 sundq12 的回复:void createDateList(int (*date)[3],int &num){//此函数应该这样定义  是这样子的，改成这样那个问题就消失了，，，，不过想问一下为什么这样子定义。。。。

user: user-0
content: 引用 4 楼 max_min_ 的回复:确实挺多基本错误的！楼主根据编译的时候编译器提示的基本语法错误把代码改过来吧！ 如果这些都不会的话，应该是基础不过关了，得找一本基础的c语言书籍补补了！ 编译器就提示了一个错误，，，，，，

user: user-0
content: 引用 3 楼 user-4 的回复:你的程序问题好多啊，至于报错的话是因为这里： void createDateList(int (*date)[3],int &num); void createDateList(int (*date)[3],int num){……}  其他方面有好多问题，先说几条，其他的自己改改吧！  数组在做参数的时候会退化成普通的指针，所以不如直接用二维指针，你这样做有个[3]在这，还会引起歧义。  还有指针存储的内容虽然是地址传递，但本身指针只是普通的变量，仍然是值传递，所以针对指针本身的操作，比如new是无效的，你可以这样void createDateList(int (*&date)[3],int &num)用引用传递。否则main里的date和num都没有被修改。  还有：scanf("%d-%d-%d",&date[i][0],&date[i][1],&date[i][2]); 你少了。  还有这里：int main(){ 	int (*date)[3]; 	date=NULL;//初始化 	int num=0;//C++不允许直接使用未初始化变量，养成好习惯 	createDateList(date,num); 	getNearestDate(date,num); } 暂时先指出这点问题，其他的问题自己再改改吧。 恩恩，问题已经解决

user: user-3
content: void createDateList(int *date[3],int &num);

user: user-2
content: 确实挺多基本错误的！楼主根据编译的时候编译器提示的基本语法错误把代码改过来吧！ 如果这些都不会的话，应该是基础不过关了，得找一本基础的c语言书籍补补了！

user: user-4
content: 你的程序问题好多啊，至于报错的话是因为这里： void createDateList(int (*date)[3],int &num); void createDateList(int (*date)[3],int num){……}  其他方面有好多问题，先说几条，其他的自己改改吧！  数组在做参数的时候会退化成普通的指针，所以不如直接用二维指针，你这样做有个[3]在这，还会引起歧义。  还有指针存储的内容虽然是地址传递，但本身指针只是普通的变量，仍然是值传递，所以针对指针本身的操作，比如new是无效的，你可以这样void createDateList(int (*&date)[3],int &num)用引用传递。否则main里的date和num都没有被修改。  还有：scanf("%d-%d-%d",&date[i][0],&date[i][1],&date[i][2]); 你少了。  还有这里：int main(){ 	int (*date)[3]; 	date=NULL;//初始化 	int num=0;//C++不允许直接使用未初始化变量，养成好习惯 	createDateList(date,num); 	getNearestDate(date,num); } 暂时先指出这点问题，其他的问题自己再改改吧。

user: user-1
content: void createDateList(int (*date)[3],int &num){//此函数应该这样定义

user: user-0
content: 代码如有不懂，请说一下，在线等
user-0 提问: 求教c语言的小问题

回复:
user: user-1
content: 引用 2 楼 u010484985 的回复:谢谢哈，解决了，麻烦你了。 问题解决了！及时结贴！左上角或者左下角！谢谢。

user: user-0
content: 谢谢哈，解决了，麻烦你了。

user: user-2
content: char * str_ncopy(char * str1, const char * str2, int n) {     char * tmp = str1;     int i = 0,     j = 0;     while ( * str2++);//此时循环结束之后，指针已经指向零之后的位置了，所以有误  //这样试试 /* while(*str2) {    str2++; } */     while (n > 0 && ( * str1++=*str2++)) {         n--;     }     /*while(n>0){ str1[i]=str2[j]; i++; j++; n--; }*/     if (n == 0) str2 = '\0';     //str[i]='\0';     return tmp;  }
user-0 提问: 求问此C语言程序问题

回复:
user: user-1
content: 2楼正解

user: user-2
content: 引用 5 楼 u010484985 的回复:我都断点查看过，也查出了是这一段的问题。	               	while(i>=0){ 		p[j]=str[i]; 		i--; 		j++; 	} 不过这段程序  不是把 str[4]赋值到str[0],str[3]赋值到str[1],就这样循环下去的意思么 而且比如输入123456789  他输出结果987656789，为什么就是到了后几位就赋值不了呢。 请大神帮帮忙，小弟刚学，各位可能觉得很简单，但小弟有点理解不了，希望帮忙解答一下。 你把str[0]用str[4]代替了，那么原本的str[0]不就没了么？那你一点点递减，超过一半以后，不就是在复制刚刚替换掉的内容了么？ 我在2楼写了方法了，就是新建一个数组，把内容拷贝到另外一个数组，不影响原来的数组。

user: user-3
content: 6楼正解 楼主哪里还不明白

user: user-4
content: while(i>=0)这个循环条件不对，应该到中间位置而不是0

user: user-0
content: 我都断点查看过，也查出了是这一段的问题。	               	while(i>=0){ 		p[j]=str[i]; 		i--; 		j++; 	} 不过这段程序  不是把 str[4]赋值到str[0],str[3]赋值到str[1],就这样循环下去的意思么 而且比如输入123456789  他输出结果987656789，为什么就是到了后几位就赋值不了呢。 请大神帮帮忙，小弟刚学，各位可能觉得很简单，但小弟有点理解不了，希望帮忙解答一下。

user: user-5
content: 卤煮输出的是4334吧，你一直在操作同一个数组，所以没有达到你的目的，你要好好弄清楚为什么不对呀。

user: user-2
content: 自己设断点调试，这个是程序员必须要学会的。

user: user-2
content: 因为这一段： while(i>=0){ str[j]=str[i];//你后面的内容覆盖了前面的内容，当然重复了。 i--; j++; } 用两个数组就可以了： #include<stdio.h> void str_reverse(char *str,char *tmp){ 	int i=0,j=0; 	while(str[i]!='\0'){ 		i++; 	} 	i--; 	while(i>=0){ 		tmp[j]=str[i]; 		i--; 		j++; 	} 	tmp[j]='\0'; }  int main(){ 	char str[100]; 	char tmp[100]; 	printf("文字列："); 	scanf("%s",str); 	str_reverse(str,tmp); 	printf("结果：%s\n",tmp); 	return 0; }

user: user-6
content: 自己断住调试。
user-0 提问: 关于自己用c构造汇编语句[一本书<老码识途>中的一个问题]

回复:
user: user-0
content: c7 05 （mov指令）30 81 14 01（gi地址） 12 00 00 00（18的16进制）  ff 25 （jmp指令）34 81 14 01（原来的地址）  就是把整数18赋值给gi，然后再跳出去
user-0 提问: 帮帮忙！！

回复:
user: user-0
content: 我 理解了，谢谢你！

user: user-1
content: 引用 4 楼 u012620515 的回复:if(st[i-1]&0x80) st[i]^=0x1b; 请问这个语句呢？主要是不懂&的用法 &就是与的意思，也就是按位与 0x80二进制是1000,0000 假如st[i-1]二进制是1111,1111 每一个相对应的位都进行&操作 所以结果就是1000,0000 再假如st[i-1]二进制是0111,1111 &0x80之后就是（0111,1111）&（1000,0000）=0000,0000

user: user-0
content: if(st[i-1]&0x80) st[i]^=0x1b; 请问这个语句呢？主要是不懂&的用法

user: user-2
content: st[i]=st[i-1]<<1;  // st[i]=st[i-1] * 2; 的装B写法 if((t1>>i)&0x01)   // 判断t1的第i比特是否为1

user: user-1
content: <<是左移操作符 比如st[i-1]=4，二进制就是0100，st[i-1]<<1=0100<<1=1000,就是8 同理，>>是右移  &是逻辑与运算，0x01代表十六进制的1，也就是除了最低位1，其余全部是0 所以就是检查t1右移i位后，最低位是否为1

user: user-3
content: st[i]=st[i-1]<<1;//将st[i-1]乘以2的值赋给st[i]，左移一位等于乘以2 if((t1>>i)&0x01)//将t1右移i位，然后检查最后一位是否是1
user-0 提问: 调用system后，它下面的第一个语句就不执行了怎么回事

回复:
user: user-1
content: 单步

user: user-2
content: 引用 5 楼 yangyangsnr 的回复:[quote=引用 1 楼 user-4 的回复:] 我的机器上正常。 嗯，把这几条语句单独拿出来是正常的，但是一放到整体里就会出现上述问题，真奇怪[/quote] 应该不是缓冲区的问题，因为后面有换行符，有刷新缓冲区的！ 是不是system函数执行阻塞了？

user: user-3
content: 引用 7 楼 yangyangsnr 的回复:[quote=引用 6 楼 user-4 的回复:] 1.你怎么知道这条语句被跳过了，你单步调试的时候跳过了还是只是没有打印出来。 2.如果只是没有打印出来，那么可以使用一下fflush试试。 一开始是没有这个printf的，直接是Sleep，结果根本就没有停顿，然后在它下面加了个system("PAUSE")，也不行，最后加了这个printf，printf不显示，但是Sleep就起作用了... 刚才用VC6编译了一下，问题就不出现了。难道真的是编译器的问题？还是整段代码本身就有隐患...[/quote] 是缓冲区不一样吧，DEVC++可能留在缓冲区里了，要用fflush强制冲刷吧。VC6直接就出来了。没用过DEVC++，不清楚，你试试？

user: user-0
content: 引用 6 楼 user-4 的回复:1.你怎么知道这条语句被跳过了，你单步调试的时候跳过了还是只是没有打印出来。 2.如果只是没有打印出来，那么可以使用一下fflush试试。 一开始是没有这个printf的，直接是Sleep，结果根本就没有停顿，然后在它下面加了个system("PAUSE")，也不行，最后加了这个printf，printf不显示，但是Sleep就起作用了... 刚才用VC6编译了一下，问题就不出现了。难道真的是编译器的问题？还是整段代码本身就有隐患...

user: user-4
content: 1.你怎么知道这条语句被跳过了，你单步调试的时候跳过了还是只是没有打印出来。 2.如果只是没有打印出来，那么可以使用一下fflush试试。

user: user-0
content: 引用 1 楼 user-4 的回复:我的机器上正常。 嗯，把这几条语句单独拿出来是正常的，但是一放到整体里就会出现上述问题，真奇怪

user: user-4
content: 引用 3 楼 yangyangsnr 的回复:[quote=引用 2 楼 yangyangsnr 的回复:] [quote=引用 1 楼 user-4 的回复:] 我的机器上正常。 晕，不会吧，我在这边试了好多回了，紧接着system语句下面写什么语句都会被跳过，然后从它下面的第二条语句开始执行[/quote] 用的DEVC++[/quote]我也用的是DEVC++好着呢，你但不调试一下看看。

user: user-0
content: 引用 2 楼 yangyangsnr 的回复:[quote=引用 1 楼 user-4 的回复:] 我的机器上正常。 晕，不会吧，我在这边试了好多回了，紧接着system语句下面写什么语句都会被跳过，然后从它下面的第二条语句开始执行[/quote] 用的DEVC++

user: user-0
content: 引用 1 楼 user-4 的回复:我的机器上正常。 晕，不会吧，我在这边试了好多回了，紧接着system语句下面写什么语句都会被跳过，然后从它下面的第二条语句开始执行

user: user-4
content: 我的机器上正常。
user-0 提问: 你知道这些为啥这么输出么？

回复:
user: user-1
content: l是long的意思，x是十六进制的意思，d是十进制的意思，例如： %llx相当于long long十六进制输出格式  引用 楼主 qiyoufei 的回复:以下代码编译输出表示什么意思？为什么输出是这样的？诸位路过的帮忙看下，多谢。  int main() {         int i;         for (i= 14; i < 17; ++i)         { 	                long long x = 1024*1024*1024*i; 	                printf("0x%llX,%lld\n", x, x);         }          printf("\n0x%llX,0x%llX,0x%llX\n",\ 1024*1024*1024*1024*14, 1024*1024*1024*1024*15, 1024*1024*1024*1024*16);         printf("%lld,	%lld,	%lld\n",\ 1024*1024*1024*1024*14, 1024*1024*1024*1024*15, 1024*1024*1024*1024*16);          printf("\n0x%llX,0x%llX,0x%llX\n",\  0xFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF);//14,15,16         printf("%lld,	%lld,	%lld\n",\  0xFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF);		//14,15,16         printf("%d\n", sizeof(long long));         return 0; } 下图为linux下的编译输出、运行输出：   下图为windows32位下的vs2010编译输出、运行输出：

user: user-2
content: 数字太大了，类型装不下，每个类型都有最大值限制的。需要使用大数运算。
user-0 提问: 看起来像函数定义，但没有参数列表；跳过明显的函数体

回复:
user: user-1
content: 不需要传人参数的main函数

user: user-2
content: 引用 14 楼 truelance 的回复:难道LZ用的是20年前的c教材, 居然用的还是K&R Version 1的函数定义风格. K&R的风格是 main()好不好，连返回类型void都没有。 你那个void main(void)其实和楼主的没本质区别。 标准的写法是：int main(void){     return 0; }  int main(int argc , char*[] argv){     return 0; }

user: user-3
content: 难道LZ用的是20年前的c教材, 居然用的还是K&R Version 1的函数定义风格.

user: user-3
content: 第一行改成 void main(void)

user: user-2
content: 我看到有一堆中文的“，”，不知道是否是这个错误

user: user-4
content: 如果用VC6.0的话，用英文版，把原文贴上来 看不懂英文就别用VC6.0了，用更高版本的  从楼主贴上来的代码中能够看出来的问题，就只有一堆中文符号 写代码要用全英文标点符号，中文标点符号只能作为字符串使用

user: user-5
content: 刚学c就用上   #include <stdafx.h>  了？  还是找本靠谱点的c教程好。 个人推荐 <<C Primer Plus>>

user: user-6
content: 为什么不是stdio。h啊

user: user-7
content: 引用 楼主 u012938896 的回复:#include <stdafx.h> void main（） { float n1，n2，n3，n4,sum,aver; scanf（"%f，%f，%f，%f"，&n1,&n2,&n3,&n4): sum=n1+n2+n3+n4; aver=sum/4; printf("%f=sum\n%f=aver",sum,aver); } 刚开始学C语言不知道这要怎么解决   求大神解说  说的啥？ 没看懂...

user: user-8
content: 引用 楼主 u012938896 的回复:#include <stdafx.h> void main（） { float n1，n2，n3，n4,sum,aver; scanf（"%f，%f，%f，%f"，&n1,&n2,&n3,&n4): sum=n1+n2+n3+n4; aver=sum/4; printf("%f=sum\n%f=aver",sum,aver); } 刚开始学C语言不知道这要怎么解决   求大神解说  解决神马？

user: user-9
content: 引用 7 楼 u012938896 的回复:#include <stdafx.h> void main（） { float n1，n2，n3，n4,sum,aver; scanf（"%f，%f，%f，%f"，&n1,&n2,&n3,&n4): sum=n1+n2+n3+n4; aver=sum/4; printf("%f=sum\n%f=aver",sum,aver); }  调试错误说： 看起来像函数定义，但没有参数列表；跳过明显的函数体 ，不懂怎么弄  我去，你这是英文编译器然后用谷歌翻的？中文编译器应该不会有这种提示吧 你这个代码是直接复制上来的吗，怎么一堆的全角符号啊，另外scanf末尾还有个冒号，头文件改成stdio.h，别的应该没有问题

user: user-0
content: #include <stdafx.h> void main（） { float n1，n2，n3，n4,sum,aver; scanf（"%f，%f，%f，%f"，&n1,&n2,&n3,&n4): sum=n1+n2+n3+n4; aver=sum/4; printf("%f=sum\n%f=aver",sum,aver); }  调试错误说： 看起来像函数定义，但没有参数列表；跳过明显的函数体 ，不懂怎么弄

user: user-10
content: LZ想表达啥

user: user-11
content: 看起来像函数定义，但没有参数列表；跳过明显的函数体  这句话没有主语

user: user-12

user: user-13
content: scanf是库函数。
user-0 提问: 有一个问题想问大家

回复:
user: user-1
content: 如果是c++ 就用g++了！

user: user-0
content: 引用 2 楼 turingo 的回复:c++用g++编译，这里http://development-software.findthebest.com/compare/15-16/Code-Blocks-vs-CodeLite有一个完整的比较表。嗯，谢谢你！

user: user-0
content: 引用 1 楼 max_min_ 的回复:如果是c++ 就用g++了！那g++能不能编译C呢？

user: user-2
content: gcc好像也能编译cpp文件，要加选项指定

user: user-3
content: c++用g++编译，这里http://development-software.findthebest.com/compare/15-16/Code-Blocks-vs-CodeLite有一个完整的比较表。
user-0 提问: C语言字符串验证。速速帮忙谢谢

回复:
user: user-1
content: 1. 首先你需要考虑编码的问题，各个编码方式下汉子的编码不一样。 2. 你需要搞明白各个编码方式下（如UTF8）汉子的识别方式。  google一下很多的。
user-0 提问: 求c高手进来啊！！！为什么会爆呢

回复:
user: user-1
content: 简单的修改下： void comeout(plist pl){ 	…… 	while (c>0){//这里多算了一次 		…… 	} }

user: user-2
content: 爆炸是气体膨胀的速度过快！
user-0 提问: 求大神来解答此问题

回复:
user: user-0
content: fgetc 成功时返回读到一个字节，本来应该是unsigned char型的，但由于函数原型中返回值是int型，所以这个字节要转换成int型再返回，那为什么要规定返回值是int型呢？因为出错或读到文件末尾时 fgetc将返回EOF，即-1，保存在int型的返回值中是0xffffffff，如果读到字节0xff，由unsigned char型转换为int型是0x000000ff，只有规定返回值是int型才能把这两种情况区分开，如果规定返回值是unsigned char型，那么当返回值是0xff时无法区分到底是EOF还是字节0xff。如果需要保存fgetc的返回值，一定要保存在int型变量中，如果写成 unsigned char c = fgetc(fp);，那么根据c的值又无法区分EOF和0xff字节了。注意，fgetc读到文件末尾时返回EOF，只是用这个返回值表示已读到文件末尾，并不是说每个文件末尾都有一个字节是EOF（根据上面的分析，EOF并不是一个字节）。
user-0 提问: pthread_mutex_t 和 alarm 一起用为什么就无效了？

回复:
user: user-1
content: 引用 1 楼 user-3 的回复:http://www.cppblog.com/mysileng/archive/2013/01/05/196971.html看看这个文章就知道怎么回事了，要学会google嘛。 学习了

user: user-2
content: void *pthread_func(void * arg) 锁了 然后 print 0 1秒过了 触发SIGALRM void sig_handler(int signo) 再请求锁 好了，竞争了就堵死了

user: user-3
content: http://www.cppblog.com/mysileng/archive/2013/01/05/196971.html看看这个文章就知道怎么回事了，要学会google嘛。
user-0 提问: 提问！

回复:
user: user-1
content: 引用 5 楼 chenlianghx 的回复:你们的意思是s1[i++]=s2[j++];是先将j放入i,然后再将j++放入i++，是吗，感觉看起来很不习惯啊 警告：一句话内最好不要出现两个以上++，禁止是同名的变量++出现2次以上。不然都是未定义行为，以上的解释都会产生问题。仅当当前情况下，上面的情况是正确的。 建议：分开写，s1[i]=s2[j];i++;j++; 关于未定义行为，看置顶贴：http://bbs.csdn.net/topics/370153775

user: user-0
content: 你们的意思是s1[i++]=s2[j++];是先将j放入i,然后再将j++放入i++，是吗，感觉看起来很不习惯啊

user: user-2
content: 引用 2 楼 turingo 的回复:i++是执行完之后在加，所以： while(s1[i]!='\0') i++; 时i指向的是'\0'  而后的s1[i++]恰好是把'\0'覆盖了。+++++++++++

user: user-3
content: i++的意思是，当前操作是用i的值，然后i再自加1.如果是++i，才是i自加1之后再进行别的计算。 参见前++和后++

user: user-4
content: i++是执行完之后在加，所以： while(s1[i]!='\0') i++; 时i指向的是'\0'  而后的s1[i++]恰好是把'\0'覆盖了。

user: user-5
content: S2的内容(不包括S2的'\0') ，从S1的'\0'开始覆盖.. 最后再给S1结尾处加'\0'..

user: user-0
content: 引用 6 楼 Adol1111 的回复:[quote=引用 5 楼 chenlianghx 的回复:] 你们的意思是s1[i++]=s2[j++];是先将j放入i,然后再将j++放入i++，是吗，感觉看起来很不习惯啊 警告：一句话内最好不要出现两个以上++，禁止是同名的变量++出现2次以上。不然都是未定义行为，以上的解释都会产生问题。仅当当前情况下，上面的情况是正确的。 建议：分开写，s1[i]=s2[j];i++;j++; 关于未定义行为，看置顶贴：http://bbs.csdn.net/topics/370153775[/quote] 谢谢！

user: user-6
content: 引用 2 楼 turingo 的回复:i++是执行完之后在加，所以： while(s1[i]!='\0') i++; 时i指向的是'\0'  而后的s1[i++]恰好是把'\0'覆盖了。re
user-0 提问: 传址报错

回复:
user: user-0
content: 引用 1 楼 user-2 的回复:int Add(int & a)// & 是c++的引用操作，  要写成： int Add(int *a) {     *a = 3;     return 0; }  调用处改成： Add(&b); 我刚刚实验了一下 使用C++ 两种方式都可以，使用C语言就只能写成您提供的方式 异常信息中报的是语法错误，C语言中不能使用int Add(int & a)这种方式传参数吗

user: user-1
content: #include <stdio.h>  /** 这里用&是C++的引用，C语言是不支持的，可以改用指针来实现 */ int Add(int* a) { 	*a = 3; 	return 0; }  int main(int argc, char* argv[]) { 	int b = 5; 	Add(&b);	/* 这里调用的时候由于是指针，所以要传入b的地址 */ 	printf("%d\n", b); 	return 0; }

user: user-2
content: int Add(int & a)// & 是c++的引用操作，  要写成： int Add(int *a) {     *a = 3;     return 0; }  调用处改成： Add(&b);
user-0 提问: 问一个关于c primer plus一书中的浮点数显示问题

回复:
user: user-1
content: 引用 8 楼 hiteety 的回复:引用 1 楼 Adol1111 的回复:有误差是正常的，计算机在存储的时候是以二进制存储的，但十进制是不能完全转换成二进制的。具体看看float、double二进制的编码就知道了。多谢，是你说的问题，我改为double就没误差了，谢谢！ 换double也难说，总之不要信任浮点数就可以了。double能精确的是15位，但谁能保证第16位是没问题的呢？你这里也只是没看到后面几位而已。看看这篇文章吧，希望对你有用：http://www.cnblogs.com/fromchaos/archive/2010/12/07/1898698.html

user: user-0
content: 引用 5 楼 user-3 的回复:引用 4 楼 hiteety 的回复:[quote=引用 2 楼 user-3 的回复:] %f ----> %.2f你这么只是欺骗嘛  搜搜：浮点数规格化 或者直接试试： http://www.binaryconvert.com/convert_double.html?decimal=048046048049[/quote]嗯，多谢了。

user: user-0
content: 引用 7 楼 czarten 的回复:引用 3 楼 hiteety 的回复:[quote=引用 1 楼 Adol1111 的回复:] 有误差是正常的，计算机在存储的时候是以二进制存储的，但十进制是不能完全转换成二进制的。具体看看float、double二进制的编码就知道了。float的精度都能到六位有效数字，这个数21.29也会有误差？  21.29跟21.290001这不就是6位的精度么 2楼是正确做法，这不是什么欺骗，而是浮点数保存的本来就不是准确值，所以你任何方式都输不出准确值来[/quote]多谢回复，已经理解了，二楼的做法是让显示没有误差，我的意思是想了解误差的来源，所以才这么说。总的来讲，感谢你们。

user: user-0
content: 引用 1 楼 Adol1111 的回复:有误差是正常的，计算机在存储的时候是以二进制存储的，但十进制是不能完全转换成二进制的。具体看看float、double二进制的编码就知道了。多谢，是你说的问题，我改为double就没误差了，谢谢！

user: user-2
content: 引用 3 楼 hiteety 的回复:引用 1 楼 Adol1111 的回复:有误差是正常的，计算机在存储的时候是以二进制存储的，但十进制是不能完全转换成二进制的。具体看看float、double二进制的编码就知道了。float的精度都能到六位有效数字，这个数21.29也会有误差？  21.29跟21.290001这不就是6位的精度么 2楼是正确做法，这不是什么欺骗，而是浮点数保存的本来就不是准确值，所以你任何方式都输不出准确值来

user: user-1
content: 引用 3 楼 hiteety 的回复:引用 1 楼 Adol1111 的回复:有误差是正常的，计算机在存储的时候是以二进制存储的，但十进制是不能完全转换成二进制的。具体看看float、double二进制的编码就知道了。float的精度都能到六位有效数字，这个数21.29也会有误差？ float虽然是精确到第六位，但是还有个不精确的第7位，你能保证在第7位上没问题么？编译器对浮点数的优化不同结果也会不同，谁知道会怎么样。还是不要太信任浮点数比较好。

user: user-3
content: 引用 4 楼 hiteety 的回复:引用 2 楼 user-3 的回复:%f ----> %.2f你这么只是欺骗嘛  搜搜：浮点数规格化 或者直接试试： http://www.binaryconvert.com/convert_double.html?decimal=048046048049

user: user-0
content: 引用 2 楼 user-3 的回复:%f ----> %.2f你这么只是欺骗嘛

user: user-0
content: 引用 1 楼 Adol1111 的回复:有误差是正常的，计算机在存储的时候是以二进制存储的，但十进制是不能完全转换成二进制的。具体看看float、double二进制的编码就知道了。float的精度都能到六位有效数字，这个数21.29也会有误差？

user: user-3
content: %f ----> %.2f

user: user-1
content: 有误差是正常的，计算机在存储的时候是以二进制存储的，但十进制是不能完全转换成二进制的。具体看看float、double二进制的编码就知道了。
user-0 提问: 这到底哪错了？？？？？

回复:
user: user-1
content: 引用 1 楼 user-2 的回复:malloc的参数是内存大小，单位为字节 malloc(10);申请10字节内存，一个指针大小为4字节，这块内存只能存放两个半指针 使用malloc的时候输入“数量*sizeof(类型）” +1  malloc的时候必须用sizeof来求啊..手动估计遇到内存对齐就完了。

user: user-2
content: malloc的参数是内存大小，单位为字节 malloc(10);申请10字节内存，一个指针大小为4字节，这块内存只能存放两个半指针 使用malloc的时候输入“数量*sizeof(类型）”
user-0 提问: 帮忙看看，指针赋值问题。

回复:
user: user-1
content: 引用 2 楼 N_sev7 的回复:好好看看指针到底是怎么回事吧 指针式怎么使用的 最起码的， int *p;///声明  *p表示p是一个整形指针 p = &a； int b = *p;   ///////这个时候*p就是使用p指向的变量 好好翻翻书吧re

user: user-2
content: 建议楼主多打打基础。基础不行啦。

user: user-3
content: 最基础的变量定义，语法规则不了解先别看指针了吧

user: user-4
content: 好好看看指针到底是怎么回事吧 指针式怎么使用的 最起码的， int *p;///声明  *p表示p是一个整形指针 p = &a； int b = *p;   ///////这个时候*p就是使用p指向的变量 好好翻翻书吧

user: user-5
content: int a,a=*p; 这显然错误了，用逗号隔开，会导致a重定义，当然，你的p也没申明
user-0 提问: socke()错误 :File descriptor in bad state

回复:
user: user-1
content: 引用 4 楼 shangyu0801 的回复:[quote=引用 1 楼 ws_yqr 的回复:] 当connect连接失败时，套接字不可用了，必须关闭后重新socket分配才行。 不能通过啥清除错误的方法，去清掉此类错误继续使用么？[/quote]没见过哪里提过有清除错误的方法

user: user-0
content: 引用 1 楼 ws_yqr 的回复:当connect连接失败时，套接字不可用了，必须关闭后重新socket分配才行。 不能通过啥清除错误的方法，去清掉此类错误继续使用么？

user: user-2
content: 这个报错是说文件描述符不可用，socket未释放不能重复用

user: user-3
content: close掉再开一个socket，因为前一个socket已经bind过端口不能复用了。

user: user-1
content: 当connect连接失败时，套接字不可用了，必须关闭后重新socket分配才行。
user-0 提问: 一个用带参宏定义字符串的语法

回复:
user: user-1
content: 也推荐使用sprintf函数来做！

user: user-2
content: 用ssprintf函数，或者是直接用字符串数组，例如： char str[32]; ssprintf(str, "little_pig_location_%d", version);  引用 楼主 zhuhellozhu 的回复:我有一个系列的字符串，大概是 little_pig_location_1,little_pig_location_2 这样一个系列  之前用了一堆土办法的宏定义了5个location，现在要加到50个，就不能再每个都挨个定义了。  找了一些办法，但是没有通过编译，求解  #define HEADER "little_pig_location_" #define GetVersion(x) HEADER##x printf("%s\n", GetVersion("version1"));

user: user-3
content: 没有看懂你的问题

user: user-4
content: 引用 4 楼 user-5 的回复:[ codes]$ ./main  loc1=little_pig_location_0 loc2=little_pig_location_1 [ codes]$ cat main.cc  #include <stdio.h>  #define make_str(token) #token #define make_word(index) make_str(little_pig_location_##index)  int main(int argc, char *argv[]) {     const char *loc1 = make_word(0);     const char *loc2 = make_word(1);     printf("loc1=%s loc2=%s\n", loc1, loc2);     return 0; }  相邻的字符串自动连接

user: user-5
content: [ codes]$ ./main  loc1=little_pig_location_0 loc2=little_pig_location_1 [ codes]$ cat main.cc  #include <stdio.h>  #define make_str(token) #token #define make_word(index) make_str(little_pig_location_##index)  int main(int argc, char *argv[]) {     const char *loc1 = make_word(0);     const char *loc2 = make_word(1);     printf("loc1=%s loc2=%s\n", loc1, loc2);     return 0; }
user-0 提问: 尾插法建立链表的一些操作程序运行就会显示错误，就大神指教

回复:
user: user-1
content: 你建立的链表有问题，改成这样： linklist tail_createlist(linklist list,int * n){ 	list = (linklist)malloc(sizeof(listnode));//头结点分配空间 	//变量声明 	linklist p,r;	//r为尾指针 	r = list; 	//list = NULL; 	 	datatype  ch; 	while ((ch = getchar()) != '\n'){ 		p = (linklist)malloc(sizeof(listnode)); 		++ *n; 		p->data = ch; 		r->next = p; 		r = p; 	} 	r->next = NULL; 	return (list); }

user: user-1
content: 见你的新帖： 附上答复 关于尾链 /* *	尾插法建立链表并进行排序（大到小），倒置； */  linklist tail_createlist(linklist list,int * n){ list = (linklist)malloc(sizeof(listnode));//头结点分配空间 //变量声明 linklist p,r;	//r为尾指针 r =list = NULL;	 datatype  ch; while ((ch = getchar()) != '\n'){ p = (linklist)malloc(sizeof(listnode)); ++ *n; p->data = ch; r->next = p; r = p; } r->next = NULL; return (list); } 这个函数的这句话 r =list = NULL;	 改成： r = list; list = NULL;

user: user-2
content: list = (linklist)malloc(sizeof(listnode));//头结点分配空间 	//变量声明 	linklist p,r;	//r为尾指针 	r = p = NULL; 之前给list分配了空间后面又为什么要赋值NULL呢？
user-0 提问: 关于网络字节序的问题 

回复:
user: user-1
content: 这个大端说的是网络协议里面那些内容比如ip地址端口号啊; 至于你发的内容想怎么发就怎么发,和对方定义好就行了

user: user-2
content: htonl,htons ntohl,ntohs

user: user-3
content: 这个比较靠谱  引用 5 楼 AnYidan 的回复:按byte 发送，在接收端解析收到的byte数组

user: user-4
content: 发送是以byte为单位的，字符串没问题。 有问题的是size大于byte的类型，比如int，long，short和自定义类型 传输前调用hlton或者hston转为网络字节序，收到后ntohl或者ntohs还原，使调用者不需要关注底层大小端问题

user: user-5
content: 不需要考虑这么复杂，在发送数据的时候将数据转换为网络序，在接受的时候将数据转换为本机序，是不会出问题的，而且在发送字符串的时候一般不需要考虑大小端的问题。只管接受即可。

user: user-6
content: 按byte 发送，在接收端解析收到的byte数组

user: user-7
content: 网络序是大端序, 0x2747是先发0x27, 再发0x47; "abcdefg"先发a 内存intel的x86上是小端序, risc芯片(arm/mips/powerpc)传统是大端序, 不过现在都做成可设置的了.

user: user-8
content: 字节序嘛可以理解为字节摆放的顺序，所以楼上正解，以整型为例子可以参考： http://blog.csdn.net/user-8/article/details/6206980
user-0 提问: C语言，算法高手进

回复:
user: user-1
content: 引用 3 楼 z601316152 的回复:步进值等于n+3   数组下面设 i i==0  取数 0 i+=7  取数 7 i+=7  取数 14 引用 3 楼 z601316152 的回复:步进值等于n+3   数组下面设 i i==0  取数 0 i+=7  取数 7 i+=7  取数 143楼正解

user: user-2
content: 步进值等于n+3   数组下面设 i i==0  取数 0 i+=7  取数 7 i+=7  取数 14

user: user-3
content: 让下标i每次递增n就行了

user: user-4
content: 不需要什么算法吧！地址移位就好了吧！

user: user-5
content: 支持数组下标增加的方法

user: user-4
content: 最好通过地址偏移或者数组下标移动比较方便！因为移动的数和取的数据个数都是固定的！

user: user-6
content: 两个for循环可以吗？

user: user-7
content: 直接数组下标增加就oｋ　了，

user: user-8

user: user-9
content: #include <stdio.h> int a[21] = {1,2,3,4,5,6,7,8,9,4,5,6,2,5,8,3,6,9,1,4,7}; int b[9]; int i,j,k; int main() {     k=0;     for (i=0;i<21;i+=7) for (j=0;j<3;j++) b[k++]=a[i+j];     for (i=0;i<9;i++) printf("%d,",b[i]);     return 0; } //1,2,3,8,9,4,8,3,6,
user-0 提问: C语言函数的用法

回复:
user: user-1
content: char是保留字,用于对变量声明类型,如, char a; 就声明了a为字符型,系统就为a开辟一个字节空间.  scanf() main() { 	char a; 	scanf("%c",&a);//%c表示输入为字符型,&a表示的是变量a的内存地址 	printf("%c",a);  }

user: user-2
content: 问题太基础，根本都不是问题 看看基础书吧，没有理论是不行的 http://download.csdn.net/detail/max_min_/6333711

user: user-3
content: char是保留字 scanf从标准输入按照格式读取数据，比如从键盘读取变量。scan是扫描的意思，f是format，格式的缩写。

user: user-4
content: char是关键字，不是函数 scanf可以查MSDN或者man scanf，取决于你的平台。
user-0 提问: 求教一个makefile

回复:
user: user-1
content: //如果是线程库的话 mutilprocessserver: mutilprocessserver.c sendReceive.o -lpthread //如果是自己生成的话 mutilprocessserver: mutilprocessserver.c sendReceive.o -L ./xx/xx libpthread.a  也可以像一楼那样，不过注意-L 来引导路径

user: user-0
content: 谢谢大师们的指导

user: user-2
content: 引用 6 楼 max_min_ 的回复:[quote=引用 5 楼 user-2 的回复:] 我拼写错误LZ都没发现？改成 LDFLAGS = -lpthread.a  加了选项之后，它已经出现在命令行中，如下 cc -Wall -O2   -lptrhead.a  mutilprocessserver.c sendReceive.o   -o mutilprocessserver /usr/bin/ld: cannot find -lptrhead.a 如果LZ仔细看看上面的出错信息，就知道生效了，只是打错库了。 LDFLAGS = -lpthread   就可以了吧！ 不需要后缀吧，加了后缀，貌似还要加前缀的[/quote] 版主英明。。

user: user-1
content: 引用 5 楼 user-2 的回复:我拼写错误LZ都没发现？改成 LDFLAGS = -lpthread.a  加了选项之后，它已经出现在命令行中，如下 cc -Wall -O2   -lptrhead.a  mutilprocessserver.c sendReceive.o   -o mutilprocessserver /usr/bin/ld: cannot find -lptrhead.a 如果LZ仔细看看上面的出错信息，就知道生效了，只是打错库了。 LDFLAGS = -lpthread   就可以了吧！ 不需要后缀吧，加了后缀，貌似还要加前缀的

user: user-2
content: 我拼写错误LZ都没发现？改成 LDFLAGS = -lpthread.a  加了选项之后，它已经出现在命令行中，如下 cc -Wall -O2   -lptrhead.a  mutilprocessserver.c sendReceive.o   -o mutilprocessserver /usr/bin/ld: cannot find -lptrhead.a 如果LZ仔细看看上面的出错信息，就知道生效了，只是打错库了。

user: user-0
content: 引用 2 楼 max_min_ 的回复: //如果是线程库的话 mutilprocessserver: mutilprocessserver.c sendReceive.o -lpthread //如果是自己生成的话 mutilprocessserver: mutilprocessserver.c sendReceive.o -L ./xx/xx libpthread.a  也可以像一楼那样，不过注意-L 来引导路径嗯嗯  第一种方法可行

user: user-0
content: 引用 1 楼 user-2 的回复:CFLAGS := -Wall -O2  LDFLAGS = -lptrhead.a  ...还是不行啊 报错 cc -Wall -O2   -lptrhead.a  mutilprocessserver.c sendReceive.o   -o mutilprocessserver mutilprocessserver.c: In function ‘main’: mutilprocessserver.c:89: warning: pointer targets in passing argument 3 of ‘accept’ differ in signedness /usr/include/sys/socket.h:214: note: expected ‘socklen_t * __restrict__’ but argument is of type ‘int *’ mutilprocessserver.c:35: warning: unused variable ‘pid’ mutilprocessserver.c: In function ‘noBlocInput’: mutilprocessserver.c:212: warning: ignoring return value of ‘gets’, declared with attribute warn_unused_result In file included from /usr/include/stdio.h:910,                  from sendReceive.h:1,                  from mutilprocessserver.c:10: In function ‘gets’,     inlined from ‘noBlocInput’ at mutilprocessserver.c:212: /usr/include/bits/stdio2.h:230: warning: call to ‘__gets_warn’ declared with attribute warning: please use fgets or getline instead, gets can't specify buffer size /usr/bin/ld: cannot find -lptrhead.a collect2: ld returned 1 exit status make: *** [mutilprocessserver] 错误 1

user: user-2
content: CFLAGS := -Wall -O2  LDFLAGS = -lptrhead.a  ...
user-0 提问: 二维数组矩形怎么出现的是乱码且不换行？？

回复:
user: user-0
content: 经过修改，现在的代码是这个，但是还是不行。 #include<stdio.h> void main() { 	int i,j,a,b; 	printf("请输入不大于100的数组的行数:\n"); 	scanf("%d",&i); 	printf("请输入不大于100的数组的列数:\n"); 	scanf("%d",&j); 	int k[101][101]; 	printf("输入你准备的数字:\n"); 	for(a=0;a<i;a++); 	{ 	for(b=0;b<j;b++); 	scanf("%d ",&k[a][b]); 	} 	for(a=0;a<i;a++) 	{ 		for(b=0;b<j;b++) 		{ 		printf("%d,",k[a][b]); 	    printf("\n"); 		} 	}  }

user: user-1
content: 确认下接收到的 i, j 数值？

user: user-0
user-0 提问: C语言新手求问。问什么运行不起来？

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

user: user-1
content: 这种事情直接加断点调试就好了，以后遇到类似的问题也能解决。

user: user-2
content: #include <stdio.h>  int main () { 	int i, t, n;//i是数字,t表示除数，n表示所有因子的和  	for (i = 2; i <= 1000; i++) 	{ 		n = 0; //每次判断一个数时设置因子之和为0 		for (t = 1; t < i; t++) 		{ 			if (i % t == 0) 				n += t; 		} 		//判断是否为完数，是则输出 		if (n == i) 		{ 			printf("%d its factors are ",i); 			for (t = 1; t < i; t++) 			{ 				if (i % t == 0) 					printf("%d ",t); 			} 			printf("\n"); 		} 	}  	return 0; } 排版后很容易发现各种嵌套错误

user: user-3
content: # include <stdio.h>  int main() {     int i, t, n; //i是数字,t表示除数，n表示所有因子的和     n = 0;     for (i = 2; i <= 1000; i++)         for (t = 1; t < i; t++)         {             if (i % t == 0)                 n = n + t;         }     if (n == i)     {         printf("%d its factors are ",i);         for (t = 1; t < i; t++)         {             if (i % t == 0)             printf("%d ",t);         }     }      return 0; }  LZ猜猜我为什么要帮你排版？

user: user-4
content: # include <stdio.h> int main () { 	int i,t,j,n;//i是数字,t表示除数，n表示所有因子的和     for (i = 2; i <= 1000; i++) 	{ 		for (t = 1; t < i; t++) 		{ 			if (i%t == 0) 				n = n + t; 		}         if (n == i) 			printf("%d ",i); 		n = 0; 	} 	return 0; }
user-0 提问: 求助：为什么这道题目我总是RUNTIME ERROR呢？

回复:
user: user-1
content: LZ所谓的所有的测试样例不会就是sample吧  那只是个sample而已。

user: user-0
content: 好的，这其实是一道线性规划的问题，题意是这样的： 航空公司有A，B两条客机，总的乘客人数为N。A客机成本为CostA，载客数为PA；B客机成本为CostB,载客数为PB。每一组的测试数据包括N， CostA， PA， CostB， PB；航空公司需要刚刚好把所有的乘客运送完成。为达到最小Cost，要求输出A客机架次和B客机架次。谢谢！

user: user-2
content: 你把英文大意讲一下吧，不然大家都不愿意看
user-0 提问: 怎么从缓冲区读一个字节或多个字节的数据

回复:
user: user-0
content: 我问的就是从buf中咋读，，

user: user-1
content: char buf[BUF_LEN] ;读出来，然后解析就好！

user: user-0
content: 新手，不太明白，，没用过。。。可以详解吗？

user: user-2
content: 用字节流 unsigned char[]  引用 楼主 u012889234 的回复:int1,1   int1,0  datetime,2013-11-27 15:00:00   #时间采用UTC格式 datetime,2013-11-27 17:00:00 int1,1  int1,4  #IPv4采用网络序十进制，4字节；IPv6采用十六进制,16字节 ipv4,192.168.23.39  #变长 有上面的一个参数决定 int2,50001 int1,1  str,admin123   #最长为8字节，不足系统自动以0补齐 str,12345678   #长度必须为8字节 int4,60  对应的文本： 01 00 52 95 98 70 52 95 B4 90 01 04 C0 A8 17 27 C5 51 010 61 64 6D 69 6E 31 32 33 31 32 33 34 35 36 37 38 00 00 00 3C  由于有的参数是变长，，不能使用结构体，，用指针一个个的偏移还原数据该怎么写啊（c代码）。。
user-0 提问: Linux2.4内核这东西是咋回事 ？菜鸟求教

回复:
user: user-0
content: 引用 1 楼 wangliangffaflgh 的回复:属于Linux2.4内核的有哪些操作系统 内核和操作系统的关系 为啥要编译内核  搜噶 ！ 老兄速度加给力！

user: user-1
content: 属于Linux2.4内核的有哪些操作系统 内核和操作系统的关系 为啥要编译内核
user-0 提问: 文件读写的一个问题

回复:
user: user-1
content: y = [1222 1486 1752 2024 2301 2581 2865 3152 3439 3730 4025 4324 4629 4941 5261 5589 5925 6269 6621 6981]; 对于上面信息，你只保存了红色标记的部分 自己分析一下是不是文件指针那里处理处问题了

user: user-2
content: 请检查每个函数的返回值！  When the "r+", "w+", or "a+" access type is specified, both reading and writing are allowed (the file is said to be open for “update”). However, when you switch between reading and writing, there must be an intervening fflush, fsetpos, fseek, or rewind operation. The current position can be specified for the fsetpos or fseek operation, if desired.
user-0 提问: 请教一个C语言题目谢谢

回复:
user: user-1

user: user-0
content: 我晕 谢谢各位了 也不是作业 是一个练习题 周围都没有人问 只好问下各位大神了 才学习没多久!!一些地方卡主了!!谢谢!!!!

user: user-2
content: 引用 6 楼 nice_cxf 的回复:。。。。明知是作业还给代码，真是害人不浅 是，我错了，下次不给了....

user: user-3
content: 20分  写代码  呕；绝望，彻底的绝望

user: user-4
content: 。。。。明知是作业还给代码，真是害人不浅

user: user-5
content: 引用 1 楼 Adol1111 的回复:这种简单练习还是要自己写啊，多练练手。下面是代码，仅供参考：#include <stdio.h>  #define N 10  int found(int a[],int value){ 	int i=0; 	for(;i<N;i++){ 		if(a[i]==value) 			return 1; 	} 	return 0; }  int main(){ 	int i; 	int value; 	int a[N]; 	for(i=0;i<N;i++){ 		scanf("%d",a+i); 	} 	scanf("%d",&value); 	if(found(a,value)==1){ 		printf("found\n"); 	}else{ 		printf("Not found\n"); 	} 	return 0; } 给点意见哈！ 循环输入10个数的时候，应该要处理一下回车符，判断下scanf返回值

user: user-6
content: 我也是初学,1楼写的比我好多了,楼主仅供参考..。。。。(那些诠释是我为我自己加的,忘记删除了)  看了1楼代码,又学到东西了。

user: user-6
content: #include <stdio.h> main() { 	int num[10],a,x; 	printf("请输入10个数,用空格隔开\n");  	for (a=0;a<10;a++)//c99标准支持在for里声明a,我这里不行 	{ 		scanf("%d",&num[a]);//输入时可以输10个数,用空格隔开,在输回车 		//或者可以每输一个数按一个回车(因为要的是%d,不会把回车读入) 		//[scanf和getchar都是先看内存有没有已读入的,没有就等待输入] 	}  	printf("请输入一个数x :"); 	scanf("%d",&x); 	for (a=0;a<10;a++) 	{ 		if (num[a]==x) 		{ 			printf("found"); 			a=0; 			break;  		}  	} 	if (a!=0) 		printf("no found");     }

user: user-7
content: 楼主可以完美交作业了

user: user-2
content: 这种简单练习还是要自己写啊，多练练手。下面是代码，仅供参考：#include <stdio.h>  #define N 10  int found(int a[],int value){ 	int i=0; 	for(;i<N;i++){ 		if(a[i]==value) 			return 1; 	} 	return 0; }  int main(){ 	int i; 	int value; 	int a[N]; 	for(i=0;i<N;i++){ 		scanf("%d",a+i); 	} 	scanf("%d",&value); 	if(found(a,value)==1){ 		printf("found\n"); 	}else{ 		printf("Not found\n"); 	} 	return 0; }
user-0 提问: 一个奇怪的输出问题

回复:
user: user-0
content: 明白了，谢谢。   引用 2 楼 ws_yqr 的回复:因为%x默认参数类型为unsigned int型，%.2x只是说最小精度为2，C5最高位是1，在char向int扩展的时候高位都置成1了，所以打印出的是FFFFFFC5. 格式化参数请参照http://www.cplusplus.com/reference/cstdio/printf/

user: user-1
content: 因为%x默认参数类型为unsigned int型，%.2x只是说最小精度为2，C5最高位是1，在char向int扩展的时候高位都置成1了，所以打印出的是FFFFFFC5. 格式化参数请参照http://www.cplusplus.com/reference/cstdio/printf/

user: user-2
content: 改成unsigned char