• De afgelopen dagen zijn er meerdere fora waarop bestaande accounts worden overgenomen door spammers. De gebruikersnamen en wachtwoorden zijn via een hack of een lek via andere sites buitgemaakt. Via have i been pwned? kan je controleren of jouw gegeven ook zijn buitgemaakt. Wijzig bij twijfel jouw wachtwoord of schakel de twee-staps-verificatie in.

Simpel C++ vraagje

Status
Niet open voor verdere reacties.

nlreiniernl

Gewaardeerd
Lid geworden
10 jun 2007
Berichten
1.125
Waarderingsscore
139
Hoi beste mensen,

Ik ben bezig om na Python mijzelf C++ aan te leren. Er is dus al wel een soort van basis kennis aanwezig.
Nu stuit ik op het volgende.

Mijn boek gebruikt cin en cin.get() een beetje door elkaar zonder echt uitleg te geven.
In een opdracht waar de gebruiker invoer moet geven kreeg ik een vreemde uitvoer.

Na een uurtje klooien concludeer ik het volgende:

cin.get() zet de invoer om naar ASCII code.
cin pakt gewoon het ingevoerde karakter.

Klopt dit? Zo ja, waarom is dit zo moeilijk te vinden op internet?
 
Hoewel ik niet zoveel ervaring heb met cin en cin.get() (ik gebruik altijd C en niet C++), heb ik dit gevonden:

cin.get() is used for accessing character array. It includes white space characters. Generally, cin with an extraction operator (>>) terminates when whitespace is found. However, cin.get() reads a string with the whitespace.

Bron: cin get() in C++ with Examples - GeeksforGeeks

Een andere bron die misschien nog duidelijker is: Difference between cin and cin.get() for char array

Vertaling: cin stopt met lezen bij een whitespace (spatie) en cin.get() gaat door met een whitespace (stopt na een specifiek aantal gelezen bytes aka karakters/ASCII waardes). Verder doet cin.get() niks extra's.

Daarnaast heeft elk karakter een ASCII code ('A' == 65). Als je als output rare tekens krijgt betekent dat, dat je garbage data binnen krijgt en niet de karakters die je zou moeten krijgen. Als je letterlijk nummers krijgt zoals "65" voor een 'A' dan ben je per ongeluk de waardes van de karakters aan het uitprinten. De oplossingen hiervoor hangen af van jouw code.

Anyway, met betrekking tot cin en cin.get(): hier een screenshot als bewijs:

1115f082693f335f0c9d286042972e28.png


Mocht je andere resultaten krijgen, ligt het waarschijnlijk aan de code.
Hier mijn code:

C:
#include <iostream>

// sue me
using namespace std;

int main(void)
{
    
    // als je cin wilt gebruiken dan cin uncommenten en cin.get uitcommenten
    // andersom natuurlijk ook :)
    // anders werkt het voorbeeld niet goed
    
    cout << "input: ";
    //char name[25];
    //cin >> name;
    //cout << "output: " << name << '\n';


    char hello[25];
    cin.get(hello, 25);
    cout << "output: " << hello << '\n';

    return 0;
}
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan