0

我必须在C中为操作系统类解决以下问题:

在命令行给出了三个文件,两个用于输入,一个用于输出。输出文件是从输入文件中获取的,如下:第一个文件的 10 个字节,第二个文件的 20 个字节,第一个文件的接下来的 10 个字节,第二个文件的接下来的 20 个字节,依此类推,直到输入文件完成的。

简单但低效的解决方案:读取和写入 10 / 20 字节组。一个高效(但不简单)的解决方案:读取和写入 5000 字节的块。

我尝试了这个简单的解决方案。但它不起作用......任何人都可以帮助我吗?

#include<stdio.h>

int main(int argc, char* argv[], char* envp[]){
if (argc != 4){
    printf("%s", "Usage: c4h filename\n");
    return 0;
}

int c1,c2,i;
FILE *in1;
FILE *in2;
FILE *out;

in1 = fopen(argv[1], "r");
in2 = fopen(argv[2], "r");
out = fopen(argw[3], "wb");


if (in1 == NULL){
    printf("%s", "File not found!\n");
    return 0;
}

if (in2 == NULL){
    printf("%s", "File not found!\n");
    return 0;
}

while(feof(in1)!=0 && feof(in2)!=0){
    for(int i=0;i<20;i++)
        if(feof(in1)!=0){
            c1 = fgetc(in1);
            fputc(c1,out);
        }

    for(int i=0;i<10;i++){
        if(feof(in2)!=0){
            c2 = fgetc(in2);
            fputc(c2,out);
        }

}

fclose(in1);
fclose(in2);
fclose(out);
return 0;
}
4

1 回答 1

2

您的代码存在三个问题:

  1. 错字argw而不是argv
  2. 缺少}while 循环的关闭
  3. feof(file)!=0当您处于 eof 时评估为 true,与您想要的条件完全相反,!eof(file)仅当您不在 eof 时替换为 true

i还有一个较小的问题,您在 for 循环中重新定义了变量:for(int i=0;i<10;i++)应该是for(i=0;i<10;i++)因为您i在代码的前面定义了。

您应该先尝试编译您的代码,然后再将其带到 SO!您发布的代码甚至没有为我编译。这是工作代码:

#include<stdio.h>

int main(int argc, char* argv[], char* envp[]){
if (argc != 4){
    printf("%s", "Usage: c4h filename\n");
    return 0;
}

int c1,c2,i;
FILE *in1;
FILE *in2;
FILE *out;

in1 = fopen(argv[1], "r");
in2 = fopen(argv[2], "r");
out = fopen(argv[3], "wb");


if (in1 == NULL){
    printf("%s", "File not found!\n");
    return 0;
}

if (in2 == NULL){
    printf("%s", "File not found!\n");
    return 0;
}

while(!feof(in1) && !feof(in2)){
    for(i=0;i<20;i++)
        if(!feof(in1)){
            c1 = fgetc(in1);
            fputc(c1,out);
        }

    for(i=0;i<10;i++){
        if(!feof(in2)){
            c2 = fgetc(in2);
            fputc(c2,out);
        }

        }
}

fclose(in1);
fclose(in2);
fclose(out);
return 0;
};
于 2013-05-25T18:12:09.277 回答