注册 登录
编程论坛 C语言论坛

文件操作

hanserisgood 发布于 2022-10-28 16:32, 1162 次点击
题目:现在一个文件夹中有N份答案的文本文件,这些文件的名称依次由1到N命名(注:N>=1,N同时对应每位新生的编号)
例如现在有两人提交答案:
编号为1的新生答案文件:1.txt中:ABCC
编号为2的新生答案文件:2.txt中:ABCD

程序运行时:
--------
请输入正确答案:ABCD
请输入新生人数(N):2
结果已保存
--------

将得分结果输出到result.txt
该文本格式:
--------
15
20
我刚学到文件操作,像这样的多个文件的操作怎么整,求代码讲解:)谢谢
4 回复
#2
rjsp2022-10-28 18:45
这种题目,应该有规定答案字符串最大长度;
为什么是15和20?题目规定每一题都是4分吗?

我刚学到文件操作,像这样的多个文件的操作怎么整
跟文件操作没关系,就是怎么生成 "1.txt","2.txt" 这样的字符串传给 fopen函数
#3
rjsp2022-10-28 19:10
程序代码:
#include <stdio.h>

int main( void )
{
    char answer[1*1024+1]; // 其实题目没交代答案长度
    printf( "请输入正确答案:" );
    scanf( "%s", answer );

    unsigned long long n; // 其实题目没交代n的取值范围
    printf( "请输入新生人数(N):" );
    scanf( "%llu", &n );

    FILE* fout = fopen( "result.txt", "wt" );
    for( unsigned long long i=0; i!=n; ++i )
    {
        char filename[20+5]; // 其实题目没交代n的取值范围,所以文件名最长是多少就无法确定
        sprintf( filename, "%llu.txt", 1+i );

        char the[ sizeof answer ];
        FILE* fin = fopen( filename, "rt" );
        fscanf( fin, "%s", the );
        fclose( fin );

        size_t count = 0;
        for( size_t j=0; answer[j]!='\0' && the[j]!='\0'; ++j )
            count += answer[j]==the[j];

        fprintf( fout, "%zu\n", count*5 ); // 其实题目没交代一题几分
    }
    fclose( fout );
    puts( "结果已保存" );
}
#4
hanserisgood2022-10-28 22:28
回复 楼主 hanserisgood
题目打掉了一点,是4题 ,每题5分的[em04
#5
hanserisgood2022-11-05 00:00
回复 3楼 rjsp
之前忘记说了,十分感谢!!!
1