Skip to content

9-dars: Input/Output — scanf, printf, va boshqalar

Dars haqida

Davomiyligi: 90 daqiqa Maqsad: Talaba foydalanuvchidan ma'lumot olishi (scanf, getchar), formatlangan chiqarish (printf) va interaktiv dasturlar yozishi kerak.

1. Interaktiv dastur

Foydalanuvchi bilan suhbatlashuvchi dastur:

c
#include <stdio.h>

int main(void) {
    int yosh;
    printf("Yoshingiz: ");
    scanf("%d", &yosh);
    printf("Sizning yoshingiz %d\n", yosh);
    return 0;
}

Ishga tushiring:

Yoshingiz: 25
Sizning yoshingiz 25

2. printf — chiqarish

Oldingi darslarda ko'rganmiz. Asosiy format specifiers:

c
printf("%d", x);     // int
printf("%f", x);     // float
printf("%lf", x);    // double
printf("%c", x);     // char
printf("%s", x);     // string

3. scanf — kirish

c
scanf("%d", &x);

Diqqat:

  • %d — int uchun
  • &xx ning manzili (& — address-of operator)

4. scanf format specifiers

FormatTur
%dint
%ffloat
%lfdouble
%cchar
%sstring (massiv)
%uunsigned int
%ldlong
%lldlong long
%xhex
%ooctal

5. Bir nechta o'zgaruvchi scanf

c
int a, b;
printf("Ikki raqam kiriting: ");
scanf("%d %d", &a, &b);
printf("Yig'indi: %d\n", a + b);

Foydalanuvchi:

Ikki raqam kiriting: 5 3
Yig'indi: 8

6. scanf cheklovlari

scanf — qiyin

scanf — boshlovchilar uchun qiyin. Sabablari:

  1. & ni unutish — keng tarqalgan xato
  2. Buffer muammolari — \n qoladi
  3. Xato input — dastur muzlab qoladi

CS50'da get_int, get_string kabi maxsus funksiyalar ishlatiladi. Lekin standart C'dascanf.

7. \n muammo — char bilan

c
int x;
char c;
scanf("%d", &x);
scanf("%c", &c);  // \n qoladi!

Yechim — bo'shliq qo'shish:

c
scanf("%d", &x);
scanf(" %c", &c);  // bo'sh joy bilan

8. To'liq misol: Yosh kalkulatori

c
#include <stdio.h>

int main(void) {
    int tugilgan_yil;
    int hozirgi_yil;
    
    printf("Hozirgi yil: ");
    scanf("%d", &hozirgi_yil);
    
    printf("Tug'ilgan yil: ");
    scanf("%d", &tugilgan_yil);
    
    int yosh = hozirgi_yil - tugilgan_yil;
    printf("Sizning yoshingiz: %d\n", yosh);
    
    return 0;
}

9. Misol: Kalkulyator

c
#include <stdio.h>

int main(void) {
    double a, b;
    char op;
    
    printf("Birinchi raqam: ");
    scanf("%lf", &a);
    
    printf("Operator (+, -, *, /): ");
    scanf(" %c", &op);
    
    printf("Ikkinchi raqam: ");
    scanf("%lf", &b);
    
    double result;
    switch (op) {
        case '+': result = a + b; break;
        case '-': result = a - b; break;
        case '*': result = a * b; break;
        case '/':
            if (b == 0) {
                printf("Xato: nolga bo'lib bo'lmaydi\n");
                return 1;
            }
            result = a / b;
            break;
        default:
            printf("Noma'lum operator\n");
            return 1;
    }
    
    printf("%.2f %c %.2f = %.2f\n", a, op, b, result);
    return 0;
}

10. printf formatlash — batafsil

Maydon kengligi

c
printf("|%5d|", 42);       // |   42|
printf("|%-5d|", 42);      // |42   |
printf("|%05d|", 42);      // |00042|

Float formatlar

c
printf("|%10.2f|", 3.14);  // |      3.14|
printf("|%-10.2f|", 3.14); // |3.14      |
printf("|%.0f|", 3.7);     // |4| (yaxlitlanadi)

Asosiy

