博文

feof(2005-08-14 01:12:00)

摘要:MSDN 2001 ------------------------ feof Tests for end-of-file on a stream. int feof( FILE *stream ); The feof function returns a nonzero value after the first read operation that attempts to read past the end of the file. It returns 0 if the current position is not end of file. There is no error return. Example /* FEOF.C: This program uses feof to indicate when * it reaches the end of the file FEOF.C. It also * checks for errors with ferror. */ ********************************************************* #include<stdio.h> struct number {     int num; }a[10],b[10]; int main(void) {     int i;     FILE *fp;     fp=fopen("d:\\abc.txt","w+");     for(i=0;i<10;i++)        a[i].num=i;     for(i=0;i<10;i++)        fwrite(&a[i],sizeof(struct number),1,fp);  &......

阅读全文(3667) | 评论:0

输出变量内存地址(2005-08-13 17:03:00)

摘要:%p的运用 #include <stdio.h> int main() {   int i = 0;   printf("[%p]\n",&i);   return 0; }......

阅读全文(2547) | 评论:0

(转)成为编程高手的五个阶段(2005-08-22 10:58:00)

摘要:第一阶段 此阶段主要是能熟练地使用某种语言。这就相当于练武中的套路和架式这些表面的东西。 第二阶段 此阶段能精通基于某种平台的接口(例如我们现在常用的Win 32的API函数)以及所对应语言的自身的库函数。到达这个阶段后,也就相当于可以进行真实散打对练了,可以真正地在实践中做些应用。 第三阶段 此阶段能深入地了解某个平台系统的底层,已经具有了初级的内功的能力,也就是“手中有剑,心中无剑”。 第四阶级 此阶段能直接在平台上进行比较深层次的开发。基本上,能达到这个层次就可以说是进入了高层次。这时进入了高级内功的修炼。比如能进行VxD或操作系统的内核的修改。 这时已经不再有语言的束缚,语言只是一种工具,即使要用自己不会的语言进行开发,也只是简单地熟悉一下,就手到擒来,完全不像是第一阶段的时候学习语言的那种情况。一般来说,从第三阶段过渡到第四阶段是比较困难的。为什么会难呢?这就是因为很多人的思想变不过来。 第五阶级 此阶段就已经不再局限于简单的技术上的问题了,而是能从全局上把握和设计一个比较大的系统体系结构,从内核到外层界面。可以说是“手中无剑,心中有剑”。到了这个阶段以后,能对市面上的任何软件进行剖析,并能按自己的要求进行设计,就算是MS Word这样的大型软件,只要有充足的时间,也一定会设计出来。 第六阶级 此阶段也是最高的境界,达到“无招胜有招”。这时候,任何问题就纯粹变成了一个思路的问题,不是用什么代码就能表示的。也就是“手中无剑,心中也无剑”。 此时,对于练功的人来说,他已不用再去学什么少林拳,只是在旁看一下少林拳的对战,就能把此拳拿来就用。这就是真正的大师级的人物。这时,Win 32或Linux在你眼里是没有什么差别的。 每一个阶段再向上发展时都要按一定的方法。第一、第二个阶段通过自学就可以完成,只要多用心去研究,耐心地去学习。 要想从第二个阶段过渡到第三个阶段,就要有一个好的学习环境。例如有一个高手带领或公司里有一个好的练手环境。经过二、三年的积累就能达到第三个阶段。但是,有些人到达第三个阶段后,常常就很难有境界上的突破了。他们这时会产生一种观念,认为软件无非如此,认为自己已无所不能。其实,这时如果遇到大的或难些的软件,他们往往还是无从下手。 现在我们国家大部分程序员都是在第二、三级之间。他们大多都是通过自学成才的,不过......

阅读全文(2807) | 评论:0

打印1+11+111+1111+11111=(2005-08-13 16:26:00)

