ProXymus Skrevet 12. januar 2005 Del Skrevet 12. januar 2005 int option; cin >> option; if ( option == 1 ) { // kode } else { // kode } Funker fint når man skriver 1 eller 2 osv osv. Men hvis man skriver noe annet enn et nr klikker det helt. Alt begynner å loope flere ganger osv. Hva kan jeg gjøre for å ungå dette? Lenke til kommentar
Peter Skrevet 12. januar 2005 Del Skrevet 12. januar 2005 Lese litt om basic C++. int står for integer som er tall i C++. Dersom du vil lese bokstaver kan du bruke char Lenke til kommentar
søppel Skrevet 12. januar 2005 Del Skrevet 12. januar 2005 (endret) ta en titt på cin.ignore() bokstaven (eller det som ikke var et tall) ligger fortsatt i stdin-bufferen .. derfor looper programmet hver gang du venter på ny input (cin >> something) .. da det ellerede ligger data i bufferen .. men denne er feil .. og feiler igjen .. og igjen skrevet fryktelig fort dette ... les noe om io-bibliotekene edit: ooh ... btw .. cin returnerer false om noe feiler .. if(!(cin >> option)) { cin.igonre(); // noe silkt .. blabla } else if(option == 1) { doStuff(); }else if(option == 2) { doSomeOtherStuff(); } ...etc. Endret 12. januar 2005 av søppel Lenke til kommentar
søppel Skrevet 12. januar 2005 Del Skrevet 12. januar 2005 (endret) template<typename T> void readStdin(T& t, std::string msg, std::string on_wrong_input) { std::cout << msg << std::flush; while(!(std::cin >> t)) { std::cout << on_wrong_input; std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cout << msg << std::flush; } } // readStdin Edit: Bør seff generaliseres til å håndtere input fra andre streamer enn cin .. og håndteringsrutinger bør også spesifiseres "utenifra" (generaliseres) ... Endret 12. januar 2005 av søppel Lenke til kommentar
ProXymus Skrevet 12. januar 2005 Forfatter Del Skrevet 12. januar 2005 Lese litt om basic C++.int står for integer som er tall i C++. Dersom du vil lese bokstaver kan du bruke char Bruker en switch i programmet og det krever tydeligvis at option er integer så den kan ikke være char :/ Lenke til kommentar
søppel Skrevet 12. januar 2005 Del Skrevet 12. januar 2005 (endret) Skal du både lese inn tegn, strenger og tall bør du lese inn i en std::string og (eventuellt) konvertere til andre typer (int f.eks.) etterpå. #include <iostream> #include <sstream> template<typename T1, typename T2> T1 toType(T2 const& source) { std::stringstream oss; oss << source; T1 target; oss >> target; return(target); } // toType int main() { using namespace std; int i = 1234; string s = toType<string>(i); cout << s << endl; i = toType<int>(s); cout << i << endl; return(0); } // main Endret 12. januar 2005 av søppel Lenke til kommentar
saboi Skrevet 13. januar 2005 Del Skrevet 13. januar 2005 (endret) bare sånn for å pirke, cin returnerer ikke false, den har overloada operator void* for at while(cin>>bah) skal virke.. og du kan fint switche en char.. det er bare en tallverdi mellom 0 og 255, eller -128 og 127 om du vil Endret 13. januar 2005 av saboi Lenke til kommentar
ProXymus Skrevet 16. januar 2005 Forfatter Del Skrevet 16. januar 2005 Kompilatoren sier "switch quantity not an integer" når jeg prøver å bruke char option[1]; Lenke til kommentar
søppel Skrevet 16. januar 2005 Del Skrevet 16. januar 2005 (endret) #include <iostream> using namespace std; int main() { char option[1]; option[0] = 'a'; switch(*option) { case 'a': cout << "a" << endl; break; default: cout << "not a" << endl; } return(0); } // main char* (eller den idiotiske typen char*[]-ett-eller-annet som blir-det-samme-ett-eller-annet) er ikke en integer. char er en integer. Endret 16. januar 2005 av søppel Lenke til kommentar
☀ ❄ Skrevet 16. januar 2005 Del Skrevet 16. januar 2005 (endret) Og du er sikker på at du skriver det slik: char option[1]; cin >> option[0]; // Må ikke være switch(option) switch (option[0]) { // Riktig: case 'a': cout << "We got an a!\n"; break; // Galt: case "b": cout << "We got a b!\n"; break; } Edit: søppel kom meg i forkjøpet søppel: char* argv[] er forresten ikke det samme som char option[]. Det første er en peker til et array av tegn, altså flere "ord", mens det siste bare er ett "ord". (Det blir galt å snakke om ord, men dere skjønner og vet poenget.) Endret 16. januar 2005 av Myubi Lenke til kommentar
søppel Skrevet 16. januar 2005 Del Skrevet 16. januar 2005 (endret) Hva er egentlig vitsen med å bruke char[1] ??? ..den kan jo bare inneholde étt tegn. Bruk char option; *doh* Endret 16. januar 2005 av søppel Lenke til kommentar
☀ ❄ Skrevet 16. januar 2005 Del Skrevet 16. januar 2005 søppel: Hvis det var til meg brukte jeg det for å illustrere. Jeg vil også tro at ProXymus egentlig har et større array. Lenke til kommentar
søppel Skrevet 16. januar 2005 Del Skrevet 16. januar 2005 (endret) Nei, det var ment generellt. Har han et større array til å lagre strenger i, og skal basere valg på disse strengene går det ikke å bruke switch. men i dunno .. hva som foregår Edit: ang. char* arg[] kontra char[] .. o.s.v. .. o.s.v., så var det ikke det jeg mente -- det kan være det samme. Endret 16. januar 2005 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å