Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 请教一个C语言中sizeof的问题

回复:
user: user-1
content: 我没调试   怎么感觉  sizeof(a)/sizeof(int)=1呢？

user: user-2
content: 请研究用数组做函数参数的人思考以下问题： 为什么没人将整个互联网内容作为函数参数传递呢？！

user: user-3
content: 函数传是都是值。。值。。值。。值。。。  其他都是业障。。。

user: user-4
content: 数组作参数，传递的是指针，所以sizeof(a)是等于4的。

user: user-5
content: 如果能够计算数组的大小，那在排序时还要传入数组长度干什么呢

user: user-6
content: 数组在作为函数参数时退化为指针，int b=sizeof(a)/sizeof(int);利用这段求数组大小是错误的，应该在添加个参数来指定数组长度。 #include<stdio.h> void sort(int a[] ,int b){     int temp,n,m;     for(n=0;n<b;n++){         for(m=0;m<b-n;m++){             if(a[m]>a[m+1]){                 temp=a[m];                 a[m]=a[m+1];                 a[m+1]=temp;             }         }     }     for(n=0;n<5;n++){         printf("%d\t",a[n]);     }     printf("\n"); }

user: user-7
content: 直接std::begin和std::end;

user: user-8
content: gcc编译器下如果这样写的话，你把数组名a传进去的话，我可以告诉你，b的值一定是1； 为什么呢？ 因为数组名做形参的时候，传进来的数组a就是个数组a的地址，你用sizeof（b）得到的是一个指针变量的大小（32位系统下是是4字节，64位系统下是8字节），所以你获取的是b值是1； 而如果你在数组中需要用到数组的大小，在给sort函数天剑一个数组大小的int参数，可以在main函数中用sizeof（a）获取后传给这个参数即可。

user: user-9
content: 引用 10 楼 heimasjx 的回复:a作为数组名，类型应该是指针吧。sizeof求的是该类型内存大小，整形占4个字节，指针在不同的平台上占大小不同，64位机应该就是8个字节，得到的是2。而32位机占8个字节，得到的是1。你这样说不太对吧，很简单，你定义一个数组int a[10]; sizeof(a)/sizeof(a[0])肯定是10，但若函数的形参为数组，实际上是当做指针来处理的，情况就不一样了

user: user-10
content: a作为数组名，类型应该是指针吧。sizeof求的是该类型内存大小，整形占4个字节，指针在不同的平台上占大小不同，64位机应该就是8个字节，得到的是2。而32位机占8个字节，得到的是1。

user: user-9
content: 在进行函数传参时，你传递的只是数组的首地址而已，并没有将整个数组传过去，你的函数形参列表不论是 *p还是p[],都当做*p来看，所以sizeof(p)==4；

user: user-11
content: #include<stdio.h> void sort(int (&a)[5]) { 	int temp,n,m;  int b=sizeof(a)/sizeof(int);//这段求数组大小 	//t b=4; 	for(n=0;n<b;n++) 	{ 		for(m=0;m<b-n;m++) 		{ 			if(a[m]>a[m+1]) 			{ 				temp=a[m]; 				a[m]=a[m+1]; 				a[m+1]=temp; 			} 		} 	} 	for(n=0;n<5;n++){ 		printf("%d\t",a[n]); 	} 	printf("\n"); } int main(){ 	int a[5]={12,1,22,3,5}; 	sort(a); 	return 0; }    用c++编译器试试

user: user-0
content: 引用 5 楼 u013163178 的回复:#include<stdio.h> void sort(int (&a)[5]) { 	int temp,n,m;  int b=sizeof(a)/sizeof(int);//这段求数组大小 	//t b=4; 	for(n=0;n<b;n++) 	{ 		for(m=0;m<b-n;m++) 		{ 			if(a[m]>a[m+1]) 			{ 				temp=a[m]; 				a[m]=a[m+1]; 				a[m+1]=temp; 			} 		} 	} 	for(n=0;n<5;n++){ 		printf("%d\t",a[n]); 	} 	printf("\n"); } int main(){ 	int a[5]={12,1,22,3,5}; 	sort(a); 	return 0; }    用c++编译器试试 正确答案啊，谢谢

user: user-0
content: 引用 2 楼 u014753262 的回复:怎么可能，我试了一下都是5 我在linux下算得2，今天在windows下用vc6.0得到的是1，就是没得到过5

user: user-12
content: 加油加油加油加油加油

user: user-13
content: void fsort (int a[], int len);

user: user-14
content: 数组做参数弱化为指针，所以在函数sort中 sizeof(a) == sizeof(int*)

user: user-15
content: 怎么可能，我试了一下都是5

user: user-16
content: #include<stdio.h> void sort(int a[], int num){     int temp,n,m; //  int b=sizeof(a)/sizeof(int);利用这段求数组大小     int b=num;     for(n=0;n<b;n++){         for(m=0;m<b-n;m++){             if(a[m]>a[m+1]){                 temp=a[m];                 a[m]=a[m+1];                 a[m+1]=temp;             }         }     }     for(n=0;n<5;n++){         printf("%d\t",a[n]);     }     printf("\n"); } int main(){     int a[5]={12,1,22,3,5};     sort(a, sizeof(a)/sizeof(int));     return 0; }   数组做参数的时候，就成指针了。
user-0 提问: 简单的程序运行不出来，前辈看下

回复:
user: user-1
content: 你传入的line指向的内容是常量，不能修改的...

user: user-0
content: 哎，是我不小心char *cl="name1=3d&name2=1";这句是将一个字符串常量赋值给指针常量。C语言在处理的过程中通常将字符串常量处理成静态字符数字。常量是不能修改的

user: user-2
content: 你看看取值有没有问题，像line[x++]的话，如果x=5，则line[x++]是取line[5]，之后x=6。看看这个细节有没有注意到
user-0 提问: 关于MP3持续时间获取 window平台 c/c++  有源码  求分析

回复:
user: user-0
content: 难道发错地方了？

user: user-0
content: 还有没有人知道  或者告诉我另外一个方法也可以啊 能正确得到MP3的持续时间就可以了 在线等

user: user-0
content: 引用 1 楼 user-1 的回复:不能回答 既然知道mciSendCommand调用出问题 那么你该去查查 mciSendCommand 的平台兼容性如何  64位下怎么调用  顺便看看错误码 是什么错误  我也想去看错误代码提示啊 但是直接程序就挂了 提示指针指向的内存错误 我也百度了好久 没看见这个有什么平台兼容性啊 如果你知道 能告诉我正确的写法吗？

user: user-1
content: 不能回答 既然知道mciSendCommand调用出问题 那么你该去查查 mciSendCommand 的平台兼容性如何  64位下怎么调用  顺便看看错误码 是什么错误
user-0 提问: 大家看看我的最小乘积代码有问题吗？我总感觉不对，求证明

回复:
user: user-1
content: 如果没有负数，那么结果就是求这些的最小值输出即可 如果有负数，去掉＝0的数据 如果负数的个数是奇数，那么就是求所有数的乘积 如果负数的个数是偶数，去掉最小的负数，求剩余所有数的乘积

user: user-0
content: @user-2 恩，你说的int 溢出这些我没有考虑 只想确认下单纯从方法上是不是对的？ -------------------------------------------------------------------------- 然后就是max_pos==0的时候（从交界扩展的时候第一个数负，后面都是正），你那个min_from会出问题。但是因为这只是多了个0的candidate，这数据本身有负解，所以不会影响到最终答案，只是那变量的值不是你想要的。  -------------------------------------------------------------------------- 这个表示没有怎么看懂，能详细举个例子解释下否？

user: user-2
content: 溢出我就不考虑了。 你的数据类型是int，我也就假设不会出现0到1的实数。如果会出现的话那整个算法就不对了。 然后就是max_pos==0的时候（从交界扩展的时候第一个数负，后面都是正），你那个min_from会出问题。但是因为这只是多了个0的candidate，这数据本身有负解，所以不会影响到最终答案，只是那变量的值不是你想要的。

user: user-0
content: #define MIN2(A,B) ( (A>B)?B:A )
user-0 提问: [SWU]用函数产生一个字符串

回复:
user: user-0
content: tbmnqvwpxhPPFWJDJKAG5985362495 执行的结果如此 ，能否有改进的措施？

user: user-0
content: 1 #include <stdio.h>   2 #include <stdlib.h>   3   4 void main()   5 {   6         int i, j;   7         char str[1024];   8         srand((int)time(0));   9         for(i=0; i<10; i++){  10                 j       = 97+(int)(26.0*rand()/(RAND_MAX+1.0));  11                 str[i]  = j;  12         }  13        for(i=10; i<20; i++){  14                j        = 65+(int)(26.0*rand()/(RAND_MAX+1.0));  15                str[i]   = j;  16        }  17        for(i=20; i<30; i++){  18                j        = 48+(int)(10.0*rand()/(RAND_MAX+1.0));  19                str[i]   = j;  20        }  21        for(i=0; i<30; i++){  22                printf("%c", str[i]);  23        }  24        printf("\n");  25 } ~ 我这样产生了随机的字符串     但是觉得有很大的缺陷   因为我已经限定了在前面的哪段位置产生什么样的数据