c
printf("%d\n", 100);           // 100
printf("%5d\n", 100);          // "  100"
printf("%-5d\n", 100);         // "100  "
printf("%05d\n", 100);         // "00100"

printf("%f\n", 3.14159);       // 3.141590
printf("%.2f\n", 3.14159);     // 3.14
printf("%.5f\n", 3.14159);     // 3.14159
printf("%10.2f\n", 3.14);      // "      3.14"

printf("%s\n", "Akmal");       // Akmal
printf("%10s\n", "Akmal");     // "     Akmal"
printf("%-10s|\n", "Akmal");   // "Akmal     |"

printf("%c\n", 'A');           // A
printf("%x\n", 255);           // ff
printf("%X\n", 255);           // FF
printf("%o\n", 8);             // 10

11. Special characters in printf

c
printf("Tab:\tafter\n");        // Tab:    after
printf("Newline:\nafter\n");    // Newline:\nafter
printf("Quote: \"text\"\n");    // Quote: "text"
printf("Backslash: \\\n");      // Backslash: \
printf("Percent: %%\n");         // Percent: %

12. getchar va putchar

getchar() — bitta belgi olish. putchar(c) — bitta belgi chiqarish.

c
#include <stdio.h>

int main(void) {
    printf("Bitta harf kiriting: ");
    char c = getchar();
    printf("Siz kiritdingiz: ");
    putchar(c);
    putchar('\n');
    return 0;
}

13. EOF — End Of File

getchar() fayl/input tugagan bo'lsa EOF qaytaradi.

c
int c;  // diqqat: char emas, int — EOF qiymati uchun
while ((c = getchar()) != EOF) {
    putchar(c);
}

Terminal'da EOF:

  • Mac/Linux: Ctrl + D
  • Windows: Ctrl + Z

14. gets va fgets

gets() — XAVFLI

gets() — eski funksiya, buffer overflow muammo. HECH QACHON ISHLATMANG.

Buning o'rniga — fgets() ishlatish.

c
#include <stdio.h>

int main(void) {
    char name[100];
    printf("Ismingiz: ");
    fgets(name, sizeof(name), stdin);
    printf("Salom, %s", name);
    return 0;
}

15. scanf %s ham xavfli

c
char name[10];
scanf("%s", name);  // foydalanuvchi 100 belgi yozsa — buffer overflow

To'g'ri:

c
scanf("%9s", name);  // maksimum 9 belgi

Yoki fgets:

c
fgets(name, sizeof(name), stdin);

16. printf return value

printf — necha belgi chiqarganini qaytaradi:

c
int n = printf("Salom\n");  // n = 6 (5 harf + \n)

scanf — qancha o'zgaruvchi muvaffaqiyatli o'qildi:

c
int x;
int result = scanf("%d", &x);
if (result != 1) {
    printf("Xato input!\n");
}

17. Input validation — tekshirish

c
#include <stdio.h>

int main(void) {
    int yosh;
    
    printf("Yoshingiz (0-120): ");
    if (scanf("%d", &yosh) != 1) {
        printf("Xato: raqam emas\n");
        return 1;
    }
    
    if (yosh < 0 || yosh > 120) {
        printf("Xato: yosh 0-120 oralig'ida bo'lishi kerak\n");
        return 1;
    }
    
    printf("Yoshingiz: %d\n", yosh);
    return 0;
}

18. Loop bilan input

c
#include <stdio.h>

int main(void) {
    int total = 0;
    int n;
    
    printf("Raqamlar kiriting (0 — tugatish):\n");
    
    while (1) {
        printf("Raqam: ");
        scanf("%d", &n);
        
        if (n == 0) break;
        total += n;
    }
    
    printf("Yig'indi: %d\n", total);
    return 0;
}

19. Number Guessing Game

c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
    srand(time(NULL));
    int secret = rand() % 100 + 1;
    int guess;
    int attempts = 0;
    
    printf("=== Raqam topish o'yini ===\n");
    printf("1-100 oralig'idagi raqamni toping!\n\n");
    
    do {
        printf("Sizning taxminingiz: ");
        scanf("%d", &guess);
        attempts++;
        
        if (guess > secret) {
            printf("Pastroq!\n");
        } else if (guess < secret) {
            printf("Balandroq!\n");
        } else {
            printf("\n🎉 TOPDINGIZ!\n");
            printf("Urinishlar: %d\n", attempts);
        }
    } while (guess != secret);
    
    return 0;
}

