Tatern Skrevet 27. april 2004 Del Skrevet 27. april 2004 (endret) Hei og hå . Har ikke drevet med c++ så veldig lenge og den lille tiden jeg har drevet med det har jeg brukt borland c++ 5.02 fra '95 ellerno som vi bruker på skolen. Det har i og for seg gått greit, inntil nå. Har lastet ned et par nye gratis compilere (minGW og blooshed) og det er tydelig at det er visse forskjeller. Koden nedenfor virket fint med borland compileren(tviler på at den er ansi c++ compliant, det er ansi c++ standarden fra 97 heter er det ikke?), men i de andre looper den uendelig. Koden skal sjekke om variablen er den typen den er declarert som (i dette tilfellet int) , og hvis ikke skal den prompte brukern om ny input. Gjorde den om til en if statement og fant ut at cin.good() virker fint mens cin.seekg(0) og cin.clear() trolig er de som ikke virker likt som jeg er vant med. Jeg vil ha dem til å tømme bufferen og gjøre den klar for ny input men det går tydeligvis ikke. Får ingen feilmeldinger under debuging så jeg synes det er litt rart. Har lest på www.cplusplus.com og søkt i forumet uten å finne noen løsning. int a; cout << "please enter an integer:"; cin >> a; while (!cin.good()) { cin.seekg(0); cin.clear(); cout <<"Error. Input must be an integer.Please re-enter:"; cin >> a; } cout << "You entered :" << a; På forhånd takk for svar. Mvh Tatern Ps.: Kommer nok ikke til å kunne svare på eventuelle spørsmål før om en 12 timers tid. studerer på New Zealand og her kl 02.00 og jeg skal på uni kl 07.00... Endret 27. april 2004 av Tatern Lenke til kommentar
☀ ❄ Skrevet 27. april 2004 Del Skrevet 27. april 2004 Denne kan kanskje hjelpe deg. Lenke til kommentar
søppel Skrevet 27. april 2004 Del Skrevet 27. april 2004 (endret) #include <iostream> #include <sstream> #include <string> using namespace std; // Read from STDIN into "any" type. template<typename T> void readStdin(T& t, std::string msg = "", std::string onWrongInput = "Wrong input, try again!\n") { std::cout << msg << std::flush; while(!(std::cin >> t)) { cout << onWrongInput; std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cout << msg << std::flush; } } // readStdin() int main() { int i; readStdin(i, "Skriv inn et heltall: ", "Du skrev ikke inn et heltall, forsøk igjen!\n"); cout << "Du skrev inn: " << i << endl; return(0); } // main() Under kjøring: Skriv inn et heltall: hDu skrev ikke inn et heltall, forsøk igjen! Skriv inn et heltall: 3 Du skrev inn: 3 Tatt herfra: http://scm.nostdal.net/cgi-bin/viewcvs.cgi....viewcvs-markup (finner masse annet kjekkt der, derfor jeg linker) Edit: Altså, ignore(...) tømmer input-bufferen. Endret 28. april 2004 av søppel Lenke til kommentar
Tatern Skrevet 28. april 2004 Forfatter Del Skrevet 28. april 2004 Takker for svarene. Ignore funket glimrende! Litt kjipt dette med den borland compileren, ser at kode snuttene deres og andres her på forumet ser litt anderledes ut en det jeg har lært. Har feks. aldri brukt namespace eller template, og har heller ikke brukt "std::" foran noe før. Får spørre forelesern om det i morgen. Uansett, takker så mye for svarene. Mvh Tatern Lenke til kommentar
søppel Skrevet 28. april 2004 Del Skrevet 28. april 2004 (endret) Får spørre forelesern om det i morgen. Du kan jo eventuellt kreve at han/hun må ansette en assistent (meg) .. Edit: Det finnes gratis-compilere som støtter standarden, dev-cpp f.eks: www.bloodshed.net Endret 28. april 2004 av søppel Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå