fscanf()
C stdio fscanf() funksiyasi
Misol
Fayldan string o‘qing:
FILE *fptr;
fptr = fopen("filename.txt", "r");
char output[50];
fscanf(fptr, "%49s", output);
printf("%s", output);
fclose(fptr);
Ta’rif va qo‘llanilishi
fscanf() funksiyasi fayldan formatlangan ma’lumotlarni o‘qiydi va ularni argumentlar ko‘rsatgan xotira joylariga yozadi, so‘ngra pozitsiya indikatorini o‘qish to‘xtagan fayl pozitsiyasiga o‘tkazadi.
fscanf() funksiyasi <stdio.h> sarlavha faylida aniqlangan.
format parametri fayldan kutilayotgan ma’lumotlar formatini tavsiflovchi stringdir. Agar fayl tarkibi formatga mos kelmasa, funksiya birinchi nomuvofiqlik yuz bergan joyda o‘qishni to‘xtatadi.
Format spetsifikatorlari
format stringi ma’lumotlarning 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. Fayl ma’lumotlari 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 yoki u |
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 |
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 | Fayldagi 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 | Fayldan hech narsa o‘qilmaydi. Shu paytgacha o‘qilgan belgilar soni argumentga yoziladi. Argument butun songa ko‘rsatkich bo‘lishi kerak. |
% |
Foiz belgisi | Fayldan "%" 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
fscanf(FILE * fptr, const char * format, arg1, arg2...);
Parametr qiymatlari
| Parametr | Tavsif |
|---|---|
| fptr | Majburiy. Odatda fopen() funksiyasi yordamida yaratiladigan fayl ko‘rsatkichi. |
| format | Majburiy. Fayldan 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
"1 + 2 = 3" ketma-ketligini o‘z ichiga olgan fayldan sonlarni ajratib oling:
FILE *fptr;
fptr = fopen("filename.txt", "r");
int a, b, c;
fscanf(fptr, "%i + %i = %i", &a, &b, &c);
printf("a = %d \n", a);
printf("b = %d \n", b);
printf("c = %d \n", c);
fclose(fptr);
Misol
Fayldan o‘n oltilik sonni o‘qing va uning qiymatini o‘nlik ko‘rinishda chiqaring:
FILE *fptr;
fptr = fopen("filename.txt", "r");
int num;
fscanf(fptr, "%x", &num);
printf("%d", num);
fclose(fptr);
Misol
Faylning keyingi belgisida "x", "y" yoki "z" belgisini qidiring:
FILE *fptr;
fptr = fopen("filename.txt", "r");
char c;
int found = fscanf(fptr, " %[xyz]", &c);
if (found > 0) {
printf("Found %c", c);
} else {
printf("Character not found");
}
fclose(fptr);
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