20. Misol: Talabalar reytingi

c
#include <stdio.h>

int main(void) {
    int n;
    printf("Talabalar soni: ");
    scanf("%d", &n);
    
    if (n <= 0 || n > 100) {
        printf("Xato: 1-100 oralig'ida\n");
        return 1;
    }
    
    int sum = 0;
    int max = 0;
    int min = 100;
    int passed = 0;
    
    for (int i = 1; i <= n; i++) {
        int ball;
        printf("Talaba %d bali: ", i);
        scanf("%d", &ball);
        
        sum += ball;
        if (ball > max) max = ball;
        if (ball < min) min = ball;
        if (ball >= 60) passed++;
    }
    
    double avg = (double)sum / n;
    double pass_rate = (double)passed / n * 100;
    
    printf("\n=== Statistika ===\n");
    printf("Talabalar: %d\n", n);
    printf("Jami: %d\n", sum);
    printf("O'rtacha: %.2f\n", avg);
    printf("Eng yuqori: %d\n", max);
    printf("Eng past: %d\n", min);
    printf("O'tganlar: %d (%.1f%%)\n", passed, pass_rate);
    
    return 0;
}

Darsdagi topshiriqlar

Topshiriq 1 — Tanishuv

tanishuv.c:

c
#include <stdio.h>

int main(void) {
    char ism[100];
    int yosh;
    char shahar[100];
    
    printf("Ismingiz: ");
    scanf("%s", ism);
    
    printf("Yoshingiz: ");
    scanf("%d", &yosh);
    
    printf("Shahringiz: ");
    scanf("%s", shahar);
    
    printf("\nSalom, %s!\n", ism);
    printf("Sen %d yoshda ekansan va %s'da yashaysan.\n", yosh, shahar);
    
    return 0;
}

Topshiriq 2 — Kalkulyator

Dars matni'da berilgan to'liq kalkulyatorni yozing.

Bonus: % operatori (qoldiq) ham qo'shing (faqat int uchun).

Saqlang: 2-calc.c

Topshiriq 3 — Yosh va kun

yosh.c:

c
#include <stdio.h>

int main(void) {
    int hozirgi_yil, tugilgan_yil;
    
    printf("Hozirgi yil: ");
    scanf("%d", &hozirgi_yil);
    
    printf("Tug'ilgan yil: ");
    scanf("%d", &tugilgan_yil);
    
    int yosh = hozirgi_yil - tugilgan_yil;
    int kun = yosh * 365;
    int soat = kun * 24;
    long daqiqa = (long)soat * 60;
    long sekund = daqiqa * 60;
    
    printf("\nSiz haqida:\n");
    printf("Yoshingiz: %d yil\n", yosh);
    printf("Kunlar: %d\n", kun);
    printf("Soatlar: %d\n", soat);
    printf("Daqiqalar: %ld\n", daqiqa);
    printf("Sekundlar: %ld\n", sekund);
    
    return 0;
}

Topshiriq 4 — Mahsulot narxi

narx.c — chegirma bilan:

c
#include <stdio.h>

int main(void) {
    double narx;
    int chegirma;
    
    printf("Mahsulot narxi: ");
    scanf("%lf", &narx);
    
    printf("Chegirma foizi (0-100): ");
    scanf("%d", &chegirma);
    
    if (chegirma < 0 || chegirma > 100) {
        printf("Noto'g'ri chegirma\n");
        return 1;
    }
    
    double chegirma_summa = narx * chegirma / 100.0;
    double yangi_narx = narx - chegirma_summa;
    
    printf("\nAsl narx:     %.2f\n", narx);
    printf("Chegirma:     %.2f (%d%%)\n", chegirma_summa, chegirma);
    printf("Yangi narx:   %.2f\n", yangi_narx);
    
    return 0;
}

