[C]从经管院带回来C语言[0]文件操作[0]

2015-10-09  本文已影响0人  Austin_pb

目前最高学历也只是本科,上的也不是计算机相关专业。
所以大一的时候C语言讲的并不是特别深入。
看到别人的C和我的C好像哪里不一样,所以努力点了一下C技能点。
首先先点出文件操作技能点。

所有学过的代码内容从来都是算算算,算出来的东西只是在编译运行之后闪现了一下,就随着释放内存灰飞烟灭了。

根据K&R的教材
需要声明两项

FILE *fp;
FILE *fopen(char *name, char *mode);

但是实际写的时候只用了FILE *fq;
如果加上FILE *fopen(char *name, char *mode);则会被报错类型冲突
想想也是,fopen是个在<studio.h>声明好的函数,在这里声明自然会报错。

所以HelloWorld就是

#define SOMEPLACE 某个谁都不知道是哪的地方
#include <stdio.h>
int main(int argc, const char * argv[]) {    
    FILE    *fq;
    fq = fopen("SOMEPLACE","wrt+");
    fprintf(fq, "HelloWorld!");
    return 0;
}
所以我们可以做这么一件事

某经典例题:算闰年

虽然C已经很快了,但是OJ毕竟是会有比速度的内容的
比如让输出1900~2100年间的每一个闰年

我大一的时候的代码应该是:
#include<stdio.h>
int main(){
int year = 1900;
while (year <= 2100){
if(year % 4 == 0 && year % 400 != 0){
printf("%d\n",year++);
}
year++;
}
return 0;
}

同样是当时没被培养到的技能:什么是幻数?|所以幻数是什么?|
------------------------------|
谭浩强里的书里提到过幻数,但是当时虽然不知道是什么同时也没有过多的关注这个内容,仔细想想这个应该是个需要关注的习惯缺陷。|就是你没在开头#define的而在后面用了的常数,让人觉得莫名奇妙。
比如我上面的内容应该写成
#define STARTYEAR 1900
#define ENDYEAR 2100
#include<stdio.h>
int main(){
int year = STARTYEAR;
while (year <= ENDYEAR){
if(year % 4 == 0 && year % 400 != 0){
printf("%d\n",year++);
}
year++;
}
return 0;
}

但是为了在OJ上速度快(其实OJ应该不会问基础的问题)
#define STARTYEAR 1900
#define ENDYEAR 2100
#define SOMEPLACE 某个谁都不知道是哪的地方
#include<stdio.h>
int main(){
FILE *fq;
fq = fopen("SOMEPLACE","wrt+");
fprintf(fq, "HelloWorld!");
return 0;
int year = STARTYEAR;
while (year <= ENDYEAR){
if(year % 4 == 0 && year % 400 != 0){
fprintf(fq,"printf("%d\n");\n",year++);
}
year++;
}
return 0;
}
然后把生成好的一堆printf贴到事先准备好的main函数里,就搞定了yeah。
懒得写下去了

写这么一坨感觉:
上一篇下一篇

猜你喜欢

热点阅读