3. 编写一个文件拷贝程序,提示用户输入文本文件名,并以该文件名作为原始文件名和输出文件名。该程序要使用 ctype.h 中的 toupper() 函数,在写入到输出文件时把所有文本转换成大写。使用标准 I/O 和文本模式。
要点:
1、原始文件名和输出文件名只有1个,也就是对文件本身进行改写
2、toupper函数,这里不管原来是大写还是小写,不做判断,直接调用toupper函数。
3、因为文件只有1个,同时进行读写操作,在读到一个字符后,指针自动向下走一格,因此要用fseek把指针调回来一格,这里容易发生错误。
4、又读又写的打开模式“r+”
代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define SIZE 50
int main(int argc, const char *argv[])
{
FILE *fp;
char c;
char name[SIZE];
printf("please input file name you want to change.");
fscanf(stdin, "%s", name);
if((fp = fopen(name, "r+")) == NULL){
fprintf(stdout, "can't open %s file.\n", name);
exit(EXIT_FAILURE);
}
while((c = getc(fp)) != EOF){
c = toupper(c);
fseek(fp ,-1L,SEEK_CUR); // 指针回1格
putc(c, fp);
putc(c, stdout);//屏幕显示
}
fclose(fp);
return 0;
}
原文件:
dnfsk
kfdjaskdjfa
fdjaskdf
111222
i m text 2i m here for you!
i'm text3,im here for you~~!!
i m text 2i m here for you!
new line
i'm text3,im here for you~~!!new line for text3
i m text 2i m here for you!
new line
i'm text3,im here for you~~!!new line for text3
改以后的文件
DNFSK
KFDJASKDJFA
FDJASKDF
111222
I M TEXT 2I M HERE FOR YOU!
I'M TEXT3,IM HERE FOR YOU~~!!
I M TEXT 2I M HERE FOR YOU!
NEW LINE
I'M TEXT3,IM HERE FOR YOU~~!!NEW LINE FOR TEXT3
I M TEXT 2I M HERE FOR YOU!
NEW LINE
I'M TEXT3,IM HERE FOR YOU~~!!NEW LINE FOR TEXT3