10 berichten aan het bekijken - 1 tot 10 (van in totaal 10)
  • Q:
    Bijdrager
    Undaunted

    C++ Raadsel

    Beschouw de volgende code:

    #include <iostream>

    using namespace std;

    int main (int argc, char * const argv[]) {
    double cijfer;
    int v=0, o=0, aant=0;
    cout << “Toets een ‘0’ om het programma te beĆ«indigenn”;
    do
    {
    cout << “Geef tentamen cijfer:”;
    cin >> cijfer;
    cin.get();
    if (cijfer = 0) continue;
    if (cijfer < 1.0 || cijfer > 10.0)
    cout << “foutieve invoer!n”;
    else
    {
    aant++;
    if (cijfer >= 5.5) v++;
    else o++;
    }
    } while (cijfer != 0);
    cout << “Er zijn ” << aant << ” cijfers ingevoerd.n”;
    cout << “Daar van zijn ” << v << ” cijfers voldoende.n”;
    cout << “De overige ” << o << “cijfers zijn onvoldoende.n”;
    return 0;
    }

    ’t is nog maar een oefenopdrachtje, ik denk dat de verwachte output vrij duidelijk is. Het programma moet stoppen bij invoer van een ‘0’, een melding geven wanneer het getal ongeldig is en anders tellen hoeveel cijfers er zijn ingevoerd. Daar
    naast hoeveel van deze cijfers er voldoende en onvoldoende zijn.

    Gek genoeg is mijn output constant:

    Geef tentamen cijfer:5
    foutieve invoer!
    Er zijn 0 cijfers ingevoerd.
    Daar van zijn 0 cijfers voldoende.
    De overige 0cijfers zijn onvoldoende.

    H4141 has exited with status 0.

    Als ik if (cijfer = 0) continue; weghaal stopt de loop niet gelijk, maar krijg ik nog steeds bij elk getal de melding “foutieve invoer!” Een check om te kijken wat de waarde van “cijfer” is, geeft de verwachte waarde.

    Ik sta voor een raadsel, waarom reageert het programma nou anders dan ik verwacht?

    Komt gelijk een tweede vraag op nu ik ok “voorbeeld” klik. Waarom is m’n Layout nou verpest? Alles staat nu strak onder elkaar zonder inspring. Nou goed, beetje programmeer snapt dit waarschijnlijk als nog wel.

    Bijdrager
    qjb

    Ik zie minstens 1 fout:
    if (cijfer = 0) continue;

    Moet zijn:
    if (cijfer == 0) continue;

    Bijdrager
    Xanadu
    ”Undaunted”

    if (cijfer = 0) continue;
    if (cijfer < 1.0 || cijfer > 10.0)

    if (cijfer = 0) is een assigment, geen vergelijking .Oftewel je assigned 0 aan cijfer, daarna test je of cijfer kleiner dan 1 (is dus altijd true), dus de foutmelding.

    doe maar (cijfer == 0), gaat vast helpen

    Bijdrager
    Xanadu

    Okay GJB, je was me voor

    Bijdrager
    qjb

    Het kan overigens helpen om bij ‘raadsels’ wat extra output te genereren over de cruciale variabelen ten einde te ontdekken waar iets fout gaat (of beter waar iets anders gaat dan je verwacht). Als je dit niet leert krijg je zeker problemen zodra de code complexer wordt.

    Bijdrager
    Undaunted

    Tuurlijk! Het is geen pascal. Had me er blind op gestaard. Bedankt!

    Inactief
    Anoniem
    ”Undaunted”

    Komt gelijk een tweede vraag op nu ik ok “voorbeeld” klik. Waarom is m’n Layout nou verpest? Alles staat nu strak onder elkaar zonder inspring. Nou goed, beetje programmeer snapt dit waarschijnlijk als nog wel.

    Je moet preformatted text in een code blok zetten:

    [code:1:237c1ba2a8]
    #include <iostream>

    using namespace std;

    int main (int argc, char * const argv[]) {
    double cijfer;
    int v=0, o=0, aant=0;
    cout << "Toets een ‘0’ om het programma te beĆ«indigenn";
    do
    {
    [/code:1:237c1ba2a8]

    Bijdrager
    BIT
    ”koen”

    Je moet preformatted text in een code blok zetten

    Eum ?:?

    Inactief
    Anoniem
    ”BIT”
    ”koen”

    Je moet preformatted text in een code blok zetten

    Eum ?:?

    Dit was een reactie op de TS die problemen had om zijn voorbeeldcode met indents, etc te laten zien.

    Bijdrager
    BIT
    ”koen”

    Dit was een reactie op de TS die problemen had om zijn voorbeeldcode met indents, etc te laten zien.

    Ah zo:) .

10 berichten aan het bekijken - 1 tot 10 (van in totaal 10)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.