例如asdg fgh jkk
zxc vbn mjk
qw rty uio
..................
在文本中读取一行,把第一个空格前的字符保存到另一个文件,再读第二行,再处理,在保存.....用循环的方式
c语言 如何从文件中读取一行,处理过后存到另一个文件,再读下一行,在处理,再存
答案:3 悬赏:70
解决时间 2021-03-21 10:57
- 提问者网友:爱你等于作孽
- 2021-03-20 22:01
最佳答案
- 二级知识专家网友:不服输的倔强
- 2021-03-20 23:05
这是一个文件拷贝程序,是按行拷贝的,每行都会被存到buf字符数组里,你要做什么操作,在while循环里做就行了。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE * fp;
FILE * fd;
char buf[1024*1024];
printf("1\n");
fp=fopen("a.out","rb");
if(fp==NULL)
{
perror("open file");
exit(0);
}
fd=fopen("data/a.out","wb");
if(fd==NULL)
{
perror("open file");
exit(0);
}
while(fgets(buf,sizeof(buf),fp)!=NULL)
{
fputs(buf,fd);
}
fclose(fd);
fclose(fp);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE * fp;
FILE * fd;
char buf[1024*1024];
printf("1\n");
fp=fopen("a.out","rb");
if(fp==NULL)
{
perror("open file");
exit(0);
}
fd=fopen("data/a.out","wb");
if(fd==NULL)
{
perror("open file");
exit(0);
}
while(fgets(buf,sizeof(buf),fp)!=NULL)
{
fputs(buf,fd);
}
fclose(fd);
fclose(fp);
return 0;
}
全部回答
- 1楼网友:woshuo
- 2021-03-21 01:36
区分读取的源,有如下两种情况:
1 从标准输入读取,即stdin。
可以使用gets函数:
char * gets(char *str);
该函数会从标准输入中读取一行数据,直到读到\n,并将\n替换为字符串结束符\0,读取到的数据以字符串形式存于str中。
需要注意的是,使用gets函数时,需要确保str指向空间大小,必须超过任意一行的长度,否则会出现越界操作。有些编译器会报gets是不安全的,就是这个原因。
2 从文件读取。
对于一个被打开的文件,如果其是可读的,那么可以通过fgets函数实现按行读取。
char *fgets(char *buf, int bufsize, file *fp);
功能与gets类似,只是源不同。fgets从fp中读一行数据存到buf中,同时会判断bufsize,如果一行数据的长度超过了bufsize,那么只读入bufsize长度的数据,确保不会溢出。否则读取整行。
由于在c语言中,标准输入stdin也是以文件指针形式存在的,所以gets可以用
fgets(str, bufsize, stdin);
替代,这样代码量稍多一些,但可以更安全。
- 2楼网友:桃花别处起长歌
- 2021-03-21 00:29
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
FILE *fin,*fout;
char str1[81],str2[81]; //假定每行不超过80个字符
char *infile = "in.txt";
char *outfile = "out.txt";
fin = fopen(infile,"r"); // 读格式打开,默认为文本类型
fout = fopen(outfile,"w"); // 写格式打开,默认为
if((fin == NULL) || (fout == NULL)) {
printf("打开文件失败!\n");
exit(1);
}
while(fscanf(fin,"%s",str1) == 1) {
// 在这儿处理串str1......
strcpy(str2,str1);
fprintf(fout,"%s",str2); // 写入文件
}
fclose(fin);
fclose(fout);
return 0;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