摘要:问题: 打印1+11+111+1111+11111=           2+22+222+2222+22222=           ....................           9+99+999+9999+99999=#include int main(){  int i, j, n, sum=0;  for(i = 1;i <= 9;i++){    sum = 0;     for(j = 0,n = 0; j < 5; j++){      n *= 10;      n += i;      sum += n;      if(j == 4) printf("%d = ",n);      else printf("%d+",n);    }    printf("%d\n",sum);  }   getchar();  return 0;  }结果如下:1+11+111+1111+11111=123452+22+222+2222+22222=246903+33+333+3333+33333=370354+44+444+4444+44444=493805+55+555+5555+55555=617256+66+666+6666+666......

阅读全文(4071) | 评论:0

(转)关于指针及数组的基本概念问题(2005-08-13 14:44:00)

摘要:原贴: http://www.programfan.com/club/showbbs.asp?id=95120xiangyu138的答复 回答网友的问题:主题:关于指针及数组的基本概念问题1.请问如下的函数参数定义是不是相等的,用指针做参数有什么意义Node(double *xyz) { x = xyz[0]; y = xyz[1]; z = xyz[2]; }Node(double xyz[3]) { x = xyz[0]; y = xyz[1]; z = xyz[2]; }答:两者是相等的,而且第一种其实更标准,因为第二种也是转化为第一种。在函数形式参数里是没有数组的,都被转化为指针了。所以这时在函数里面没有办法通过像:sizeof(xyz)/sizeof(xyz[0])来取得数组元素的个数(因为根本就不是数组),所以一般还要传递一个数组元素个数的值,否则编这个函数的人不知道你原来的数组个数是多少。如:Node(double xyz[],int n) { x = xyz[0]; y = xyz[1]; z = xyz[2]; } 2.单看double *xyz 的定义,是不是数或数组都可以传递。但是看了{ x = xyz[0]; y = xyz[1]; z = xyz[2]; }这个具体实现所以才知道要传递一个数组过来?答:这个完全错,是看形式参数double *xyz 就知道要传递一个一次指针(一次地址)过来,你要是传数值就会出错的,而且不能传二次指针如:char **argv;的argv。 3.请问 main(int argc,char **argv)这里面的char **argv 具体是表示的是什么意思,传递参数进来时,是应该传递一个指针还是其他,谢谢!答:char **argv 是二次指针,也就是二次地址的意思,就是地址的地址(本身地址也是一个二进制数,它也需要一个地址来保存的哦)。可以传char *aa[];这个是指针数组(也就是数组的元素是指针),或者是二次指针char **a。 **************************1.那为什么我看大部分都喜欢用指针而不直接用数组呢?我觉得用数组定义的很清楚啊答:随便你了,没有所谓的大部分的,其实两者的速度差不多的。3.传 char* p[3] = { "abc", "1234567......

阅读全文(3553) | 评论:3

(转)标准流猜想(2005-08-13 00:12:00)

摘要:标准流猜想 http://www.programfan.com/club/showbbs.asp?id=93427作者:ccpp网上的cFAQ总说使用fflush(stdin)要谨慎,或者说不应使用。我个人认为只要了解了stdin流的原理,在使用起来应该没有问题。在整理了这些资料的过程中,我发现其中很多理论问题并没有想象的那样难于理解,只是那些“高人”在表述的过程中隐藏了很多的理论细节,或者他们根本自己就不太明白。一下是个人的见解!两大流:标准库的流分为两类:文本流(或称为字符流)和二进制流。正文流把文件看作行的序列,每行包含0 个或多个字符,一行的最后有换行符号'\n'。正文流适合一般输出和输入,包括与人有关的输入输出。二进制流用于把内存数据按内部形式直接存储入文件。二进制流操作保证,在写入文件后再以同样方式读回,信息的形式和内容都不改变。二进制流主要用于程序内部数据的保存和重新装入使用,其操作过程中不做信息转换,在保存或装入大批数据时有速度优势,但这种保存形式不适合人阅读。 进入正题,main()            {            char c1, c2;            scanf("%c", &c1);            scanf("%c", &c2);            printf("c1 is %c, c2 is %c", c2\1, c2);            }运行该程序, 输入AB后回车, ......

阅读全文(2116) | 评论:0