fscanf()

C stdio fscanf() funksiyasi

❮ C stdio kutubxonasi


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 uchun char* tipi kutiladi.
    • h - Butun sonlar uchun short* tipi kutiladi.
    • l - Butun sonlar uchun long int* tipi kutiladi.
      Belgilar va stringlar uchun wchar_t* tipi kutiladi.
      Suzuvchi nuqtali sonlar uchun double* tipi kutiladi.
    • ll - Butun sonlar uchun long long int* tipi kutiladi.
    • j - Butun sonlar uchun intmax_t* yoki uintmax_t* tipi kutiladi.
    • z - Butun sonlar uchun size_t* tipi kutiladi.
    • t - Butun sonlar uchun ptrdiff_t* tipi kutiladi.
    • L - Butun sonlar uchun long 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);

❮ C stdio kutubxonasi

W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!