gpt4 book ai didi

c - C程序中将两个文件合并为一列

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

我想弄清楚为什么当我在终端上执行 gcc 命令时仍然收到错误消息,并且我还包含了代码和编译器。任何人都可以知道为什么或可以帮助我吗?这学期我真的是 C Program 的新手。这是一个主要函数,它采用命令行参数打开两个文件并将这两个文件一次一行地组合成一个输出。第一个文件是文本行,但删除每行末尾的任何尾随空格(换行符、制表符和空格),第二个文件是数字列表。所以应该有两列由一个字符分隔。例如,我有它们,因此您可以通过视觉来获得更多说明:

  Example for to output:
./p2 test/p2-testa test/p2-testb
Test A 11
Test B 51
Test C 91
Test D 26
Test E 17
Test F 76


/* 3 point */
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

const int MAXLEN = 4096;
const int MAXLINES = 10;

int main(int argc, char *argv[]) {

char buffer[MAXLEN];
char buffer2[MAXLEN];
FILE *fp = fopen(argv[1], "r");
FILE *fp2 = fopen(argv[2], "r");

if (!(fp && fp2)) {
perror ("Not Found");
exit (EXIT_FAILURE);
}

int n = 0;
while((n < MAXLINES) && (fgets (buffer, sizeof (buffer), fp)) && (fgets(buffer2, sizeof (buffer2), fp2))) {
printf("%s\t%s", buffer, buffer2);
n++;
}

fclose((fp) && (fp2));
return (0);

}

错误编译消息(顺便说一句:在讲座中,我使用了讲师的 labcheck):

p2:
p2.c: In function ‘main’:
p2.c:52:19: warning: passing argument 1 of ‘fclose’ makes pointer from integer without a cast [-Wint-conversion]
fclose((fp) && (fp2));
~~~~~^~~~~~~~
In file included from p2.c:2:
/usr/include/stdio.h:199:26: note: expected ‘FILE *’ {aka ‘struct _IO_FILE *’} but argument is of type ‘int’
extern int fclose (FILE *__stream);
~~~~~~^~~~~~~~
-3.0 output of program (p2) is not correct for input '/u1/h7/CS151/.check/text/list.1 /u1/h7/CS151/.check/nums/tiny.1':
------ Yours: ------
---- Reference: ----
Line A 6
Line B 41
Line C 52
Line D 3
Line E 36
Line F 61
--------------------

我没有真正理解C程序中的警告和预期消息。

最佳答案

表达式 (fp) && (fp2)传递给 fclose通过运算符 && 组合两个指针,它需要整数操作数并将它们解释为蜂 ==0!=0 .结果是一个整数值,它又是 ==0!=0 , 但它与指针不再有任何关系 fclose期望。

所以 fclose((fp) && (fp2))应该是

fclose(fp);
fclose(fp2);

关于c - C程序中将两个文件合并为一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53314547/

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