学习笔记 使用FILE结构操作文本文件

编程要求

文件a.txt中包含各种字符,但只有数字字符是有效的,提取其中的数字字符,将每3个数字组成一个整数,写到文件b.txt中,每个整数之间用一个空格分开。读取过程中,如果a.txt中最后剩下不到3个数字字符,则将剩下的1个或者2个数字字符组成一个整数。

例如:a.txt中的内容是1j3j5sd0msd454ss3msd563,则抽取出来写入文件b.txt的内容应该是135 45 435 63(第二个整数是由045三个数字组成,所以是45)。

测试输入:

q12h44h67k854ksd923823sf83wd38457sd433ds,

预期输出:

124 467 854 923 823 833 845 743 3

测试输入:

1212121212343434343445454545450000005656565665dfsd455

预期输出:

 121 212 121 234 343 434 344 545 454 545 0 0 565 656 566 545 5 

代码实现

//main.cpp
#include <stdio.h>
#include <stdlib.h>

extern void extractDigit();

int main()
{
	FILE* fp = fopen("a.txt", "w");
	if (NULL == fp)
	{
		perror("ERROE!!!\n");
		return 0;
	}
	char s[1000] = { 0 };
	fgets(s, 999, stdin);
	fputs(s, fp);  
	fclose(fp);   
	extractDigit();  
	FILE* f = fopen("b.txt", "r");
	if (f == NULL) 
		return 0;
	int n, k = 0;
	(void)fscanf(f, "%d", &n);
	while (!feof(f))
	{
		k++;
		printf("%d ", n);  
		if (k % 10 == 0)
			printf("\n");
		(void)fscanf(f, "%d", &n);
	}
	if (k % 10 != 10) 
		printf("\n");
	return 0;
}
//filetxt.cpp
#include <stdio.h>

void extractDigit();

char readADigit(FILE* fi)
{
    char c = fgetc(fi); 
    if (c == EOF)  
        return EOF;
    while (c > '9' || c < '0')
    {
        c = fgetc(fi);
        if (c == EOF)
            return EOF;
    }
    return c;
}

void extractDigit()
{
    FILE* fi = fopen("a.txt", "r");  
    FILE* fo = fopen("b.txt", "w");  
    if (fi == NULL || fo == NULL) 
        return;
    char c = 0;
    int num = 0, k = 0;
    c = readADigit(fi);
    while (c != EOF)
    {
        num = num * 10 + c - '0';
        k++;
        if (k == 3)  
        {
            fprintf(fo, "%d ", num);
            k = 0;
            num = 0;
        }
        c = readADigit(fi);
    }
    if (k != 0)  
    {
        fprintf(fo, "%d ", num);
    }
    fclose(fi); 
    fclose(fo); 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值