1 Востаннє редагувалося Ярослав (20.10.2012 15:42:50)

Тема: Сила 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