gpt4 book ai didi

c - 没有正确读取标准输入

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

我试图模仿 unix 实用程序 cat 的行为,但是当我调用以下形式的命令时:

cat 文件 1 - 文件 2 - 文件 3

我的程序将正确输出 file1,然后从标准输入读取,然后当我按下 EOF 时,它将打印文件 2,然后打印文件 3,而不会第二次从标准输入读取。

为什么会这样?

    #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ASCII_LENGTH 255
int printfile(FILE *source, int N);

int main(int argc, char *argv[])
{
int currentarg = 1; //the argument number currently being processed

FILE *input_file;
//if there are no arguments, dog reads from standard input
if(argc == 1 || currentarg == argc)
{
input_file = stdin;
printfile(input_file,0);
}
else
{
int i;
for(i = currentarg; i < argc; i++)
{
printf("%d %s\n",i,argv[i]);
//if file is a single dash, dog reads from standard input
if(strcmp(argv[i],"-") == 0)
{
input_file = stdin;
printfile(input_file,0);
fflush(stdin);
fclose(stdin);
clearerr(stdin);
}
else if ((input_file = fopen(argv[i], "r")) == NULL)
{
fprintf(stderr, "%s: %s: No such file or directory\n", argv[0], argv[i]);
return 1;
}
else
{
printfile(input_file,0);
fflush(input_file);
fclose(input_file);
clearerr(input_file);
}
}
}
return 0;
}

int printfile(FILE *source, int N)
{
//used to print characters of a file to the screen
//characters can be shifted by some number N (between 0 and 25 inclusive)
char c;
while((c = fgetc(source)) != EOF)
{
fputc((c+N)%ASCII_LENGTH,stdout);
}
printf("***** %c %d",c,c==EOF);
return 0;
}

最佳答案

一方面,您不能指望在关闭 stdin 后还能读取它:

            fclose(stdin);

关于c - 没有正确读取标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14430421/

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