Аналог cin.getline() на Си - C (СИ)
Формулировка задачи:
Нужен аналог функции cin.getline( ).
Если существует, то поведайте мне о нём, если нет, то подскажите как написать.
Никакого С++, только чистый С. Нельзя использовать ООП и потоки.
Я пытался что-то написать, но в итоге, если пользователь ввеёдт неправильный символ и захочет его удалить, то не сможет. getch( ) обрабатывает Backspace как сигнал, а не как кнопку удаления символа. Вот ко:void input_login_or_password( char **array_symbols, int max_symbol )
{
char help_element;
int i;
for( i = 0; i < max_symbol; i++ ) // 13 - Enter, 32 - Space, 8 - Backspace;
{
help_element = getch( );
if( help_element == 13 )
break;
( *array_symbols )[ i ] = help_element;
printf( "%c", help_element );
}
( *array_symbols )[ i ] = '\0';
}Решение задачи: «Аналог cin.getline() на Си»
textual
Листинг программы
char login[ 5 ]; char password[ 5 ]; scanf( "%4s", login ); fflush(stdin); scanf( "%4s", password ); fflush(stdin);
Объяснение кода листинга программы
- Объявлены две переменные типа char: login и password. Каждая из них может хранить строку длиной не более 5 символов.
- В первую переменную, login, считывается строка, состоящая не более чем из 4 символов. Для этого используется функция scanf с форматирующим спецификатором
%4s, который указывает на считывание строки, состоящей из 4 символов. - С помощью функции fflush(stdin) происходит очистка буфера ввода, что позволяет удалить из него остатки предыдущей строки.
- Во вторую переменную, password, также считывается строка, состоящая не более чем из 4 символов.
- Снова происходит очистка буфера ввода.