Я новичок в C, и у меня возникла проблема со стандартным вводом, которую я не могу найти. Моя программа либо читает из файла (ов), либо читает из стандартного ввода, если пользователь не предоставил аргументы (файлы).
Если пользователь не предоставит никаких аргументов, он будет автоматически читать из стандартного ввода. Моя программа должна принимать ввод (из файла или стандартного ввода), а затем удалять из него пустые строки.
Моя проблема возникает, когда программа читает из стандартного ввода. Каждый раз, когда пользователь что-то набирает, затем нажимает, программа автоматически выводит результаты. Когда я бы предпочел, чтобы ввод был просто новой строкой.
Как я могу сделать так, чтобы программа ждала, пока пользователь нажимает 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, в котором вы можете отключить отображение ввода в терминал. - person David C. Rankin   schedule 29.04.2015