Topshiriq 5 — Number guessing

Dars matnidagi raqam topish o'yinini yarating va sinab ko'ring.

Yaxshilang:

  • Difficulty (oson — 1-50, qiyin — 1-1000)
  • Maksimum urinish soni
  • High score saqlash (oxirgi raund)

Saqlang: 5-game.c

Topshiriq 6 — Talabalar reytingi

Dars matnidagi to'liq reyting dasturini yarating.

Bonus:

  • Foydalanuvchi har talaba ismini ham bersin
  • Eng yuqori va eng past balli talabalar ismini ko'rsating
  • Qaytadan ishga tushirsa bo'lsin (loop bilan)

Topshiriq 7 — Menyu interfeysi

menu.c:

c
#include <stdio.h>

int main(void) {
    int tanlov;
    
    do {
        printf("\n=== MENU ===\n");
        printf("1. Kalkulyator\n");
        printf("2. Yoshini hisoblash\n");
        printf("3. Raqam topish o'yini\n");
        printf("4. Chegirma hisobi\n");
        printf("5. Chiqish\n");
        printf("Tanlov: ");
        scanf("%d", &tanlov);
        
        switch (tanlov) {
            case 1:
                printf("Kalkulyator ishlamoqda...\n");
                // shu yerga kalkulyator kodi
                break;
            case 2:
                printf("Yoshini hisoblash...\n");
                break;
            case 3:
                printf("O'yin boshlanmoqda...\n");
                break;
            case 4:
                printf("Chegirma hisobi...\n");
                break;
            case 5:
                printf("Xayr!\n");
                break;
            default:
                printf("Noma'lum tanlov\n");
        }
    } while (tanlov != 5);
    
    return 0;
}

Har case ichida real funksionallikni qo'shing.

Topshiriq 8 — printf formatlash

format-mashq.c:

c
#include <stdio.h>

int main(void) {
    printf("|%10s|%10s|%10s|\n", "Mahsulot", "Soni", "Narx");
    printf("|%10s|%10s|%10s|\n", "----------", "----------", "----------");
    printf("|%10s|%10d|%10.2f|\n", "Non", 5, 25000.0);
    printf("|%10s|%10d|%10.2f|\n", "Sut", 2, 24000.5);
    printf("|%10s|%10d|%10.2f|\n", "Yog'", 1, 45000.0);
    printf("|%10s|%10s|%10.2f|\n", "JAMI:", "", 94000.5);
    
    return 0;
}

Natija:

|  Mahsulot|      Soni|      Narx|
|----------|----------|----------|
|       Non|         5|  25000.00|
|       Sut|         2|  24000.50|
|      Yog'|         1|  45000.00|
|     JAMI:|          |  94000.50|

Topshiriq 9 — getchar va putchar

echo.c — foydalanuvchi yozgan har belgini takrorlash:

c
#include <stdio.h>

int main(void) {
    int c;
    
    printf("Matn yozing (Ctrl+D yoki Ctrl+Z bilan tugating):\n");
    
    while ((c = getchar()) != EOF) {
        putchar(c);
    }
    
    return 0;
}

Bonus — har harfni katta qiling:

c
if (c >= 'a' && c <= 'z') {
    c = c - 'a' + 'A';
}
putchar(c);

Topshiriq 10 — GitHub'ga

bash
$ cd ~/c-darslari
$ mkdir 4-oy-dars-9
$ # fayllarni shu joyga
$ git add .
$ git commit -m "feat: dars 9 - input/output"
$ git push

Asosiy tushunchalar (lug'at)

TerminQisqacha izoh
printfFormatlangan chiqarish
scanfFormatlangan kirish
&xx ning manzili
getchar()Bitta belgi olish
putchar()Bitta belgi chiqarish
fgets()Qator olish (xavfsiz)
gets()Eski va xavfli — ishlatmang
EOFEnd Of File
%d, %f, %c, %sFormat specifiers
%5d, %.2fWidth va precision
Input validationKirish tekshiruvi
Buffer overflowXotira oshib ketishi

Keyingi dars

10-dars: Character va string asoslari →

Master IT o'quv markazi — o'qitish rejasi