как ввести /n в программу, которая использует getchar() (и прочая путаница)
Я признаю, что это довольно вольное название.
Я делаю упражнение, в котором нам поручено создать программу, которая удаляет завершающие пробелы и удаляет пустые строки. Одно из решений, размещенных в Интернете, получило похвалу, но когда я запускаю код, мне даже не кажется, что он что-то делает. Вот решение, о котором я говорю, с кратким отрывком, который меня смущает
Спецификация программы неоднозначна: означает ли «полностью пустые строки»
строки, которые не содержат никаких символов, кроме новой строки, или она включает строки, состоящие из пробелов и табуляции, за которыми следует новая строка? Здесь используется последняя интерпретация.
Поэтому он говорит, что код должен удалять пустые строки, но я не думаю, что это так, по крайней мере, когда я его запускаю. И я не знаю, как вы могли бы ввести новую строку в качестве ввода, потому что, когда вы нажимаете клавишу ввода, она не пропускает строку, она принимает ваш ввод и продолжает запускать программу. Он продолжает упоминать «пробелы и табуляторы, за которыми следует новая строка», но снова ... что такое новая строка, когда ввод просто запускает программу? И если вы попытаетесь оставить строки пустыми, просто нажав табуляцию или пробел, программа не удалит эти строки, а распечатает ту же пустую строку, поэтому я действительно не знаю, что делает его программа или что он говоря о.
#include <stdio.h>
#include <stdlib.h>
#define MAXQUEUE 1001
int advance(int pointer)
{
if (pointer < MAXQUEUE - 1)
return pointer + 1;
else
return 0;
}
int main(void)
{
char blank[MAXQUEUE];
int head, tail;
int nonspace;
int retval;
int c;
retval = nonspace = head = tail = 0;
while ((c = getchar()) != EOF) {
if (c == '\n') {
head = tail = 0;
if (nonspace)
putchar('\n');
nonspace = 0;
}
else if (c == ' ' || c == '\t') {
if (advance(head) == tail) {
putchar(blank[tail]);
tail = advance(tail);
nonspace = 1;
retval = EXIT_FAILURE;
}
blank[head] = c;
head = advance(head);
}
else {
while (head != tail) {
putchar(blank[tail]);
tail = advance(tail);
}
putchar(c);
nonspace = 1;
}
}
return retval;
}
Помимо запуска кода, я также прошел через него с помощью отладчика, и я нахожу это немного запутанным, но я даже не хочу вдаваться в это, пока не пойму, чего он вообще пытается достичь или почему его хвалят. когда это, казалось бы, ничего не дает.