Archief - [PROG]klein c probleem

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Darth-Falcon

Legacy Member
gegeven is volgend stom klein programmake

while (waar == 0)
{
if (!scanf("%d", &aantalb))
{
printf("ongeldige invoer\n");
}
else
{
waar = 1;
}
}

het probleem is dus wanneer foute invoer gegeven word (dus alles behalve cijfers), dan wordt er niet opnieuw gevraagd om een aantal in te geven :sad:

killgore

Legacy Member
aangezien ik C++ code en geen c en dus de juiste werking van scanf niet ken kan ik niet helpen met het probleem, maar ik snap gewoon de logica niet van je code?

wrom niet onmiddelijk
Code:
while(!scanf("%d", &aantalb))
{
     printf("ongeldige invoer\n");
}
ipv van die extra -if else :s.

edit: Als het beetje op c++ lijkt: mssch je buffer eens leegmaken?

sh1b

Legacy Member
killgore zei:
aangezien ik C++ code en geen c en dus de juiste werking van scanf niet ken kan ik niet helpen met het probleem, maar ik snap gewoon de logica niet van je code?

wrom niet onmiddelijk
Code:
while(!scanf("%d", &aantalb))
{
     printf("ongeldige invoer\n");
}
ipv van die extra -if else :s.

edit: Als het beetje op c++ lijkt: mssch je buffer eens leegmaken?
Scanf kan je eigenlijk vergelijken als cin in C++.

Dus:
Code:
#include <stdio.h>
int main()
{
    scanf("%d", &test);
}

is hetzelfde als:
Code:
#include <iostream>
using namespace std;

int main()
{
    cin << test;
}

EDIT: Even te vlug geweest met posten... Probeer dit eens:
Code:
 while (waar == 0)
{
scanf("%d", &aantalb)
if (!isdigit(aantalb))
{
printf("ongeldige invoer\n");
}
else
{
waar = 1;
}
}
Je moet wel #include <ctype.h> toevoegen aan je code :)

killgore

Legacy Member
dan ist cin >> test :p

Na wat testen & opzoekingswerk: je moet idd de buffer clearen, stel dat je een verkeerd teken ingeeft, dan kan hij het niet toewijzen aan deze double en blijft dit dus in je input buffer steken, en kom je ook in oneindige lus terecht (want hij zal dat verkeerde karakter altijd proberen toewijzen aan je double, wat niet gaat ;)).

jouw code wordt:
Code:
while(!scanf("%d", &aantalb))
{
    printf("ongeldige invoer\n");
    //getchar(); // edit:
    fflush(stdin);
}
fflush(stdin);

edit: kheb dus getchar vervangen door die flush, en deze er ook nog eens achtergezet.
Reden: als je "5watletters" ingeeft ga je anders nog altijd "watletters" in je inbuffer houden wat later tot rare problemen kan leiden ;).

killgore

Legacy Member
sh1b zei:
Ugh idd, ik sla >> en << nogal veel door elkaar, maar ik code dan ook in C en niet in C++ :p
die bestaan ook in C ze :p, hier zijn het gewone overload operatoren ipv bitshifts.

Ma ge kunt het simpel bekijken :). de richting van de pijlkes ;). Ze komen van de var (of stream) waar ze origineel staan en ze gaan naar de var of stream waar ze moeten ingevoegd (gekopieerd) worden :p.

sh1b

Legacy Member
killgore zei:
die bestaan ook in C ze :p, hier zijn het gewone overload operatoren ipv bitshifts.

Ma ge kunt het simpel bekijken :). de richting van de pijlkes ;). Ze komen van de var (of stream) waar ze origineel staan en ze gaan naar de var of stream waar ze moeten ingevoegd (gekopieerd) worden :p.
'k Wist niet dat die in C ook gebruikt kunnen worden, ik gebruik altijd scanf() en printf(). Ik kan een héél klein beetje C++, en als ik dan een stukje code typ zit er soms wel eens zo'n domme fout in :)

Maar dit gaat wat off-topic denk ik :p

killgore

Legacy Member
sh1b zei:
'k Wist niet dat die in C ook gebruikt kunnen worden, ik gebruik altijd scanf() en printf(). Ik kan een héél klein beetje C++, en als ik dan een stukje code typ zit er soms wel eens zo'n domme fout in :)

Maar dit gaat wat off-topic denk ik :p
off-topic kan nie echt want kheb zen probleem bij mijn weten opgelost :p.

en ik bedoelde dat de << en >> operatoren in C ook bestaan, enkel hebben ze daar gewoon hun basisfunctionaliteit van bitoperatoren. In de cin en cout vorm van c++ zijn deze operatoren overloaded versies, waar ze "data verstuur" operators worden (overloading = operatoren herdefiniëren voor klassetypes).
In c kan je deze dus niet gebruiken om output en input te regelen :).

sh1b

Legacy Member
killgore zei:
off-topic kan nie echt want kheb zen probleem bij mijn weten opgelost :p.

en ik bedoelde dat de << en >> operatoren in C ook bestaan, enkel hebben ze daar gewoon hun basisfunctionaliteit van bitoperatoren. In de cin en cout vorm van c++ zijn deze operatoren overloaded versies, waar ze "data verstuur" operators worden (overloading = operatoren herdefiniëren voor klassetypes).
In c kan je deze dus niet gebruiken om output en input te regelen :).
Ah zo bedoelt ge :) Wist ik nog niet :) Dank u voor de uitleg :p

Darth-Falcon

Legacy Member
jep probleem is opgelost, alleen heb k het te laat gezien :sop:

ma soit kan het nog gebruiken :) , merci he dudes :niceone:

btw ik had alles in een while lus omdat wanneer de invoer geldig was, er ook nog gecontroleerd moest worden of den invoer nie hoger was dan 10, anders moest er ook nog s opnieuw achter gevraagd worden
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan