Что касается вашего вопроса, я думаю, что ваш опубликованный код не скомпилируется, или maby скомпилирует, но с предупреждениями.
Давайте пройдемся по нему:
int a;
while (a != EOF)
Здесь вы получаете доступ a
без инициализации, это может привести к непредсказуемому поведению вашей программы, вам, вероятно, лучше написать что-то вроде:
int a = getchar();
while (a != EOF)
Next:
while (a==" " || a=="\t")
a
имеет тип int
, в то время как ""
указывает на завершающуюся нулем строку в C и рассматривается как указатель памяти, в которой хранится эта строка.сравнивать символ с указателем не очень хорошая идея :).Вы имели в виду сравнение a
с пробелом или табуляцией как одиночного символа.Это должно быть сделано с помощью ''
:
while (a==' ' || a=='\t')
Так что теперь мы получаем
while (a==' ' || a=='\t')
a=EOF;
Этот цикл будет выполняться до тех пор, пока a
либо табуляция или пробел, но то, что находится втело петли?a = EOF;
, поэтому поток сразу же выйдет из цикла while на следующей итерации.Я предполагаю, что вы имели в виду читать входные данные и переходить вперед, если входные данные являются либо пробелом, либо табуляцией, поэтому вам, вероятно, придется читать ввод через getchar()
while (a==' ' || a=='\t')
a = getchar();
, но не забывайте, чтоgetchar()
может возвращать EOF
в конце ввода или сообщать об ошибке, и вы не хотите застрять в цикле while, когда это произойдет:
while ((a != EOF) && (a==' ' || a=='\t'))
a = getchar();
Теперь, когда вы выходите из этого цикла while
в отличие от текущего кода, перед печатью a
вам необходимо проверить, были ли у вас пробелы или символы табуляции перед этим, а затем распечатать одну вкладку, прежде чем печатать значение в a
.Как (?), согласно вашему первоначальному вопросу , пара вариантов: printf(" ");
или putchar(' ');
, выберите то, что вам нравится больше всего.А также вы не хотите печатать a
, если он содержит EOF
, верно?Я оставлю эту часть вам для правильной реализации.
Надеюсь, это помогло и удачи.