hulp nodig met cin

Status
Niet open voor verdere reacties.

Dizaster

Gebruiker
Lid geworden
16 okt 2007
Berichten
35
Hoe kan ik ervoor zorgen dat je in het volgende voorbeeld geen letters, speciale tekens of zinnen in kunt voeren? maar alleen cijfers

Code:
float Voorbeeld() {
     float a;
     cout << "Voer hier een cijfer in: ";
     cin >> a;
     return a;
}

Want als je hier als gebruiker geen nummer invoert loopt hij vast, nu weet ik dat ik iets moet doen met exceptions maar heb geen idee wat... help aub?

Alvast bedankt :)
 
Heb zelf geen ervaring met cin (ik gebruik alleen C functies), maar als het om exceptions gaat zal het volgende moeten werken:

Code:
while(1) {
    try {
        cin >> a;
    }

    catch(...) {
        puts("Alleen getallen aub");
        continue;
    }
    break;
}
 
Laatst bewerkt:
het werkt niet, ik ben om te oefenen boter kaas en eieren in console aan het maken, alles werkt behalve dat als je dus een niet-cijfer intypt hij crasht

Code:
float inputSquare() {
    float square = 10;
    float temp;
    Start:
    
    cout << "\n" << XorO << ": ";
    cin >> temp;
    if (temp == 1 && square1 == ' ') goto Return;
    else if (temp == 2 && square2 == ' ') goto Return;
    else if (temp == 3 && square3 == ' ') goto Return;
    else if (temp == 4 && square4 == ' ') goto Return;
    else if (temp == 5 && square5 == ' ') goto Return;
    else if (temp == 6 && square6 == ' ') goto Return;
    else if (temp == 7 && square7 == ' ') goto Return;
    else if (temp == 8 && square8 == ' ') goto Return;
    else if (temp == 9 && square9 == ' ') goto Return;
                                
    drawField(0);
    goto Start;
    Return:
    square = temp;
    return square;
}

Deze functie gebruik ik om te bepalen in welk vakje hij een X of een O moet zetten, ik weet dat het niet de meest effectieve manier is, maar wel een van de simpelste, daarom heb ik hem gebruikt omdat ik niet beter weet. Hoe kan ik hier een try/catch exception in maken die ervoor zorgt dat temp alleen een float input kan hebben?
 
je kunt van a ook een char maken. als het character kleiner dan char(49) (één) is is het fout en moet ie om nieuwe invoer vragen, of als hij groter dan char(57) (negen) is.

Code:
char a;
cout << "Voer een getal in: ";
cin >> char; cin.get();

if( getal < char(49) || getal > getal(57) ) cout << "Fout!";
else cout << "Goed!";
 
Deze functie gebruik ik om te bepalen in welk vakje hij een X of een O moet zetten, ik weet dat het niet de meest effectieve manier is, maar wel een van de simpelste, daarom heb ik hem gebruikt omdat ik niet beter weet. Hoe kan ik hier een try/catch exception in maken die ervoor zorgt dat temp alleen een float input kan hebben?

Je hebt niet noodzakelijk een try/catch exception nodig hoor.

Code:
#include <cstdlib>
#include <iostream>
using namespace std;

char board[9];

int getInputSquare(){    
    while(true){
       int in(0);
       
       while(!(in > 0 && in < 10)){
          cin >> in;
          if(cin.fail()){
             cin.clear();
             cin.ignore();
          }
       }
       
       for(int i = 0; i < 9; i++)
          if( in == (i+1) && board[i] != ' ' )
             return in;       
    }                 
}

int main(int argc, char *argv[])
{
    for(int i = 0; i < 9; i++)
       board[i] = ' ';
    
    board[2] = 'x';
    int i = getInputSquare(); // als je 3 intypt dan stopt de functie getInputSquare() pas(array begint bij 0)
      
    system("PAUSE");
    return EXIT_SUCCESS;
}

(met de code in dit voorbeeld mag je getInputSquare() alleen aanroepen wanneer er nog een plek op het board over is. Anders krijg je een oneindige lus.)

Verder dient dit stukje code natuurlijk enkel ter illustratie.

edit:

en om bij te houden wie aan de beurt is zou je iets als onderstaande kunnen doen:

Code:
    int speler = 1;
    speler^=1;
    cout << speler << '\n';
    speler^=1;
    cout << speler << '\n';
 
Laatst bewerkt:
Heb zelf geen ervaring met cin (ik gebruik alleen C functies), maar als het om exceptions gaat zal het volgende moeten werken:

Code:
while(1) {
    try {
        cin >> a;
    }

    catch(...) {
        puts("Alleen getallen aub");
        continue;
    }
    break;
}

Jouw voorbeeld gaat helaas niet werken. Zodra de invoer mislukt(wanneer er bijvoorbeeld een string wordt ingevoerd), wordt er een error flag ingesteld en dien je de stream eerst weer te herstellen. Zie mijn code.
 
ok dankjewel , ik wist niet van de cin.fail cin.ignore en cin.clear functies :) en wat betreft wie aan de beurt is en zo, dat heb ik allemaal al gemaakt, het enige wat ik nog moet doen is AI voor tegen computer en zorgen dat hij niet crasht als je verkeerde invoer hebt, nu alleen de AI dus nog, dankje!
 
Jouw voorbeeld gaat helaas niet werken. Zodra de invoer mislukt(wanneer er bijvoorbeeld een string wordt ingevoerd), wordt er een error flag ingesteld en dien je de stream eerst weer te herstellen. Zie mijn code.

Ok :) ik heb zelf geen ervaring met streams... Ik gebruik de "oude" C functies, die vind ik veel prettiger.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan