TI-S2

Inlezen van gegevens in C++

TI-S2 • Software (C++)
Gera Pronk

Waarom input?

Programma’s worden nuttig zodra ze gebruikersinvoer verwerken: toetsenbord → variabelen → berekening/actie.
We focussen op console-invoer in C++.


cin in één slide

Voorbeeld:

#include <iostream>
using namespace std;

int main() {
    int n_tables;
    cout << "Enter number of tables in the room: ";
    cin >> n_tables;
    int total_legs = n_tables * 4;
    cout << "There are " << total_legs << " table legs.";
}

Vereiste header

Gebruik #include <iostream> voor zowel cout als cin.
Soms zie je ook #include <string> wanneer je met strings werkt.


Spaties scheiden invoer

cin splitst automatisch op spaties en enters. Handig om meerdere waarden achter elkaar te lezen.

Voorbeeld:

#include <iostream>
using namespace std;

int main() {
    float price;
    int quantity;
    cout << "Enter price and quantity: ";
    cin >> price >> quantity;
    float total_price = price * quantity;
    cout << "Total price: " << total_price << "";
}

Oefening


Wanneer cin onhandig wordt

Oplossing: getline voor volledige regels.


getline(cin, stringVar)

Voorbeeld:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string sentence;
    cout << "Enter a sentence:";
    getline(cin, sentence);

    int count = 0;
    for (unsigned int i = 0; i < sentence.size(); i++) {
        if (sentence[i] == ' ') { count++; }
    }
    cout << "The sentence contains " << count << " spaces";
}

Belangrijke valkuil: cin + getline

Oplossing: Negeer alle karakters tot de volgende newline. Specifieker: negeer het maximum aantal mogelijke karakters tot de newline. (We gaan nu niet dieper in op numeric_limits.)

cin.ignore(numeric_limits<streamsize>::max(), '\n');

Of: Negeer álle karakters in de stream.

cin.ignore(numeric_limits<std::streamsize>::max());

cin.fail() en cin.clear()


Robuust inlezen: validatie

#include <iostream>
#include <limits>
using namespace std;

int main() {
    int n;
    cout << "Enter an integer: ";
    while (!(cin >> n)) { 
        cout << "Not an integer. Try again: ";
        cin.clear();

        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
    cout << "You entered: " << n << "";
}

Snelle checklist