Использование fgets
довольно просто. В качестве функции вы можете проверить, чтобы увидеть, что вход содержит новую строку. Если нет, есть ожидающие символы.
scanf
возможно с использованием набора сканирования. %99[^\n]
будет сканировать до 99 символов, которые не являются новой строкой. %*c
будет использовать новую строку. Если единственным символом является символ новой строки, тогда scanset завершится неудачно, и scanf вернет 0. Если введено более 99 символов, %*c
будет использовать символ, который не является новой строкой. fgets
не имеет этой проблемы.
#include <stdio.h>
int main ( void) {
char string[100] = "";
int result = 0;
printf ( "using fgets\nenter a blank line to stop\n");
do {
fgets ( string, sizeof string, stdin);
} while ( string[0] != '\n');
printf ( "using scanf\nenter a blank line to stop\n");
do {
result = scanf ( "%99[^\n]%*c", string);
} while ( result == 1);
return 0;
}
Если ungetc
, если scanf читает слишком много символов, последний символ может быть возвращен в поток, если он не является новой строкой.
char last = 0;
do {
result = scanf ( "%99[^\n]%c", string, &last);
if ( EOF == result) {
fprintf ( stderr, "scanf EOF\n");
return 0;
}
if ( '\n' != last) {
ungetc ( last, stdin);
}
} while ( result == 2);