【发布时间】:2015-07-08 03:32:45
【问题描述】:
我是 C 新手,我遇到了 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;
}
感谢任何反馈!
【问题讨论】:
-
我不会在这个项目中推荐它,但如果你真的想要那个控件,请参阅
man 3 tcsetattr并查看 Raw 模式,你可以在其中禁用回显输入到终端。