Я использую следующий условный оператор для чтения из стандартного ввода.
if ((n = read(0,buf,sizeof(buf))) != 0)
При вводе данных из стандартного ввода пользователь, как правило, нажимает ввод, когда закончит. Но read()
также рассматривает '\n' как ввод, и в этом случае n = 1
и условное выражение не оценивается как ложное. Есть ли способ сделать условную оценку ложной, когда пользователь нажимает ввод (ничего не вводя) на стандартном вводе, кроме проверки содержимого buf. Есть ли какая-либо другая функция, кроме read()
, которую я мог бы использовать для этой цели??
В этом отношении, каким может быть способ для чтения определить конец ввода, когда ввод поступает из стандартного ввода (stdin)?
read()
возврата нуля не означает, что больше нельзя добавить ввод. Демонстрация моей древности - одним из таких устройств были магнитофоны. В настоящее время терминалы другие. С эзотерическими параметрами наopen()
(например, O_NONBLOCK) вы можете добиться такого же поведения на других устройствах. Но пустая строка по определению является строкой, содержащей только символ новой строки — маркер конца строки (также известный как символ новой строки) является частью данных. Если вы не хотите этого в своей программе, вы должны удалить его. Толькоgets()
удалит для вас новую строку, но вы не должны никогда использовать ее в производственном коде. 06.08.2009