我是C的新手,我遇到了stdin的问题我无法找到解决方案。如果用户没有提供任何参数(文件),我的程序将从文件读取或从stdin读取。
如果用户没有提供任何参数,那么它将自动从stdin读取。我的程序应该接受输入(来自文件或标准输入),然后从中删除空行。
程序从stdin读取时出现问题。每次用户输入内容然后按下输入程序自动输出结果。当我更喜欢输入时只是换行。
如何让程序等待用户点击EOF而不是每次输入?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define NUMCHARS 1024
int main(int argc, char** argv){
int good_file = 0;
if (argc <= 1) {
good_file++;
test(stdin);
}
FILE* files[argc - 1];
int i;
for (i = 0; i < argc - 1; i++) {
if ((files[i] = fopen(argv[i + 1], "r")) == NULL) {
continue;
} else {
good_file++;
test(files[i]);
}
}
if (!good_file) {
fprintf(stderr, "ERROR!\n");
}
}
int test(FILE *file) {
char buffer[NUMCHARS];
while (fgets(buffer, NUMCHARS, file) != NULL)
part2(buffer);
fclose(file);
}
int part2(char *buffer) {
if (!is_all_white(buffer)) {
fputs(buffer, stdout);
}
}
int is_all_white(char *s) {
while (*s) {
if (!('\n' == *s || '\t' == *s || ' ' == *s))
return 0;
s += 1;
}
return 1;
}
我感谢任何反馈!
答案 0 :(得分:3)
stdin
本身并不是问题 - 如果您想等待输出数据,则必须存储它。您可以将其写入文件并在之后将其读回。您可以使用malloc
和realloc
将数据存储在内存中。主要是,如果您不想在每一行输出数据,则无需在每一行输出数据。
答案 1 :(得分:-1)
预处理stdin到临时工作文件,这将为您提供所需的控件。 使用函数mkstemp。
警告stdin是一个管道,因为fopen文件可能是磁盘文件