user: user-1
content: char *RandStr() {       char buf[128]={0};       srand(time(NULL);       for(int i=0;i<127;i++)       buf[i]=rand()%96+32;       return buf; }

user: user-0
content: 为何   这样产生的随机数是 1 #include <stdio.h>   2 #include <stdlib.h>   3   4 void main()   5 {   6         int i, j;   7         for(i=0; i<10; i++){   8                 j       = (int)(10.0*rand());   9                 printf("%d ", j);  10         }  11 }  12 -2147483648

user: user-1

user: user-2
content: 可以这样做：生成1-62的随机数，62=26+26+10，能想出来了吗？

user: user-3
content: //产生一个包含字母、数字、以及其他字符的字符串 #include <stdio.h> #include <stdlib.h> #include <time.h> #define CN  8 //大写英文字母个数 #define LN  8 //小写英文字母个数 #define NN  8 //数字个数 #define SN  8 //符号个数 char t[CN+LN+NN+SN+1]; char S[33]="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; char *myrandstr() {     int i,n,a,b;     char tc;      for (i=0;i<CN;i++) sprintf(t         +i,"%c",'A'+rand()%('Z'-'A'+1));     for (i=0;i<LN;i++) sprintf(t+CN      +i,"%c",'a'+rand()%('z'-'a'+1));     for (i=0;i<NN;i++) sprintf(t+CN+LN   +i,"%c",'0'+rand()%('9'-'0'+1));     for (i=0;i<SN;i++) sprintf(t+CN+LN+NN+i,"%c",S[rand()%32]          );      n=CN+LN+NN+SN-1;     for (i=n;i>0;i--) {         a=i-1;b=rand()%i;         if (a!=b) {tc=t[a];t[a]=t[b];t[b]=tc;}     }     return t; } int main() {     int i;      srand(time(NULL));     for (i=0;i<10;i++) printf("%s\n",myrandstr());     return 0; } //iWQ*RG7r2)u'9lAJ9t2Vl03d)Ht"5-@/ //^dQPe_R>00Z6H6x3+klGS2=Ewqf/86^) //u>2oR=55?aaj4OXG0:9rX#6+Dv6DDt-= //5Ym?X9_'qDDoe#p5v2M[S8!p8He3I9)+ //81w{`951ScIy=92K@ZMJ[p%@qkdLb7Y} //2oIRnxw6~:84MF;~C|]msWr1Q~9Jb88= //1IV}4x,TpheG[3J4T}g"Pc"3uV]q022! //mH12~+81Kipri5QYUUd|:Oo7B(\e50(` //laHaY=IyIby!J5b?6}Vy25]8B"65%3E" //2>W|33hQQ2vA5ws02J<TkS!1Rlik[[]! //

user: user-4
content: 对，用随机函数生成相应范围内的ascii码值，然后就能得到了

user: user-5
content: 用srand随机生成一些数字，然后转化为相应的字符就是了

user: user-6
content: 哪里不会呢。
user-0 提问: 十进制转换为N进制（哪里有错，请指正）

回复:
user: user-0
content: 那个32是4个字节的二进制位数

user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() {     int i,v;     char bs[33];     char b[33];     char hs[9];     char h[9];     char s[4];     char *e;  // 十进制整数转二进制串；     i=1024;     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("i=%d,bs=%s\n",i,bs); // 十进制整数转十六进制串；     i=1024;     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串     strcpy(s,"a汉");     i=0;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉

user: user-2
content: 不是有个itoa的函数吗

user: user-3
content: for(j=i-1;j>0;j++)         printf("%d",a[j]); 这里仍然以10进制在输出, 那肯定是不能符合你的需求了.  既然 + 48  +55就意思说会转换成字符.  所以int a[32]; 修改成char a[32];   for(j=i-1;j>0;j++)         printf("%d",a[j]); 修改成 printf("%s",a);
user-0 提问: 指向函数的指针问题求指导

回复:
user: user-1
content: 引用 6 楼 u014768562 的回复:[quote=引用 2 楼 sholber 的回复:] [quote=引用 1 楼 u013803262 的回复:]   y2=internal(f,1,2); 函数f里面没带参数   函数声明可以省略参数列表。 不过，如此一来，float类型的实参都被提升为double了，所以楼主傻了……[/quote] 艾 以前学java 发现基础不太行，现从C学起，请问学了C能做啥工作啊，ps:我不想学c++[/quote] 哈哈，你把分数全给我吧…… 学了C只是刚刚开始。C只是工具，真正重要的，是工具之外的东西。

user: user-0
content: 引用 2 楼 sholber 的回复:[quote=引用 1 楼 u013803262 的回复:]   y2=internal(f,1,2); 函数f里面没带参数   函数声明可以省略参数列表。 不过，如此一来，float类型的实参都被提升为double了，所以楼主傻了……[/quote] 艾 以前学java 发现基础不太行，现从C学起，请问学了C能做啥工作啊，ps:我不想学c++

user: user-2
content: #include "stdio.h" #include "math.h"  float internal(float (*fun)(float),float a,float b) { float z; z=(*fun)(a)+(*fun)(b); return (z); }  float f(float x) { return (x); } /*自定义函数*/   void main() {   float y1,y2;   //float internal();   //float f();    y1=internal(sin,3.14,3.14);;   y2=internal(f,1,2);   printf("y1=%0.6f\ny2=%f\n",y1,y2); }  y1=0.003185 y2=3.000000

user: user-3
content: 估计又是float问题。 把float都改成double.

user: user-4
content: float internal(float (*fun)(),float a,float b) 里的float (*fun)(),是不是该指明fun的参数类型float (*fun)(float)

user: user-1
content: 引用 1 楼 u013803262 的回复:y2=internal(f,1,2); 函数f里面没带参数   函数声明可以省略参数列表。 不过，如此一来，float类型的实参都被提升为double了，所以楼主傻了……

user: user-5
content: y2=internal(f,1,2); 函数f里面没带参数
user-0 提问: C51点亮发光二极管

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

user: user-2
content: #include<reg52.h> sbit led1=P1^0 void main() {        led1=0; }   写成这样就行了    最好自己写在keil上  别复制粘贴

user: user-3
content: 引用 5 楼 u011314565 的回复:   #include<reg52.h>  void main() { sbit led1=P1^0=0; }  是这个哪里错了  你这个回复真让人抓狂，，，，

user: user-0
content: #include<reg52.h>  void main() { sbit led1=P1^0=0; }  是这个哪里错了

user: user-4
content: 你试试将#include放入main(),看看出不出错。因为sbit是一种预处理，需要预处理编译，而不参与编译，所以编译器无法容纳预处理在main()中作为执行的一部分。Ps:C编译过程如下 C源程序－>编译预处理－>编译－>优化程序－>汇编程序－>链接程序－>可执行文件

user: user-5
content: sbit led1=0;    改成 led1=0;

user: user-6
content: C51的位变量语法，不同于一般的C的语法 sbit led1=P1^0; /* 初始化 位变量led1, led1的位地址,是p1口的 第0位。这有点C++初始化引用的意思。 */  void main(){ sbit led1=0; /* 既不是位变量赋值，也不是位变量初始化,C51 没有这语法 */ led1= 0; /*这是位变量赋值*/   }

user: user-7
content: #include<reg52.h>  sbit led1=P1^0; void main() { sbit led1=0;	 //为什么写在这里时编译错误呀  }
user-0 提问: 疑难求教，我是初学者

回复:
user: user-0
content: 真是太感谢了

user: user-1
content: 引用 1 楼 zhaowech 的回复:试了下，帮你修改了，vs2010，亲测可正常运行，总结些问题： 1.新手指导gets、puts、getchar和putchar的功能和用法即可，在实践中最好少用，因为它们的处理会设计到很多“不可见”的字符，如换行符、缩进符等，对新手，这类问题是很困扰的 2.多调试才能发现问题，并解决问题 3.运行到失败步骤，别使用exit，这导致进程退出，一些其他函数的必要步骤可能被跳过，最好使用return，让函数返回，不影响其他函数的执行。 代码，最后漏了 return 0; 记得加上

user: user-1
content: #include<stdio.h> #include<stdlib.h> #include<string.h>  #define MAX_WORD_NUM 200 #define MAX_WORD_LEN 16 #define MAX_PATH 260  int main() { 	FILE *fp=NULL; 	char word[MAX_WORD_NUM][MAX_WORD_LEN],forget[MAX_WORD_NUM][MAX_WORD_LEN],s[MAX_WORD_LEN],FilenameIn[MAX_PATH],FilenameOut[MAX_PATH]; 	int iCount; 	int j; 	printf("Input the open file:"); 	scanf("%s",FilenameIn); 	if(NULL==(fp=fopen(FilenameIn,"r"))) 	{ 		printf("File open error!"); 		return -1; 	} 	iCount=0; 	while(!feof(fp)) 	{ 		fscanf(fp,"%s",word[iCount]); 		iCount++; 	} 	fclose(fp); 	j=0; 	for(int i=0;i<iCount;i++) 	{ 		if(i%2==0) 		{ 			printf("%s\n",word[i+1]); 			scanf("%s",s); 			fflush(stdin);//这里是为了消除使用scanf时的回车符 			if(strcmp(s,word[i])==0) 			{ 				printf("Right\n"); 			} 			else 			{ 				printf("Wrong\n"); 				strcpy(forget[j],word[i]); 				strcpy(forget[j+1],word[i+1]); 				j+=2;//这里是加2，不是加1，调试才能更好找问题 			} 		} 	} 	printf("Wrong:%d\n",j); 	printf("Do you want to save the wrong words to a file?<y/n>"); 	if(getchar()=='y') 	{ 		printf("Input the output file:"); 		scanf("%s",FilenameOut); 		getchar(); 		if((fp=fopen(FilenameOut,"w"))==NULL) 		{ 			printf("File open error!"); 			exit(1);	 		} 		for(int i=0;i<j;i++) 			fprintf_s(fp,"%s\n",forget[i]); 		fclose(fp); 	} } 试了下，帮你修改了，vs2010，亲测可正常运行，总结些问题： 1.新手指导gets、puts、getchar和putchar的功能和用法即可，在实践中最好少用，因为它们的处理会设计到很多“不可见”的字符，如换行符、缩进符等，对新手，这类问题是很困扰的 2.多调试才能发现问题，并解决问题 3.运行到失败步骤，别使用exit，这导致进程退出，一些其他函数的必要步骤可能被跳过，最好使用return，让函数返回，不影响其他函数的执行。
user-0 提问: freopen函数具体怎么使用？为什么的老是编译不通过？

回复:
user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:将变量声明放在函数开头。嚯嚯，居然错在这里，明白了，我发现白学了c。

user: user-1
content: 将变量声明放在函数开头。

user: user-2
content: 引用 4 楼 zhang5476499 的回复:引用 3 楼 zhao4zhong1 的回复:将变量声明放在函数开头。嚯嚯，居然错在这里，明白了，我发现白学了c。 哈哈，下的是CPP代码，结果用当成C来编译了。。。估计你没留意。。。  哦，据说C11还是C99，也可以到处声明变量了，，，是我记错了，，还是谣传？？ 。。。你自己的代码是乱改的吧。。通不过你就改成字符串了，，为何不看文档，，

user: user-0
content: 引用 1 楼 uuuououlcz 的回复:难道是编译器遵循的C标准太老，要求变量定义写在最前面，其他语句放在变量定义后面？反正错误就是出在freopen();这个函数上，书上的代码和网上的代码照搬过来都是编译出错。

user: user-3
content: 难道是编译器遵循的C标准太老，要求变量定义写在最前面，其他语句放在变量定义后面？
user-0 提问: 【请教】局部变量及悬垂指针问题

回复:
user: user-1
content: 其实电脑开机后物理内存的每个字节都是可读写的，区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

user: user-2
content: 引用 1 楼 a345485527 的回复:i 的确是在函数结束后就释放了，但是被释放掉的那块内存不意味着被马上覆盖掉， 只是说 随时都有可能被覆盖掉 所以 这么做是很危险的 解释的很透彻， 给一个未知指针赋值时，可以先null,或者用完就null，不然就容易变成野指针

user: user-3
content: 引用 楼主 li582158579 的回复:请教各位大神，  以下代码中，为何第一次 printf 的时候 *iPtr 的值会是10呢？  变量i不应该在f1函数结束后就释放了吗？  局部变量i到底在什么时候释放的呢？   int *iPtr = NULL;   void f1()   {       int i = 10;       iPtr = &i;   }      void CtestAreaDlg::OnBnClickedButtonPtr()   {       // TODO:  在此添加控件通知处理程序代码       f1();       printf("the value of the ptr is %d\n",*iPtr);       Sleep(1000);       printf("the value of the ptr now is %d\n",*iPtr);   }       说明释放并不是内存清0，而是标记为可用

user: user-4
content: 为什么第二次变成了1000？？

user: user-5
content: 一个良好的习惯是调用指针完毕之后，再把指针置NULL

user: user-6
content: i 的确是在函数结束后就释放了，但是被释放掉的那块内存不意味着被马上覆盖掉， 只是说 随时都有可能被覆盖掉 所以 这么做是很危险的
user-0 提问: 把输入一次一个字符地复制到输出 getchar和putchar  疑问-K&R书

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

user: user-1
content: 如用户在按回车之前输入了不止一个字符，其他字符会保留在键盘缓存区中，等待后续getchar调用读取.也就是说，后续的getchar调用不会等待用户按键，而直接读取缓冲区中的字符，直到缓冲区中的字符读完为后，才等待用户按键
user-0 提问: C语言内存分配和释放问题，求大神指导~~

回复:
user: user-0
content: 引用 3 楼 u013163178 的回复:node->neibID = (int*)calloc(count, sizeof(int));这是什么意思是啊   neibID在Struct里面忘记写了，但是好像也不是这个地方的问题。谢谢！ 这个是为数据结构里面的neibID分配数量为count，大小为sizeof(int)的连续的内存空间。

user: user-1
content: node->neibID = (int*)calloc(count, sizeof(int));这是什么意思是啊

user: user-0
content: 在这个里面AttributeNum是一个常数 和graph->numNeib没有关系。我觉得是内存分配和释放时候出了问题，就是不知道具体是怎么回事啊。

user: user-2
content: graph->numNeib 和 AttriButeNum 的关系是？ 会不会是numNbeib > AttriButeNum 了？          count = graph->numNeib;	 	node->neighbor = (Node*)calloc(count, sizeof(Node)); 	node->neibID = (int*)calloc(count, sizeof(int)); 	node->weight = (double*)calloc(count, sizeof(double)); 	node->neibInfln = (int**)calloc(count, AttributeNum*sizeof(int));
user-0 提问: 遇到个蛋疼的问题，还好解决了！

回复:
user: user-1
content: 原来是单片机啊

user: user-2
content: 大牛，膜拜下

user: user-3
content: 原来已经结贴了

user: user-3
content: 可以找版主，移到非技术区

user: user-3
content: 引用 5 楼 nadleeh123 的回复:[quote=引用 3 楼 u012421456 的回复:] 你发这个帖子是为了？ 其实我发错地方了[/quote]

user: user-0
content: 引用 3 楼 u012421456 的回复:你发这个帖子是为了？ 其实我发错地方了

user: user-4
content: 没有datasheet比较服气

user: user-3
content: 你发这个帖子是为了？
user-0 提问: 关于数据结构与算法的问题

回复:
user: user-1
content: 创建树的时候，传入的参数使用双重指针是因为内部要申请内存空间，要改变这个指针的内容，所以传入指针的指针来反映这种变化。实际上第一重指针T是作为真正的参数，而*T是为了获得T的改变。值传递不能返回在函数内部的变化，这个是很好验证的吧。 运算符&是在这里代表的是取地址符，也就是获得变量的内存地址，转为指针。

user: user-2
content: C只有值传递一种参数传递方式。 C语言，指针也是值传递，不过指针的值传递，可以实现地址传递；  值传递是单向的，调用者可以把值，通过实参，传递到函数； 函数不能通过形参，改变调用者传入的实参。 当传递一个指针参数的时候，由于指针，可以得到并修改指针所表示的地址单元的内容；  所以，C语言，指针的值传递，可以（模拟）实现地址（引用）传递。 方法是，实参为地址（也就是一个指针），形参是指针。 在这个过程中，实参（指针或者地址）是不会改变的。  能够改变的是临时变量（形参指针）的值，和该指针指向的内容。 临时变量（形参）是实参的拷贝，二者不是同一个数据（对象）。  要通过函数调用，改变指针的值，也只能用同样的方式； 即实参是指针的地址，形参是指针的指针。  这里，一级指针是要改变的数据。二级指针是指针（数据的地址）。 实参只能是指针的地址，也就是指针的指针，即二级指针。 形参只能是（指针的指针）二级指针。

user: user-0
content: 引用 2 楼 Revivedsun 的回复:typedef struct BiTNode {     char data;     struct BiTNode *lchild,*rchild; } BiTNode, *BiTree;   BiTree是一个指针类型     BiTree T = NULL;     CreateBiTree(&T); 创建树，向函数传入T,保存根结点地址，所以要修改T变量存储空间内的数值（保存一个指针），所以要获得该指针变量的地址。能否说的通俗易懂一点。。。

user: user-0
content: 引用 1 楼 CarlXie 的回复:创建树的时候，传入的参数使用双重指针是因为内部要申请内存空间，要改变这个指针的内容，所以传入指针的指针来反映这种变化。实际上第一重指针T是作为真正的参数，而*T是为了获得T的改变。值传递不能返回在函数内部的变化，这个是很好验证的吧。 运算符&是在这里代表的是取地址符，也就是获得变量的内存地址，转为指针。你的意思是不是说，地址传递其实是被调用函数另外生成一个指针，指向这个地址。但是指针已经变化了？

user: user-3
content: ×× 指针的指针

user: user-4
content: typedef struct BiTNode {     char data;     struct BiTNode *lchild,*rchild; } BiTNode, *BiTree;   BiTree是一个指针类型     BiTree T = NULL;     CreateBiTree(&T); 创建树，向函数传入T,保存根结点地址，所以要修改T变量存储空间内的数值（保存一个指针），所以要获得该指针变量的地址。
user-0 提问: c

回复:
user: user-0
content: 呃呃呃   我又写错了

user: user-1
content: 应该是int (*ar)[cols]吧

user: user-0
content: 对了   ，还有个问题是 void matrix_rows(int ar[][cols], int rows)中 我如果定义成这样就不行了  ，是为什么呢 void matrix_rows(int （ar*）[cols], int rows)

user: user-0
content: 谢啦   ！嘿嘿  ，之前没注意定义的形式参量跟宏定义的一样，

user: user-1
content: void matrix_rows(int ar[][cols], int rows) void matrix_cols(int ar[][cols], int rows) 这两个函数的参数列表里面的"int rows"在编译时被替换成了"int 3"，对于变量定义而言，这是不对的。 建议#define时全用大写，并且起复杂点的名字。
user-0 提问: 【提问】 关于DEV-c++中编译的一个错误

回复:
user: user-1
content: 你先写个hello world,如果还是这样的错，就是环境问题

user: user-0
content: 引用 1 楼 yangyuyu77584 的回复:if(current = (DLinkListNode*)head )        这里少了一个等号吧。 呃 是少了个等号，不过编译还是会提示有那样的错误

user: user-0
content: 呃 是少了个等号，不过编译还是会提示有那样的错误

user: user-2
content: if(current = (DLinkListNode*)head )        这里少了一个等号吧。
user-0 提问: C语言文件操作~~在线等~~大牛快来啊

回复:
user: user-1
content: 应该是读完第一个结构体之后 文件指针没有在第二个结构体的第一个字符前面 看看你的文件结构吧，尤其是第一个结构体和第二个结构体连接的位置

user: user-2
content: debug一下啊，你的代码有问题肯定的啊，文件应该没有问题，因为你已经读出来一个正确的了

user: user-0
content: 引用 1 楼 u012061345 的回复:if(head == NULL) head = p2 = p1; else { p2->next = p1; p2 = p1; //改成 p1 = p2 } } }感谢你的回答~~不过，还是只能读出一个结构体的信息，而且感觉就逻辑上不对吧~~~我一直怀疑，我这个stufile是不是有问题，我这个文件是通过另一个程序将学生信息写在里面的，这里相当于直接读里面的信息~~~文件能够通用嘛？

user: user-3
content: if(head == NULL) head = p2 = p1; else { p2->next = p1; p2 = p1; //改成 p1 = p2 } } }
user-0 提问: 请教一个 fseek后内存的问题

回复:
user: user-1
content: 1. 已经有个多层缓存了：内核的预读取，CRT的IO流缓冲。如果你想对缓冲有更多控制的话，使用OS提供的无缓冲的API， 不要基于已经存在的多层缓存。  2. 你可以自己记录最近的查询结果，如果不在历史缓冲中再从文件流中查找并更新历史记录。这种方法简单有效。

user: user-2
content: 似乎不需要，具体还要看你做什么用。

user: user-3
content: C库文件API执行系统调用操作如果过于频繁，会效率偏低，其实这些API已经和你考虑一样这样做了，它已经给你缓存了，至于缓存多少，你需要查看下它的实现（好像是FILE结构体中一个成员指定），这样就减少很多的系统调用，操作缓存内容，减少IO，而且满足大多数需求，如果你是特例，你可以是重做这些API; 不过我觉得映射也可行！
user-0 提问: c和fortran如何编译生成dll

回复:
user: user-1
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。

user: user-2
content: 1）fortran生成DLL 或者lib  2）C调用fortran 要把接口做对，类型对应，调用约定一致 3）C需要输出的函数，在def 导出，不会先学，很容易，可以看看MSDN。    DLL 提供给外部使用的都要导出，一般是标准调用约定，就是WinAPI那种。   外部使用DLL，需要提供.h，. Dll,.lib   .h,.lib 静态链接用，.h也是文档的一部分。

user: user-0
content: c调用fortran，c里面声明了要调用的fortran函数，不知道怎么根据上面已有的文件重新编译生成dll

user: user-2
content: 1）fortran 生成库供C调用，C生成DLL 2） C生成库供fortran调用，fortran 生成DLL 具体要看，文件内容和调用关系
user-0 提问: 求助 C语言 数据写入TXT文件

回复:
user: user-1
content: 先输出每行，每行结束换行， C printf("\n"); C++ cout<<endl;

user: user-2
content: 可以你用fwrite

user: user-3
content: 关系到文件那一章。

user: user-4
content: 引用 3 楼 hanxingyu21 的回复:1楼你在敷衍我。。  你自己2楼代码不是“循环遍历”？

user: user-0
content: 1楼你在敷衍我。。

user: user-0
content: FILE *wfp;		  /*打开文本文件以写入内容*/     wfp = fopen("c:\\result_test_data_array.txt", "w");     if (!fp)     {         perror("cannot open file");         //exit(-1);     }          /*把二维数组的内容写入文件*/     for (i = 0; i < 8; i++)     {         for (j = 0; j < 2; j++)         {             fprintf(wfp, "%4d ", store_key_array[i][j]);         }         fputc('\n', wfp);     }     fclose(wfp);          return 0;

user: user-4
content: 循环遍历
user-0 提问: typedef void(*Stuff)(); 的问题

回复:
user: user-0
content: 老注册新号很麻烦的

user: user-1
content: 又来？而且分还是那么低，也太扣了吧？强烈鄙视……起码得100分。 没错， typedef int Stuff;  typedef void(*)() Stuff; 看起来在形式上没有什么不同，都是希望用Stuff指示一种类型。但是，要知道，关键字typedef在声明中作为存储类指定符出现： int long long typedef unsigned i;    //等效于typedef unsigned long long int i; 这就是说，声明有声明的语法，typedef只是声明的一部分。所以，单就声明来说，int Stuff;是合法的声明，而void (*)() Stuff;是不合法的声明。
user-0 提问: 求大神帮帮忙，甚是感谢！

回复:
user: user-1
content: 自己看编译器的错误提示

user: user-2
content: 要学会看这些错误提示啊！ 比如说第一个，语法错误，标识符 book，lz好好检查检查

user: user-3
content: typedef   后面要有变量名

user: user-4
content: typedef struct       {     char id[6];     char name[20];     char auther[20];     int  number; }BOOK ; 要么就是 struct    BOOK   {     char id[6];     char name[20];     char auther[20];     int  number; } ;

user: user-5
content: 你这错误太多了，而且基本的语法你都没有掌握，请根据具体的错误信息百度一下吧

user: user-6
content: 你的typdef 用法错误，把出现"typedef "的两个地方去掉就能编译过了！

user: user-7
content: 哥哥,typedef不是你这样用的 这是MSDN上的例子 Examples typedef [public]  long DWORD; This example creates a type description for an alias type with the name DWORD.  typedef enum {       TYPE_FUNCTION = 0,       TYPE_PROPERTY = 1,       TYPE_CONSTANT = 2,       TYPE_PARAMETER = 3    } OBJTYPE; //这个才是可以以后用来定义变量的
user-0 提问: 3*3矩阵的转置，4，7，8出现的数字不对

回复:
user: user-1
content: 这是我写得.你看看 /*矩阵逆置  */  #include<stdio.h> #include<stdlib.h>  void Init_arr(int *arr ,int n)	//初始化矩阵 { 	int i=0; 	int j=0; 	for(i=0;i<n;i++) 	{ 		for(j=0;j<n;j++) 		{ 			printf("输入第[%d][%d]:",i,j); 			scanf("%d",(arr+n*i+j)); 		} 	} }  void Show_arr(int *arr,int n)	//矩阵输出 { 	int i=0; 	int j=0; 	for(i=0;i<n;i++) 	{ 		for(j=0;j<n;j++) 		{ 			printf("%d ",*(arr+i*n+j)); 		} 		printf("\n"); 	} }  void Nizhi_arr(int *arr,int n)	//矩阵逆置 { 	int i=0; 	int j=0; 	int tmp; 	for(i=0;i<n;i++) 	{ 		for(j=i;j<n;j++) 		{ 			tmp=*(arr+i*n+j); 			*(arr+i*n+j)=*(arr+j*n+i); 			*(arr+j*n+i)=tmp; 		} 	} }  int main() { 	int n; 	int *arr; 	printf("请输入矩阵的阶：\n"); 	scanf("%d",&n); 	arr=(int *)malloc(n*n*sizeof(int)); 	Init_arr(arr,n); 	printf("矩阵逆置之前:\n"); 	Show_arr(arr,n); 	printf("矩阵逆置之后:\n"); 	Nizhi_arr(arr,n); 	Show_arr(arr,n); 	return 0; }

user: user-2
content: 一般来说，出现数据的值是一个很大的负数，是因为没有赋值。 你可以直接把从控制台输入的值赋给相应的转置位置，就不用两个二维数组了。

user: user-3
content: #include<iostream> using namespace std; #define N 3 int main(int argc, char* argv[]) {     int InArr[N][N],OutArray[N][N];     int k=0;     cout<<"input a array"<<endl;           for(int i=0;i<N;i++)         for(int j=0;j<N;j++)     {         cin>>InArr[i][j];          OutArray[j][i]=InArr[i][j];     }     for(i=0;i<N;i++)     for(int j=0;j<N;j++)                   {cout<<OutArray[i][j];             k++;          if(k%3==0)              cout<<endl;}                     system("pause");                   return 0; } 这个正确了！ 注意你程序的第10行         OutArray[i][j]=InArr[j][i];

user: user-4
content: 这里有问题cin>>InArr[i][j]; OutArray[i][j]=InArr[j][i];//InArr[j][i]没有初始化就赋值  改成这样：cin >> InArr[i][j]; OutArray[j][i] = InArr[i][j];

user: user-0
content: 引用 2 楼 user-5 的回复:单步调试这不等于没说么。。。

user: user-5
content: 单步调试

user: user-0
content: 就是本来该是输入12 3 4 5 6 7 8 9然后输出1 4 7 2 5 8 3 6 9.但是输出的是 1  -858993640-858993540  2  5  -858993640  3  6 9
user-0 提问: 求解一道简单的有关查找的数据结构题目

回复:
user: user-0
content: UP~~~`

user: user-0
content: UP上去。。。求解

user: user-0
content: n条边的无向图的邻接表的存储中，边结点的个数有（）。 A．n       B．2n    C．n/2       D．n*n  这道题答案呢？原答案是A。。

user: user-1
content: 引用 2 楼 a156435646 的回复:参考答案是B - -蛋蛋都碎了  不可能把，这题我考研的时候做过。 注意题目选项位置是否打乱。

user: user-0
content: 参考答案是B - -蛋蛋都碎了

user: user-1
content: C。 比如 Mod 5 的散列表， 下面几个数字， 6 11 1 2 的散列表为： 0          1         2        3      4                      6       11        1      2 这个时候，2查找成功需要遍历的数字有：  11， 1 ， 2 显然 11，1 （Mod 5 =1）和2 （Mod 5 =2）的键值不一样。

user: user-0
content: UP。。n条边的无向图的邻接表的存储中，边结点的个数有（）。 A．n       B．2n    C．n/2       D．n*n  这道题答案呢？原答案是A。

user: user-0
content: 我觉得是参考答案错了吧。。

user: user-1
content: 引用 4 楼 a156435646 的回复:n条边的无向图的邻接表的存储中，边结点的个数有（）。 A．n       B．2n    C．n/2       D．n*n  这道题答案呢？原答案是A。。  刚那题搞清楚了？
user-0 提问: 蓝牙EO加密算法的实现？？妹纸求助 。 蓝牙加密协议是怎么回事？

回复:
user: user-1
content: 蓝牙的eo加密算法么？不懂，楼主要不要一个移位的加密算法：把一个明文文件加密成密文文件  ，再把密文文件解密成明文文件。用C语言实现这个功能。。。。。  这个本人倒是写过一个程序。
user-0 提问: 有没有游戏编程的论坛，论坛提供题目和游戏框架以及API，开发者开发自己的客户端，提交给服务器，互相Pk，比做纯粹的ACM有趣得多

回复:
user: user-1
content: http://blog.csdn.net/pizi0475

user: user-2
content: 腾讯 有个一个游戏：CodeTank(代码坦克)，Javascript语言，提供API，可以去看看

user: user-0
content: 引用 1 楼 user-5 的回复:华为有一年编程大赛就是这种题目，通过猜拳，寻路等算法达到击败对手的目的  去年是警察抓小偷，开发者可以写程序充当警察或者小偷，警察可以和小偷单独PK，在指定时间内抓住小偷就算赢，小偷不断的去偷东西，最后如果没被抓，偷到的钱乘以一个系数就是积分，也可以多个警察合作围捕小偷，谁抓到算谁赢，否则就是小偷赢，不断晋级，地图越来越负责，规则也越来越丰富，感觉还是很有意思的，但是不知道外网有没有这种论坛

user: user-3
content: 这类游戏的始祖是当初的磁芯大战。后来有个平台，是提供API，然后玩家自己定制坦克，并提交代码互相PK的，叫robotank。  不知道现在还有没有了，我还是上大学时候关注过这个的呢，好多年了

user: user-4
content: 不错的主意:-)

user: user-5
content: 华为有一年编程大赛就是这种题目，通过猜拳，寻路等算法达到击败对手的目的
user-0 提问: linux C编程截取字符串错误，求解在线等，急

回复:
user: user-1
content: //make sure [str + start, str + end) is readable char * StrString(char *str,int start,int end) {       char* tmp = NULL;       int len;       if( start < end){          len =  end - start;             tmp  = (char *)malloc( len+ 1);         if(tmp){             str += start;             while(len--) {                *tmp++ = *str++;             }            *tmp = 0;         }                 return tmp;  }

user: user-2
content: 或这样： char * StrString(char *str,int start,int end) { 	char* head=str; 	for(;end>0;end--) 	{ 		*str=*str+start-1; 		str++; 	} 	*str='\0'; 	return head;  }

user: user-2
content: 改成这样试试？ char * StrString(char *str,int start,int end) { 	char* head=str;         char* temp=str;         str=str+start-1; 	for(;end>0;end--) 	{ 		*temp=*str; 		str++; 		temp++; 	} 	*temp='\0';         return head;  }

user: user-3
content: 楼主，tmp是局部变量，不能作为函数返回值的，还有tmp没必要申请stlen+end+1空间，你的写法很难懂

user: user-4
content: strncpy(tmp,str+start,stlen+end);                                    ^^^^^^^^stlen是str的长度，你这个位置是不是超出str了……

user: user-5
content: 引用 3 楼 billgates001 的回复:字符串目的：比如中国人，StrString(中国人,0,2)输出中国  那你应该写成strncpy(tmp,str+start,end-start+1);

user: user-0
content: 字符串目的：比如中国人，StrString(中国人,0,2)输出中国

user: user-0
content: 引用 1 楼 u014639175 的回复:end是在str字符串中末尾字符的索引值吗 字符串目的：比如中国人，StrString(中国人,0,6-2)输出中国

user: user-5
content: end是在str字符串中末尾字符的索引值吗
user-0 提问: 多线程怎可以设置时间片分配以及切换地址吗..

回复:
user: user-1
content: http://download.csdn.net/detail/cometnet/6716425    http://download.csdn.net/download/BaihowFF/1406877  可以参考别人怎么处理这些东西的.

user: user-0
content: 引用 1 楼 user-2 的回复:根本的解决方法是把绘制放在一个线程里，或者至少用线程锁保证分别绘制不会互相干扰 可以通过设置优先级来控制哪个线程分到更多的时间片，但如果楼主想要精确控制，还是自己开发一个操作系统更好想写一个动作游戏...当按下J键的时候可以创建一个BitBlt子弹位图的线程...当检测到子弹越界的时候可以CloseHandle关闭线程...要是不用多线程感觉挺麻烦的..麻痹的.新建线程里面的速度时快时慢.... = =

user: user-2
content: 根本的解决方法是把绘制放在一个线程里，或者至少用线程锁保证分别绘制不会互相干扰 可以通过设置优先级来控制哪个线程分到更多的时间片，但如果楼主想要精确控制，还是自己开发一个操作系统更好
user-0 提问: 求字符串中最长单词

回复:
user: user-1
content: 引用 5 楼 u014289671 的回复:[quote=引用 1 楼 u014639175 的回复:]     是的，确实有错，两个flag的位置刚好要换一下  是图中的和②互换吗？ [/quote] 对，而且①下面那个flag=0 也改为 flag=1

user: user-2
content: 这种问题自己编译一下不就知道了吗，最开始我用的是盗版的《c语言程序设计》（学校发的），里面代码有些错误，然后自己编译就解决问题了

user: user-3
content: 哦，单词，不是串

user: user-3
content: 根据代码，第一应该是 flag ==1 ，不是flag ==0 第二个flag =1 是没有问题的 flag = 1; 注意这不是条件，而是代码本身。 流程图的这一部分，直接用代码表示了  另外，len>length 写成 len >= length和代码不符合，倒也实也没大的错误 不过 > 得到最前面的那个最长的字符串 >= 得到最后面的那个最长的字符串

user: user-0
content: 引用 1 楼 u014639175 的回复:是的，确实有错，两个flag的位置刚好要换一下  是图中的①和②互换吗？

user: user-0
content: 谭浩强的书啊。。。

user: user-4
content: 谭老师的书，大家都呵呵呵呵 ……

user: user-1
content: 是的，确实有错，两个flag的位置刚好要换一下
user-0 提问: 学了《数据结构》，还是无法体验算法和数据结构的关系。

回复:
user: user-1
content: 再多说点，比如有个实际问题，需要用计算机来解决，步骤就是这样的。  首先要充分分析问题，了解它尽可能多的特性。然后根据这些特性建立一个抽象的数学模型。这个模型就可以看做是广义的数据结构。因为它描述了某个问题，且具有某些性质。再根据这个模型的性质，设计对应的算法，这样问题就解决了。  本质上，算法要针对于某个数据结构才有意义，它不可能脱离数据结构而单独存在。

user: user-1
content: 不同的数据结构具有不同的性质，而算法可以充分利用这些性质，求得最优的解决方案。  最简单的例子，比如在 最短路径算法中，会用到 优先级队列 这个数据结构，就是因为它具有的特殊性质；那试想下，假如不用优先级队列，那最短路径算法还能怎么实现呢？

user: user-2
content: 引用 3 楼 zhang5476499 的回复:引用 1 楼 caozhy 的回复:的确是没有关系。数据结构中提到的“算法”，你不能说它不是算法，但是和竞赛提到的算法如同小学算术和中学方程之间的关系。怎么感觉算法竞赛是为了解决数学问题而产生的，而数据结构是为了解决真正程序的应用产生的。 越基本的东西适用性越强。竞赛的目标是在有限的时间和题目中比试出谁高谁低，那么自然需要用一些比较难和冷僻的东西来考。确保一些人会一些人不会。要是考基础的，考3天3夜，大家都会，回答的都很好，那还怎么比赛出结果？当然，这些算法也是有它的特定用途和背景的。

user: user-0
content: 引用 1 楼 caozhy 的回复:的确是没有关系。数据结构中提到的“算法”，你不能说它不是算法，但是和竞赛提到的算法如同小学算术和中学方程之间的关系。怎么感觉算法竞赛是为了解决数学问题而产生的，而数据结构是为了解决真正程序的应用产生的。

user: user-3
content: 数据结构和算法的关系就是，为了实现这个算法，你要选取合适的数据结构。 这个算法采用了队列，而队列的实现是采取了数组的方式。 当然你也可以用C++的面向对象来构建Queue对象，实现它的各个方法，来替代这个程序当中的数组操作。  你之所以感觉不到数据结构的存在，是因为作者简化了数据结构的实现（直接以数据的形式替代了） 其中的front，rear都是队列当中用到的。数据结构中使用的是指针，这里用数组下标替代。

user: user-2
content: 的确是没有关系。数据结构中提到的“算法”，你不能说它不是算法，但是和竞赛提到的算法如同小学算术和中学方程之间的关系。
user-0 提问: 关于数组名 s 和 &s 的问题

回复:
user: user-1
content: 值一样，类型/意义不一样。

user: user-2
content: 只能说明两者的值是相同的，都等于数组首元素的地址。 但是在后续操作上还是不一样的，不能简单的说s和&s一样。 至少s可以说是数组，而&s只能是数组首元素地址。 如果s和&s完全一样，那么(s)[1] ==(&s)[1]应该成立

user: user-3
content: 一谈到这类问题就开始扯“地址”，你当这是汇编。完全没有类型的观念。

user: user-3
content: 引用 20 楼 baichi4141 的回复:[quote=引用 9 楼 sholber 的回复:] [quote=引用 6 楼 baichi4141 的回复:] 谁告诉你一样的，揍他，哪本书告诉你一样的，烧掉 变量包括数值和类型两个信息，s和&s有相同的数值，但类型不同，分别执行一次+1看看得到什么结果就明白了 &s到底是值还是变量？[/quote] 不存在没有类型的数值 你直接写在代码里的1类型是int，1.0类型是double，你写个float a = 1.0;编译器就会警告类型转换精度问题[/quote] 单看s是一个数组，单看&s是一个指针。数组的值是什么（不要说是地址）？指针的值是什么，这能一样吗，更遑论“有相同的数值”。

user: user-4
content: 引用 9 楼 sholber 的回复:[quote=引用 6 楼 baichi4141 的回复:] 谁告诉你一样的，揍他，哪本书告诉你一样的，烧掉 变量包括数值和类型两个信息，s和&s有相同的数值，但类型不同，分别执行一次+1看看得到什么结果就明白了 &s到底是值还是变量？[/quote] 不存在没有类型的数值 你直接写在代码里的1类型是int，1.0类型是double，你写个float a = 1.0;编译器就会警告类型转换精度问题

user: user-5
content: sizeof(s)=数组的长度*sizeof（int）。如：int s[5]。sizeof(s)=5*sizeof(int)前面说错了，，不好意思！

user: user-5
content: sizeof(s)=数组的长度*sizeof（int）。前面说错了，，不好意思！

user: user-5
content: sizeof(s)=数组的长度*sizeof（int）。前面说错了，，不好意思！

user: user-6
content: 引用 12 楼 u013015690 的回复:sizeof（s）表示和sizeof（int）一样，具体等于多少，跟你的系统有关。当然我是说你的数组s[]定义的是int的的情况。 我都怀疑你测试过没 顺口瞎掰

user: user-7
content: scanf("%s",s)等价于scanf("%s",&s)吗？

user: user-8
content: 好像绕口令啊

user: user-9
content: s可以理解成一个指针指向数组的起始位置，&s是s的引用（可以理解成指针的指针，还是有区别的），其值一样，代表意义不一样

user: user-10
content: 引用 5 楼 sholber 的回复:给定声明： char s[10]; 1，除非作为sizeof和一元&运算符的操作数，数组名将被转换为指向其第一个元素的指针。所以，若s在表达式中不以sizeof和一元&运算符的操作数出现，其类型为char *。 2，若一元运算符&的操作数的类型是T（即：&T），则结果的类型是指向T的指针。所以，&s的类型是char (*) [10]。 5楼讲的对

user: user-11
content: 引用 21 楼 CarlXie 的回复:只能说明两者的值是相同的，都等于数组首元素的地址。 但是在后续操作上还是不一样的，不能简单的说s和&s一样。 至少s可以说是数组，而&s只能是数组首元素地址。 如果s和&s完全一样，那么(s)[1] ==(&s)[1]应该成立 我认为s是才是首元素地址，&s是数组的地址

user: user-11
content: #include<stdio.h> int a[3]={1,3,5}; int *p1= NULL; int (*p2)[3]=NULL; int main() { 	printf("首个元素地址%p\n",a); 	printf("第二个元素地址%p\n",a+1); 	printf("正真的数组地址%p\n",&a); 	printf("正真的数组地址%p\n",(&a)[0]); 	printf("数组地址+1后是%p\n",(&a)[1]); 	printf("sizeof (a) = %d\n",sizeof (a)); 	printf("sizeof (&a) = %d\n",sizeof (&a)); 	printf("sizeof (a + 1) = %d\n",sizeof (a + 1)); 	printf("---------------------------------\n"); 	printf("为什么是 %d\n",*(a+1)); 	printf("为什么是 %d\n",*(*(&a+1) - 1)); 	printf("为什么是 %d\n",*a); 	printf("---------------------------------\n");  	p1 =a; 	p2 = &a; 	printf("为什么是 %d\n",p1[0]); 	printf("为什么是 %d\n",*p2[0]); 	printf("为什么是 %d\n",p2[0]); 	printf("为什么是 %d\n",sizeof (p1)); 	 	 	return 0; } 建议楼主把这段代码研究一下，在参考《C专家编程》，相信你会从此对此类问题有清晰的认识。

user: user-12
content: 这位帅哥说的很好。  引用 21 楼 CarlXie 的回复:只能说明两者的值是相同的，都等于数组首元素的地址。 但是在后续操作上还是不一样的，不能简单的说s和&s一样。 至少s可以说是数组，而&s只能是数组首元素地址。 如果s和&s完全一样，那么(s)[1] ==(&s)[1]应该成立

user: user-5
content: &s表示地址

user: user-5
content: sizeof（s）表示和sizeof（int）一样，具体等于多少，跟你的系统有关。当然我是说你的数组s[]定义的是int的的情况。

user: user-3
content: 引用 10 楼 u013015690 的回复:s表示这个数组是s[]的首元素，即等价于s[0]。而&s是对数组取地址，也就是&s[0]。。 如果“s表示这个数组是s[]的首元素，即等价于s[0]”，那么，sizeof s的结果是啥？

user: user-5
content: s表示这个数组是s[]的首元素，即等价于s[0]。而&s是对数组取地址，也就是&s[0]。。
user-0 提问: Linux执行MYSQL的SQL语句时，如果要插入中文怎么办？

回复:
user: user-1
content: 就用char，根本用不到宽字符，只要你数据库的编码和显示时的编码一致就可以正常显示中文了

user: user-2
content: 对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A

user: user-3
content: 转换为widechar就可以了吧

user: user-4
content: 如果不在mysql中查询这列，直接把它当做blob处理好了。ui显示的时候自己编解码

user: user-5
content: 数据库服务器和客户端统一使用 utf8编码。  客户端程序在调用 mysql_real_connect成功后， 手工指定字符编码：  mysql_set_character_name(conn, "utf8");  // 默认一般为latin1

user: user-6
content: 试试N'我勒个去'

user: user-7
content: 建议用UTF8吧，为了代码兼容性我一般不用GBK字符集。

user: user-8
content: 的确是个头疼的问题

user: user-9
content: 搞定了问题也不说解决方法。 MYSQL的C API要将字符串转换成char*。 "UNICODE 字符集，为各种语言中的每一个字符设定了统一并且唯一的数字编号，以满足跨语言、跨平台进行文本转换、处理的要求。” 关于字符编码的问题网上有很多文章可以参考。http://www.regexlab.com/zh/encoding.htm 中文乱码设置成gbk

user: user-0
content: 今天搞定了编码问题，现在烦恼的是这个，linux上面运行mysql进行插入查询，插入中文之后，数据库里面存放的就是???????这种乱码，这是什么原因是我的my.cnf没有配置正确吗？我的my.cnf放在了/etc下面和/usr/etc下面。这样行吗，内容是。 [client]  default-character-set=utf8  [mysqld]  default-character-set=utf8 有问题吗？  求大神解决。。 有100分高分和长期关注为回报。

user: user-10
content: 我表示我看不懂，旋旋

user: user-11
content: 字符集是大问题。 建议你还是多实验，在linux上先把sql试好。然后在windows上打印出sql，看是否一致。 linux一般是utf8,不过和mysql的配置设定有关。 windows一般是ansi,不过你的工程也可以自定字符集。

user: user-0
content: 唉，帖子就这么沉了，说好的CSDN的大神呢。。就不能帮帮我？

user: user-0
content: 大哥，wsprintf针对的目标是wchar_t 意思就是他是填充一个wchar_t字符串，但是执行MySQL查询函数是用char字符串，所以不能用wsprintf啊。有别的解决方案不？难道没有大神写linux执行mysql查询底层的大神啊 求助啊 求助啊！！！

user: user-12
content: sprintf有宽字符版本啊

user: user-0
content: 大神们，求救啊，问题的核心是执行MYSQL_REAL_QUERY； 因为我的szSql是"INSERT INTO TableName (Name) VALUES (' " 到宽字符串的时候就断掉了啊。 原以为是\0截断所以我用了for(int i = 0; i < 200; i++){std::wcout << szSql[i];} 到了宽字符那个地方还是错的 我已经无力了。 求大神帮助。。。
user-0 提问: 《C陷阱与缺陷》3个单词

回复:
user: user-1
content: residency的释义是住处，我猜测是居住年限 home_score，visitor_score，一个是本地，一个是拜访地，我这样理解的，第一个是老家的，第二个是我打工的地方，哈哈哈

user: user-2
content: 程序上文，声明的变量名。回溯到提及此程序的地方看解释
user-0 提问: 如何将ASC字符转换成int型

回复:
user: user-1
content: 减 ‘0’就可以转化了

user: user-2
content: 不需要转换吧，ASCII字符本来就死7位无符号整数，转换后反而浪费内存

user: user-3
content: 引用 6 楼 qqwenqqqi 的回复:[quote=引用 2 楼 sholber 的回复:] char * p = "abcd1234"; int hex [sizeof "abcd1234"]; for (int i = 0; i <= sizeof "abcd1234"; i ++) hex [i] = p [i]; 才20分…… 你看戏你写的代码。编译一下再发上来。下面是我给你改的 	char * p = "abcd1234";  	int hex [sizeof("abcd1234")-1];  	for (int i = 0; i < sizeof("abcd1234"); i++)  	hex [i] = p [i];   你要怎么转数组。有现成的atoi函数用法很简单.  也可以自己写。ascii和int区别在于一个是1个字节内存，1个是4个字节的内存，4个直接直接可以接纳1个字节的 使用可以直接等于 int iNumber = 'A'; //Q的ascii码值是十进制65.十六进制0x41。自己琢磨会儿[/quote] 多谢指正，忘了减一。 不过int类型不一定是4个字节，sizeof "abcd1234" - 1比sizeof ("abcd1234")-1来得简洁一些。

user: user-4
content: 引用 2 楼 sholber 的回复:char * p = "abcd1234"; int hex [sizeof "abcd1234"]; for (int i = 0; i <= sizeof "abcd1234"; i ++) hex [i] = p [i]; 才20分…… 你看戏你写的代码。编译一下再发上来。下面是我给你改的 	char * p = "abcd1234";  	int hex [sizeof("abcd1234")-1];  	for (int i = 0; i < sizeof("abcd1234"); i++)  	hex [i] = p [i];   你要怎么转数组。有现成的atoi函数用法很简单.  也可以自己写。ascii和int区别在于一个是1个字节内存，1个是4个字节的内存，4个直接直接可以接纳1个字节的 使用可以直接等于 int iNumber = 'A'; //Q的ascii码值是十进制65.十六进制0x41。自己琢磨会儿

user: user-5
content: atoi  for循环

user: user-3
content: i <= sizeof "abcd1234";

user: user-6
content: 引用 1 楼 user-7 的回复:字符串转换成int型？单个字符的话直接 = 就可以 比如 int n = 'a'; ++ 可以使用这种方法的哦。

user: user-3
content: char * p = "abcd1234"; int hex [sizeof "abcd1234"]; for (int i = 0; i <= sizeof "abcd1234"; i ++) hex [i] = p [i]; 才20分……

user: user-7
content: 字符串转换成int型？单个字符的话直接 = 就可以 比如 int n = 'a';
user-0 提问: 《C陷阱与缺陷》运算符优先级错误！

回复:
user: user-1
content: 引用 楼主 incident_a 的回复:书上说到双目运算符优先级的时候，是这样的： Next come the true binary operators. The arithmetic operators have the highest precedence, then the shift operators, the relational operators, the logical operators, the assignment operators, and finally the conditional operator. 也就是说赋值运算符（=）优先级是高于条件运算符（？：）的，往前翻了下书，明显不对啊，实际上应该是这样： ？： assignments ， 最后应该是逗号运算符啊，难道书上写错了？  看了下，好像是有点问题。 我估计他的意思是， 对下面这类的表达式： 1<2 ? 1-1<<2:3; 运算符的优先级 是   1-1 0<<2 然后是 1<2 最后是返回。  这句话： Next come the true binary operators. The arithmetic operators have the highest precedence, then the shift operators, the relational operators, the logical operators, the assignment operators, and finally the conditional operator. 改成 Next come the true binary operators. The arithmetic operators have the highest precedence, then the shift operators, the relational operators, the logical operators, and finally the conditional operator. 就对了。 或者向你说的一样，改成： Next come the true binary operators. The arithmetic operators have the highest precedence, then the shift operators, the relational operators, the logical operators,  the conditional operator, the assignment operators , and finally the comma operator.

user: user-0
content: 书上写得很明显，《c陷阱与缺陷》大家也一定都听说过吧，作者也说连续16版未更改内容，精确与权威性都是其他书不能比的，然而在这里却犯这么明显的错误，我该相信谁？

user: user-0
content: 你们的意思是，这本书在这里全写错了？

user: user-2
content: 只是说算术运算符的优先级高于后面这些，但没有在后面这些运算符中比较优先级的意思……

user: user-3
content: 引用 4 楼 incident_a 的回复:[quote=引用 1 楼 user-3 的回复:] 他们的优先级是一样的。 你这是c++[/quote] 跟C是一样的。

user: user-0
content: 引用 1 楼 user-3 的回复:他们的优先级是一样的。 你这是c++

user: user-0
content: 别的书就算了，但这是《c陷阱与缺陷》，号称16次印刷未变更的技术书，怎么可能随便就被我发现错误？大家再仔细看看，肯定有没看清楚的地方

user: user-1
content: 想想本科那会儿，《数据结构》那本书上，我貌似发现过不少错误，老师因此还给我加分了～～

user: user-3
content: 他们的优先级是一样的。
user-0 提问: 装C语言最小需要的安装文件

回复:
user: user-1
content: 引用 2 楼 incident_a 的回复:[quote=引用 1 楼 M173475237 的回复:] cl.exe 你这样蹦出来的cl.exe,不就是编译器吗？除此之外呢？[/quote] cl.exe很小的，只要几兆。 然后用VSVAR32.BAT设置环境变量。  剩下的，就是在dos下打命令了

user: user-2
content: 起码要有编译器、链接器、最基本的几个.h和.lib，比如stdio stream stdlib之类的。以及一个文本编辑器。

user: user-0
content: 引用 1 楼 M173475237 的回复:cl.exe 你这样蹦出来的cl.exe,不就是编译器吗？除此之外呢？

user: user-1
content: cl.exe
user-0 提问: 谁能告诉我 hadoop开发是开发什么呢?

回复:
user: user-1
content: LZ还知道大数据？

user: user-2
content: 引用 8 楼 NineTyNine_LP 的回复:hadoop是一个平台，一个分布式的平台。采用java开发的。具体C能开发什么我不太清楚。 在hadoop上有分布式存储HBase，分布式查询，分布式挖掘Mathout等等。 这个东东目前在互联网公里比较火。主要用于处理大数据。 它是开源贡献者根据GOOGLE的一篇论文开发的。头像诱人

user: user-3
content: 引用 7 楼 mujiok2003 的回复:[quote=引用 5 楼 redfox1985 的回复:] hadoop应该是一个体系了，包括文件存储、任务分解和执行，文件存储可以把分布在不同地方的磁盘当做一块磁盘来使用，任务分解和执行就是通过mapreduce来搞定了，map是分解，reduce是执行后返回。。。。我的粗浅理解吧，都是听同事们解释的，我还没有仔细去看  我勒个去，这里也能见到你[/quote] 嘿嘿，我是跟着你的脚步来的。。。

user: user-4
content: google下老三篇，别问咱，咱小白，呵呵呵

user: user-5
content: hadoop是一个平台，一个分布式的平台。采用java开发的。具体C能开发什么我不太清楚。 在hadoop上有分布式存储HBase，分布式查询，分布式挖掘Mathout等等。 这个东东目前在互联网公里比较火。主要用于处理大数据。 它是开源贡献者根据GOOGLE的一篇论文开发的。

user: user-6
content: map/reduce 只是一种思想 你可以利用这个思想干好多事情。 hadoop是利用这个思想进行了分布式处理，在大数据方面，会产生不错的运行速度。

user: user-7
content: map/reduce，映射规约， 在多线程/多进程协同任务中经常用到。   openmp就有map/reduce

user: user-8
content: 吹牛谁不会啊？

user: user-7
content: 引用 5 楼 redfox1985 的回复:hadoop应该是一个体系了，包括文件存储、任务分解和执行，文件存储可以把分布在不同地方的磁盘当做一块磁盘来使用，任务分解和执行就是通过mapreduce来搞定了，map是分解，reduce是执行后返回。。。。我的粗浅理解吧，都是听同事们解释的，我还没有仔细去看  我勒个去，这里也能见到你

user: user-0
content: 感谢大家的回答 但是我还是没明白刚刚那个人说用c做hadoop开发 主要是什么工作... 没做过这方面 也没了解过

user: user-9
content: Hadoop本身是一个分布式文件存储系统（or 软件）。 现在有很多基于Hadoop提供的结构和API而开发的工具，可以运行在Hadoop中。 Map reduce 是一个围绕Hadoop文件分布式管理系统的软件开发框架。 期望Hadoop牛人精解。。。 UP

user: user-3
content: hadoop应该是一个体系了，包括文件存储、任务分解和执行，文件存储可以把分布在不同地方的磁盘当做一块磁盘来使用，任务分解和执行就是通过mapreduce来搞定了，map是分解，reduce是执行后返回。。。。我的粗浅理解吧，都是听同事们解释的，我还没有仔细去看
user-0 提问: 如何监视键盘输入

回复:
user: user-1
content: http://stackoverflow.com/questions/7469139/what-is-equivalent-to-getch-getche-in-linux

user: user-0
content: 找到了，给大家分享一下把，就是kbhit()函数 但是LINUX下没有 网上的实现可以用 int kbhit(void) {     struct timeval tv;     fd_set rdfs;     tv.tv_sec = 0;     tv.tv_usec = 0;     FD_ZERO(&rdfs);     FD_SET (STDIN_FILENO, &rdfs);     select(STDIN_FILENO+1, &rdfs, NULL, NULL, &tv);     return FD_ISSET(STDIN_FILENO, &rdfs); }

user: user-0
content: 就时想实时查看控制台有没有输入啊

user: user-2
content: 在系统消息处理进程里啊

user: user-3
content: 如何监视键盘输入？ 貌似这个应该是全局的，在你的ring3应用程序内，应该无法完成的吧

user: user-4
content: 键盘输入的句柄呗
user-0 提问: 关于多进程和多线程 分配的问题

回复:
user: user-1
content: 这跟系统调用算法有关吧，有的是时间片轮转，有的是优先级算法等等吧！

user: user-2
content: 但CPU线程是按照时间片的概念获取cpu的，多cpu没有看到具体的运行说明，但是我感觉应该也是时间片来划分

user: user-2
content: 引用 2 楼 Oringe_new 的回复:[quote=引用 1 楼 user-5 的回复:] 没记错的话，进程是资源分配的基本单位，线程才是执行任务的基本调度单位吧！ 那是windows的定义吧，，，，，[/quote]这和Windows和Linux平台定义没有关系

user: user-0
content: 有人能讲解的清楚些么

user: user-3
content: SetThreadIdealProcessor Function  Sets a preferred processor for a thread. The system schedules threads on their preferred processors whenever possible.   DWORD WINAPI SetThreadIdealProcessor(   __in          HANDLE hThread,   __in          DWORD dwIdealProcessor );  Parameters hThread  A handle to the thread whose preferred processor is to be set. The handle must have the THREAD_SET_INFORMATION access right. For more information, see Thread Security and Access Rights.  dwIdealProcessor  The number of the preferred processor for the thread. This value is zero-based. If this parameter is MAXIMUM_PROCESSORS, the function returns the current ideal processor without changing it.  Return Value If the function succeeds, the return value is the previous preferred processor.  If the function fails, the return value is (DWORD) – 1. To get extended error information, call GetLastError.  Remarks You can use the GetSystemInfo function to determine the number of processors on the computer. You can also use the GetProcessAffinityMask function to check the processors on which the thread is allowed to run. Note that GetProcessAffinityMask returns a bit mask whereas SetThreadIdealProcessor uses an integer value to represent the processor.  To compile an application that uses this function, define _WIN32_WINNT as 0x0400 or later. For more information, see Using the Windows Headers.  Requirements Client  Requires Windows Vista, Windows XP, Windows 2000 Professional, or Windows NT Workstation 4.0.   Server  Requires Windows Server 2008, Windows Server 2003, Windows 2000 Server, or Windows NT Server 4.0.   Header  Declared in Winbase.h; include Windows.h.   Library  Use Kernel32.lib.   DLL  Requires Kernel32.dll.    See Also GetProcessAffinityMask GetSystemInfo Multiple Processors OpenThread Process and Thread Functions SetThreadAffinityMask Threads    Send comments about this topic to Microsoft   Build date: 8/15/2007

user: user-3
content: CPU调度和线程调度与进程调度无直接联系。

user: user-0
content: 引用 1 楼 user-5 的回复:没记错的话，进程是资源分配的基本单位，线程才是执行任务的基本调度单位吧！  问下 什么叫"资源分配的基本单位"  和  " 执行任务的基本调度单位" 呢 ?

user: user-4
content: 引用 1 楼 user-5 的回复:没记错的话，进程是资源分配的基本单位，线程才是执行任务的基本调度单位吧！ 那是windows的定义吧，，，，，

user: user-5
content: 没记错的话，进程是资源分配的基本单位，线程才是执行任务的基本调度单位吧！
user-0 提问: c语言画图，时间为横坐标，速度为纵坐标，请教高手！

回复:
user: user-1
content: 请楼主移驾VC/MFC论坛。

user: user-2
content: 引用 2 楼 w_yulian 的回复:我们的操作系统是Linux系统，使用C语言编的 GUI和语言无关，参考XWindow的开发手册。

user: user-3
content: MFC可好？

user: user-0
content: 我们的操作系统是Linux系统，使用C语言编的
user-0 提问: #define funcptr void(*)()        用typedef怎么替换？

回复:
user: user-1
content: 每个语言都不有尽如意的地方, 所以C++语言标准也在不断进化.  所以, 要使用一个语言, 唯有遵守它的标准规定.    要想追根结底, 就需要深入了解其标准了.

user: user-2
content: typedef和define完全不一样，不要用define的定义去看待typedef  你应该这样想: void (*funcptr)(); 是定义一个函数指针， typedef void (*funcptr)(); 是类型定义一个函数指针  void(*)() funcptr; 这种定义是无意义的，错误的语法 所以typedef void(*)() funcptr;也是错误的

user: user-3
content: 引用这样的形式很难看 可惜那是是正确的方式。

user: user-3
content: 也可以这样  #include <stdio.h>  void foo(){}  int main() { 	// your code goes here 	typedef void funcptr_t();     typedef funcptr_t* funcptr;      funcptr f = foo;     printf("%p\n", f); 	return 0; }

user: user-4
content: 是不是有很多初学者根本就不知道“编程语言有语言标准”这件事？ 为什么不行的答案只有一个，因为标准里没有这种写法所以编译器不认。 当然它可以认，只要编译器的开发者和写代码的人有相同的想法，或者写代码的人自己发明一个编译器甚至一门新语言。

user: user-5
content: 1) 不符合语法习惯 2) 这样写失去焦点了,不知道 定义的啥子.

user: user-6
content: 我也觉得typedef int haha;这样的太害人，让人以为typedef不过是#define的翻版。

user: user-6
content: 好像有人批判过“一般的typedef形式”，说它是避重就轻，是毒草，害人无数。还说估计连作者自己都是受害者，或者作用不负责任乱写云云……
user-0 提问: 这种内联ASM会导致BUG吗

回复:
user: user-1
content: 仅供参考#include <stdio.h> float data[500]; int i; void main() {     for (i=0;i<500;i++) {data[i]=1.0f;printf("%g\n",data[i]);}     __asm {         push ecx         push edi         mov ecx,500         mov eax,0xBF800000 //-1.0f         lea edi,data         rep stosd         pop edi         pop ecx     }     for (i=0;i<500;i++) printf("%g\n",data[i]); }

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:仅供参考#include <stdio.h> float data[500]; int i; void main() {     for (i=0;i<500;i++) {data[i]=1.0f;printf("%g\n",data[i]);}     __asm {         push ecx         push edi         mov ecx,500         mov eax,0xBF800000 //-1.0f         lea edi,data         rep stosd         pop edi         pop ecx     }     for (i=0;i<500;i++) printf("%g\n",data[i]); } 好吧....谢了..话说看到野生的zhao4zhong1了..
user-0 提问: 求助：在vc下编的c语言程序可运行，在xcode下的出语言环境却运行不了。

回复:
user: user-1
content: 没记错的话，应该不是同一种语言把，xcode 不是使用的object-c么

user: user-2
content: 报什么错？这样看不出来。。

user: user-2
content: 引用 1 楼 TBWood 的回复:没记错的话，应该不是同一种语言把，xcode 不是使用的object-c么 可以写C++，xcode还有clang+llvm这个神器编译C/C++呢。
user-0 提问: CRichEditCtrl 双标双击缩略图，调用图片查看器显示原图，怎么做

回复:
user: user-1
content: 楼主.问题解决了吗,我现在也想知道怎么实现的

user: user-0
content: 顶一下，希望早一点有人回答，急
user-0 提问: 在oj提交的代码，老是不通过！帮忙看看为什么！

回复:
user: user-1
content: 会检查scanf函数的返回值吗？

user: user-2
content: 还有问题就把题目贴下哦～

user: user-1
content: http://bbs.csdn.net/topics/390471779

user: user-3
content: 死循环，显然有错误。

user: user-0
content: 引用 4 楼 halfword1982 的回复:while(1)循环没法退出啊，一旦调用你的程序就死循环了。一般OJ系统测试多组数据应该是多次执行测试程序，而不是在一次执行过程中处理。我改改

user: user-0
content: 哎，好坑爹，终于通过了。这都是什么跟什么嘛。 #include <stdio.h> #define N 12 int a[N]; int main(void) { 	int i=0,max=0; 		while(scanf("%d",a) == 1) 		{ 		for(i=1; i<=9; i++) 			scanf("%d",&a[i]); 		for(max=a[0],i=0;i<=9;i++) 		{ 			if(max<a[i]) 				max=a[i]; 		} 		printf("max=%d\n",max); 	}  	return 0; }

user: user-4
content: #include<stdio.h>  int n[10], temp; int main() { 	int i; 	while (scanf("%d%d%d%d%d%d%d%d%d%d",&n[0], &n[1] 				 , &n[2], &n[3], &n[4], &n[5], &n[6] 				 , &n[7], &n[8], &n[9]) != EOF) 	{ 		temp = n[0]; 		 		for(i = 1; i < 10; ++i) 		{ 			if(n[i] > temp) 				temp = n[i]; 		} 		 		printf("max=%d\n", temp);; 	} 	return 0; }     AC了

user: user-0
content: 引用 12 楼 Study_Bird 的回复:弱弱的问一下，如果十个数都是负数怎么办。

user: user-5
content: 弱弱的问一下，如果十个数都是负数怎么办。

user: user-6
content: 尾递归实现，参考一下。  #include <stdio.h> #include <limits.h>  int max_aux(int max, int cnt, int* tmp) { 	if (cnt == 10) return max; 	scanf("%d", tmp); 	if (*tmp > max) 	{ 		max = *tmp; 	} 	return max_aux(max, cnt + 1, tmp); }  int main() { 	int max = 0; 	while (scanf("%d", &max) == 1) 	{ 		//we have 9 left in this line 		printf("max=%d\n", max_aux(max, 1, &max)); 	} 	return 0; }

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:会检查scanf函数的返回值吗？正在翻书当中。

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:会检查scanf函数的返回值吗？貌似还不会。

user: user-7
content: while(1)循环没法退出啊，一旦调用你的程序就死循环了。一般OJ系统测试多组数据应该是多次执行测试程序，而不是在一次执行过程中处理。

user: user-8
content: 你这个程序在你一次输入20个数的时候会输出2个MAX。 如输入 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20（为一行，没回车） 输出为 MAX=10 MAX=20  是不是因为这与要求不符。 你的程序的功能到没有什么错误就是了

user: user-0
content: 引用 1 楼 u010412073 的回复:测试数据有多组？题目没有说有多少组，我只测试了几组。

user: user-9
content: 测试数据有多组？
user-0 提问: 用c语言实现

回复:
user: user-1
content: 引用 5 楼 zlm0913 的回复:秦九韶算法 谢谢，原来叫秦九韶算法 不过，好像还有一个外国名字。

user: user-2
content: 引用 4 楼 lm_whales 的回复:如果是连续的升幂或者降幂排列，可以采用逐步相乘相加的办法，很有名的，名字忘了  如果不是连续的---只保留非零项---那么用pow 函数做吧 ，模仿上面的做法，太伤神，而且效率没有那么高。  每读到一项，用系数乘以根据 x值和次数，求出来的幂；逐项相加即可。  多项式就是有限项的和，每项有一个次数，一个系数。  秦九韶算法

user: user-1
content: 如果是连续的升幂或者降幂排列，可以采用逐步相乘相加的办法，很有名的，名字忘了  如果不是连续的---只保留非零项---那么用pow 函数做吧 ，模仿上面的做法，太伤神，而且效率没有那么高。  每读到一项，用系数乘以根据 x值和次数，求出来的幂；逐项相加即可。  多项式就是有限项的和，每项有一个次数，一个系数。

user: user-3
content: 你至少把题目放上来吧，课本？什么课本？

user: user-4
content: 用Switch语言实现吧？

user: user-5
content: 用栈的数据结构实现吧