Avatar billede narrr Nybegynder
24. september 2004 - 18:22 Der er 3 kommentarer og
1 løsning

Elegant error-checking ved cin

howdy.

Når jeg tester, om brugeren for eksempel indtaster et bogstav i stedet for et tal, gør jeg sådan her:
---
double y;
            while(!(cin>>y)) {
                cout << "Fejl i input. Du skal indtaste et tal." << endl;
                cin.clear();
                cin.ignore(INT_MAX, '\n');
            }
---

Men hvis man skal indlæse mange variabler bliver der jo en forfærdelig masse code-duplication, og det vil jeg gerne undgå. Er der nogen der kan foreslå en mere elegant løsning end ovenstående?
Avatar billede arne_v Ekspert
24. september 2004 - 18:26 #1
Du laver vel en:

int readint()
{
  ...
}

hvor du ligger logikken og så kalder du bare readint i resten af koden.
Avatar billede bertelbrander Novice
24. september 2004 - 19:45 #2
#include <sstream>
#include <iostream>
#include <string>

template<typename T>
void Get(T &t, const char *aPrompt)
{
  while(1)
  {
      std::cout << aPrompt;
      std::string s;
      std::getline(std::cin, s);
      std::stringstream ss(s);
      if(ss >> t)
        return;
  }
}

int main()
{
  int x;
  Get(x, "Enter a int: ");
  std::cout << "You entered: " << x << std::endl;
  double d;
  Get(d, "Enter a double: ");
  std::cout << "You entered: " << d << std::endl;
}
Avatar billede narrr Nybegynder
27. september 2004 - 16:54 #3
Ja okay, jeg kan godt se at det er smartest med en funktion. Egentlig troede jeg at man kunne lave en slags MyCin-klasse, men jeg kan godt se at det bliver for bøvlet. Tak for svaret bertel, og da du ikke vil have points skal du nok blive fri.
Avatar billede narrr Nybegynder
27. september 2004 - 16:54 #4
lukket.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester