Функция scanf непонятно себя ведёт
Всем привет подскажите пожалуйста что не так с этим кодом:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("1 "); // 1
char t[100];
scanf("%s", t);
printf("2 "); // 2
char c;
scanf("%c", &c);
printf("%s and %c", t, c); // 3
system("pause>nul");
return 0;
}
При консольном запуске программы, срабатывает только первая функция scanf. После ввода нескольких символов в t, и нажатии enter, программа запускает 2ую printf, затем будто пропускает инструкцию scanf("%c", &c); и выписывает 3 printf. Не понимаю в чём проблемма. Поясните пожалуйста
Ответы (1 шт):
Не понимаю в чём проблемма.
Проблема в том, что функция scanf() осоуществляет ввод до символа перевода строки. Т.е., когда Вы вводите первую строку и нажимаете Enter, сама строка уходит в массив t, но в буфере ввода остаётся символ перевода строки '\n'. Когда выполняется второй оператор ввода, именно этот символ и ложится в переменную c. Сразу же.
Переделайте программу так:
#include <stdlib.h>
int main(void) {
printf("1 "); // 1
char t[100];
gets(t);
printf("2 "); // 2
char c;
scanf("%c", &c);
printf("'%s' and '%c'\n", t, c); // 3
return 0;
}
тогда результат её выполнения будет таким:
$ ./a.out
1 qqqq
2 w
'qqqq' and 'w'
Сегодня использовать функцию gets() считается плохим тоном. Вместо неё надо использовать fgets(). Но разница между ними (в частности) в том, что gets() не береёт симовл переода строки из потока ввода, в fgets() - берёт.