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