Тема: Сила scanf()
1) Припустимо, що у нас є:
char a[100]; /*Масив розміром 100 елементів символьного типу*/
2) Так можна прочитати рядок:
scanf("%[^\n]\n", a); /*Ця функція буде прочитувати, доки не зустріне символ нового рядка '\n', цей символ вона просто проігнорує і при виводі ви отримуєте цілий рядок без '\n'*/
3) Прочитувати до знаку коми:
scanf("%[^,]", a); /*Тут кома усунута не буде*/
scanf("%[^,],",a); /*А тут навпаки*/
4) Якщо ви хочете пропустити певний ввід, то вам потрібно надрукувати символ * після символу %.
Наприклад, ви хочете прочитати лише прізвище із рядку "John Smith":
scanf("%s %s", temp, last_name); /* Типовий метод, який вимагає використання додаткової тимчасової змінної */
scanf("%s", last_name);
scanf("%s", last_name); /*Іще один варіант, використовує лише одну змінну, але викликається двічі*/
scanf("%*s %s", last); /*Найкращий варіант, тому що не потрібно додаткової змінної або викликати функцію два рази*/
До речі, будьте обережні з використанням scanf бо ви можете переповнити буфер введення! Ви маєте використовувати fgets і sscanf частіше ніж scanf. Скористайтесь fgets, щоб зчитати ряд, а потім sscanf, щоб розібрати його.
Перекладено з англійської: keithfay Оригінальний пост: тут Автор: Joanna