scanf()
C stdio scanf() funksiyasi
Misol
Foydalanuvchi kiritgan sonni chiqaring:
// Create an integer variable that will store the number we get from the user
int myNum;
// Ask the user to type a number
printf("Type a number: \n");
// Get and save the number the user types
scanf("%d", &myNum);
// Output the number the user typed
printf("Your number is: %d", myNum);
O‘zingiz sinab ko‘ring »
Ta’rif va qo‘llanilishi
scanf() funksiyasi foydalanuvchi kiritgan ma’lumotni o‘qiydi va uni argumentlar ko‘rsatgan xotira joylariga yozadi.
scanf() funksiyasi <stdio.h> sarlavha faylida aniqlangan.
format parametri kutilayotgan ma’lumotlar formatini tavsiflovchi stringdir. Agar foydalanuvchi kiritgan ma’lumot formatga mos kelmasa, funksiya birinchi nomuvofiqlik yuz bergan joyda o‘qishni to‘xtatadi.
Eslatma: Aniqrog‘i, u stdin ko‘rsatgan manbadan o‘qiydi. Bu odatda klaviatura orqali kiritilgan ma’lumot bo‘ladi, lekin uni fayl yoki boshqa manbaga yo‘naltirib sozlash mumkin.
Format spetsifikatorlari
format stringi foydalanuvchi kiritgan ma’lumotning qaysi qismlari argumentlarga yozilishi kerakligini belgilovchi format spetsifikatorlarini o‘z ichiga olishi mumkin. Har bir format spetsifikatori funksiyaning qo‘shimcha argumentlaridan biriga mos keladi.
Format spetsifikatorlari %[*][width][length]specifier ko‘rinishiga ega. [Kvadrat qavslar] ichidagi komponentlar ixtiyoriy.
Har bir komponentning izohi:
*- Ixtiyoriy. Mavjud bo‘lsa, format spetsifikatori hech qaysi argumentga mos kelmaydi.width- Ixtiyoriy. Shu spetsifikator uchun o‘qiladigan belgilarning eng ko‘p sonini belgilaydi.length- Ixtiyoriy. Argumentning ma’lumot tipini o‘zgartiruvchi belgilar ketma-ketligi. U quyidagilardan biri bo‘lishi mumkin:hh- Butun sonlar uchunchar*tipi kutiladi.h- Butun sonlar uchunshort*tipi kutiladi.l- Butun sonlar uchunlong int*tipi kutiladi.
Belgilar va stringlar uchunwchar_t*tipi kutiladi.
Suzuvchi nuqtali sonlar uchundouble*tipi kutiladi.ll- Butun sonlar uchunlong long int*tipi kutiladi.j- Butun sonlar uchunintmax_t*yokiuintmax_t*tipi kutiladi.z- Butun sonlar uchunsize_t*tipi kutiladi.t- Butun sonlar uchunptrdiff_t*tipi kutiladi.L- Butun sonlar uchunlong double*tipi kutiladi.
specifier- Majburiy. Foydalanuvchi kiritgan ma’lumot qanday talqin qilinishi kerakligini bildiruvchi belgi yoki ketma-ketlik. Mumkin bo‘lgan spetsifikatorlar ro‘yxati quyidagi jadvalda keltirilgan.
Spetsifikatorlar ro‘yxati
| Belgi | Spetsifikator | Tavsif |
|---|---|---|
i |
Butun son | Raqamlar ketma-ketligini o‘qiydi va uni butun son sifatida talqin qiladi. Agar ketma-ketlik "0x" bilan boshlansa, o‘n oltilik raqamlar (0-9 va A-F) kutiladi. Agar ketma-ketlik "0" bilan boshlansa, sakkizlik raqamlar (0-7) kutiladi. Ketma-ketlik oldidan ishora ("+" yoki "-") kelishi mumkin. |
d yoki u |
O‘nlik butun son | Raqamlar (0-9) ketma-ketligini o‘qiydi va uni butun son sifatida talqin qiladi. Ketma-ketlik oldidan ishora ("+" yoki "-") kelishi mumkin. |
o |
Sakkizlik butun son | Raqamlar (0-7) ketma-ketligini o‘qiydi va uni sakkizlik butun son sifatida talqin qiladi. Ketma-ketlik oldidan ishora ("+" yoki "-") kelishi mumkin. |
x |
O‘n oltilik butun son | Raqamlar (0-9 va A-F) ketma-ketligini o‘qiydi va uni o‘n oltilik butun son sifatida talqin qiladi. U "0x" bilan boshlanishi mumkin. Ketma-ketlik oldidan ishora ("+" yoki "-") kelishi mumkin. |
f, e, g yoki a |
Suzuvchi nuqtali son | To‘g‘ri belgilar ketma-ketligini o‘qiydi va uni suzuvchi nuqtali son sifatida talqin qiladi. To‘g‘ri ketma-ketlikda kamida bitta raqam bo‘ladi, uning oldidan ishora ("+" yoki "-"), ortidan esa o‘nlik nuqta va kasr raqamlari kelishi mumkin. Ilmiy yozuvdan (son, undan keyin "e" yoki "E" va bir nechta raqam) ham foydalanish mumkin. |
c |
Belgi | Fayldan belgi o‘qiydi. Agar kenglik ko‘rsatilgan bo‘lsa, shuncha belgi o‘qiydi. |
s |
String | Foydalanuvchi kiritgan ma’lumotdan keyingi bo‘shliq belgisigacha (bo‘sh joy, tabulyatsiya, qator ko‘chishi) bo‘lgan barcha belgilarni o‘qiydi. Argumentga yozilgan qiymat oxiriga qo‘shimcha \0 null belgisi qo‘shiladi. |
p |
Ko‘rsatkich | Ko‘rsatkich manzilini ifodalovchi belgilar ketma-ketligini o‘qiydi. |
n |
Hech narsa o‘qilmaydi | Hech narsa o‘qilmaydi, buning o‘rniga shu paytgacha o‘qilgan belgilar soni argumentga yoziladi. Argument butun songa ko‘rsatkich bo‘lishi kerak. |
% |
Foiz belgisi | Foydalanuvchi kiritgan ma’lumotdan "%" belgisini kutgan holda bitta belgi o‘qiydi. Bu spetsifikator hech qaysi argument bilan bog‘lanmagan. |
[characters] |
Belgilar to‘plami | characters ichida ko‘rsatilgan belgilardan biriga mos keladigan bitta belgini o‘qiydi. |
[^characters] |
Istisno qilingan belgilar to‘plami | characters ichida ko‘rsatilgan belgilar to‘plamiga kirmaydigan bitta belgini o‘qiydi. |
Format spetsifikatorlaridan foydalanish misollari uchun quyidagi Ko‘proq misollar bo‘limiga qarang.
Sintaksis
scanf(const char * format, arg1, arg2...);
Parametr qiymatlari
| Parametr | Tavsif |
|---|---|
| format | Majburiy. Foydalanuvchi kiritishidan kutilayotgan ma’lumotlar formatini ifodalovchi string. |
| arg1, arg2... | Ixtiyoriy. Qiymatlar yozilishi mumkin bo‘lgan xotiraga ko‘rsatkich bo‘lgan istalgan miqdordagi qo‘shimcha argumentlar. |
Texnik tafsilotlar
| Qaytaradi: | Qiymat yozilgan argumentlar sonini ifodalovchi int qiymat. Xato yuz bergan bo‘lsa, EOF konstantasini qaytaradi. |
|---|
Ko‘proq misollar
Misol
Foydalanuvchi kiritgan istalgan "a + b = c" ketma-ketligidan sonlarni ajratib oling:
int a, b, c;
scanf("%i + %i = %i", &a, &b, &c);
printf("a = %d \n", a);
printf("b = %d \n", b);
printf("c = %d \n", c);
Misol
O‘n oltilik sonni o‘qing va uning qiymatini o‘nlik ko‘rinishda chiqaring:
int num;
scanf("%x", &num);
printf("%d", num);
Misol
Foydalanuvchi kiritgan ma’lumotda "x", "y" yoki "z" belgisini qidiring:
char c;
int found = scanf("%[xyz]", &c);
if(found > 0) {
printf("Found %c", c);
} else {
printf("Character not found");
}
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
