89 / 90

C++ Input Stream (std::istream)

C++ Kirish oqimi (std::istream)

C++ istream klassi turli xil kirish manbalaridan ma'lumotlarni o'qish uchun funksiyalar va operatorlar to'plamini taqdim etadi.

istream sinfini ishlatishdan oldin dasturimizga <iostream> sarlavhasini kiritishimiz kerak.

example.cpp
#include <iostream>

1-misol: Konsoldan ma'lumotlarni o'qish

istream yordamida konsoldan ma'lumotlarni o'qish uchun cin ob'ektini >> chiqarish operatori bilan ishlatishingiz mumkin. Mana bir misol:

example.cpp
#include <iostream>
using namespace std;

int main() {

    int entered_number;

    cout << "Enter an integer: ";

    // konsoldan ma'lumotlarni o'qish
    cin >> entered_number;
    
    cout << "You entered: " << entered_number << endl;
    
    return 0;
}

Chiqish

kod
Enter an integer: 3
You entered: 3

Ushbu misolda cin klaviaturadan ma'lumotlarni o'qiydigan standart kirish oqimini ifodalaydi. Biz >> operatoridan foydalanuvchi ma'lumotlarini ajratib olish va uni raqam o'zgaruvchisida saqlash uchun foydalanamiz.

get() funksiyasi

istream sinfining get() funksiyasi birinchi navbatda kirish oqimidan individual belgilarni o'qish uchun ishlatiladi.

Asosiy xususiyatlar

  • Belgilarni o'qish: u kirish oqimidan keyingi belgini o'qiydi va oqimning ichki joylashuvi ko'rsatkichini oldinga siljitadi.

  • Bitta belgi: >> operatoridan farqli o'laroq, get() belgilarni bo'shliqlar, yorliqlar va yangi qator belgilarini o'z ichiga olgan holda o'qiydi.

  • Belgilarni chiqarish: Siz undan char tipidagi oʻzgaruvchilarga belgilarni chiqarish yoki ularni belgilar massivlarida (C-satrlari) saqlash uchun foydalanishingiz mumkin.

  • Delimiter Control: Bu cheklovchi belgini ixtiyoriy parametr sifatida belgilash imkonini beradi. Ajratuvchini ko'rsatganingizda, get() bu ajratuvchiga duch kelganida belgilarni o'qishni to'xtatadi. Bu so'zlarni yoki satrlarni o'qish uchun foydalidir.

2-misol: C++ get() funksiyasi

example.cpp
#include <iostream>
using namespace std; 

int main() {

    char ch;
    
    cout << "Enter a sentence: ";

    // qahramonni birma-bir o'qing
    // yangi qator paydo bo'lguncha
    while (cin.get(ch) && ch != '\n') {
        cout << ch;
    }

    return 0;
}

Chiqish

kod
Enter a sentence: Hello World
Hello World

Bu erda biz foydalanuvchidan bitta belgini o'qish uchun cin.get() dan foydalandik.

Kodning ushbu qismiga e'tibor bering:

example.cpp
while (cin.get(ch) && ch != '\n') {
    cout << ch;
}

Loop standart kiritishdan yangi satr belgisi paydo bo'lgunga qadar belgilarni birma-bir o'qiydi. Har bir iteratsiyada u o'qilgan belgini darhol chop etadi.

C++ getline() funksiyasi

istream da getline() funksiyasi ko‘rsatilgan kirish oqimidan matn qatorini o‘qish uchun ishlatiladi (masalan, standart kiritish uchun cin ).

Asosiy xususiyatlar

  • O'qish qatorlari: get() funksiyasidan farqli o'laroq, getline() matnning butun satrlarini belgilangan chegara yoki satr oxirigacha o'qiydi.

  • Ajratuvchini boshqarish: Siz chiziq oxirini ko'rsatadigan chegara belgisini belgilashingiz mumkin. Bu sizga bir necha qator matnlarni ketma-ket o'qish imkonini beradi.

  • Bufer hajmi: Bufer to'lib ketishining oldini olish va uzun satrlarni chiroyli tarzda o'qish uchun maksimal belgilar sonini belgilash uchun ixtiyoriy parametrni qabul qiladi.

3-misol: C++ getline() funksiyasi

example.cpp
#include <iostream>
using namespace std; 

int main() {

    string line;
    
    cout << "Enter a line of text: ";

    // foydalanuvchi kiritgan qatorni o'qish
    getline(cin, line);
    
    cout << "You entered: " << line << endl;

    return 0;
}

Chiqish

kod
Enter a line of text: Hello
You entered: Hello

C++ ignore() funksiyasi

ignore() funksiyasi kirish oqimidagi belgilarning berilgan uzunligini o‘tkazib yuborish uchun ishlatiladi.

example.cpp
#include <iostream>
using namespace std;

int main() {

    cout << "Enter a line of text: ";

    char ch;

    // standart kiritishdan keyingi 5 ta belgiga e'tibor bermang
    cin.ignore(5);

    // oltinchi belgini o'qing va qiymatni chop eting
    if (cin.get(ch)) {
        cout << "Next character after ignoring 5 characters: " << ch << endl;
    }

    return 0;
}

Chiqish

kod
Enter a line of text: 12345678
Next character after ignoring 5 characters: 6

Bu erda cin.ignore(5); kirish oqimiga foydalanuvchi kiritgan keyingi beshta belgini e'tiborsiz qoldirishni buyuradi.

Shundan so'ng, if holati cin.get(ch) oldingi beshtasi e'tiborga olinmaganidan keyin kirish oqimidan keyingi belgini o'qishga harakat qiladi. Agar muvaffaqiyatli bo'lsa, u ularni ch o'zgaruvchisida saqlaydi.