gpt4 book ai didi

c - 在 C 中读取和写入字节(来自/在文件中)

转载 作者:太空宇宙 更新时间:2023-11-04 08:57:45 25 4
gpt4 key购买 nike

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

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

简单但低效的解决方案:读写 10/20 字节的组。一种高效(但不简单)的解决方案:读写 block 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;
}

最佳答案

您的代码存在三个问题:

  1. 打字错误 argw而不是 argv
  2. 缺少结尾 }对于 while 循环
  3. feof(file)!=0当您处于 eof 时计算结果为真,与您想要的条件完全相反,替换为 !eof(file)仅当您不在 eof 时才评估为真

还有一个小问题,您重新定义变量 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;
};

关于c - 在 C 中读取和写入字节(来自/在文件中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16135351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com