StillPhelix
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: //... while(getline(s,maxline)) //getline() '/n' не возвращает //... | Согласен. Не возвращает. Функция getline(s,maxline) обрабатывает введеные символы и возвращает количество введеных символов. А символы, которые были введены, getchar() из своего буфера передаёт в массив s[i], адрес которого, естественно, известен вызывающей функции. Ведь он определён в блоке операторов вызывающей функции в самом начале (char s[maxline]). Если мы нажмём просто <Enter>, то функция getline() возвратит 1, но не перевод строки т.к. цикл for(), по условию, прерывается при нажатии <Enter> и этот <Enter> (или '\n') в s[i] не попадёт тоже. Поэтому getline() в конце выполнит: Код: // s[i]='\0'; i++; return i; | возвращая тем самым 1. Т.к. getline() вызывается через while(), и 0 условие его звершения, то нужно вычесть из getline() 1. Поэтому: Код: int main() { tnod *pp; char s[maxline]; pp=NULL; int i=0; printf("Enter your words: >\n"); while(getline(s,maxline)-1) pp=makeTree(pp,s); treePrint(pp); _getch(); } | Это просто обработчик завершения ввода текста (определение факта нажатия <Enter> он же '\n'). Вот и получается, что по вышеописаным причинам '\n' нигде, кроме внутреннего буфера getchar() и переменной int с в getline() (а какже иначе определить, что мы нажали <Enter>), не светится. |