Permalänk

vadhar jag gjort fel? (c++)

Hej! Jag sitter och arbetar med ett projekt i c++, men jag har kommit till en punkt där mitt sinne bryter ihop ju mer jag försöker lösa det! Jag försöker identifiera ett tecken, en siffra eller en bokstav utan hjälp av isalpha() och liknande, men det fungerar inte på något sätt! Kan någon se vilket fel jag har gjort ?

skulle vara väldigt tacksam!!!!

#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { char a; cout<< "Skriv en valfri siffra, bokstav eller tecken for identifikation"<< "\n" <<endl; cin>> a; if(a>= 'a' && a<='z') { cout<< "du har skrivit ut en liten engelsk bokstav" << endl; } else if(a>= 'A' && a<='Z') { cout << " du har skrivit en stor engelsk bokstav" << endl ; } else if(a>= '0' && a<='9') { cout << "du har skrivit en siffra"<< endl; } else if(a==-122 && a==-124 && a==-108) { cout<<"du har skrivit en liten svensk bokstav"<< endl; } else if(a==-113 && a==-114 && a==-103) { cout<< " du har skrivit en stor svensk bokstav"<< endl; } else { cout<< "Detta ar formodligen ett annat tecken annars faila du" << endl; } system("PAUSE"); return EXIT_SUCCESS; }

Permalänk
Medlem

Små å, ä, ö har -27, -28, -10 enligt mitt program och förmodligen är de stora också fel...
Allt annat fungerar väll förutom de svenska tecknen?

I annat fall så jämför du a med å, ä, ö där alla skall vara sanna, vilket inte går!

Permalänk
Medlem
Skrivet av QrazyDanne:

Hej! Jag sitter och arbetar med ett projekt i c++, men jag har kommit till en punkt där mitt sinne bryter ihop ju mer jag försöker lösa det! Jag försöker identifiera ett tecken, en siffra eller en bokstav utan hjälp av isalpha() och liknande, men det fungerar inte på något sätt! Kan någon se vilket fel jag har gjort ?

skulle vara väldigt tacksam!!!!

#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { char a; cout<< "Skriv en valfri siffra, bokstav eller tecken for identifikation"<< "\n" <<endl; cin>> a; if(a>= 'a' && a<='z') { cout<< "du har skrivit ut en liten engelsk bokstav" << endl; } else if(a>= 'A' && a<='Z') { cout << " du har skrivit en stor engelsk bokstav" << endl ; } else if(a>= '0' && a<='9') { cout << "du har skrivit en siffra"<< endl; } else if(a==-122 && a==-124 && a==-108) { cout<<"du har skrivit en liten svensk bokstav"<< endl; } else if(a==-113 && a==-114 && a==-103) { cout<< " du har skrivit en stor svensk bokstav"<< endl; } else { cout<< "Detta ar formodligen ett annat tecken annars faila du" << endl; } system("PAUSE"); return EXIT_SUCCESS; }

http://data.whicdn.com/images/8520355/1295931306-922593-450x2...

Spontan tanke: Skall du jämföra med negativa tal?

Permalänk
Medlem
Skrivet av gothxx:

Spontan tanke: Skall du jämföra med negativa tal?

Ja, i detta fall så ligger de svenska tecknen listade på minussidan så det går bra, om man nu inte vill jämföra med 'ö' eller 'Ö' ist...

Edit: -108 osv verkar stämma skumt nog, det är vad som läses in av cin, dock ger 'å', 'ä', 'ö' annat värde när tilldelat till en char. Dock får du byta ut så alla inte skall vara sanna samtidigt.

Permalänk

Du kanske är nöjd redan, antar att byta && till || gjorde susen... men byt ut "char a" till unsigned char a så slipper du hålla på med negativa tal. Sedan har du stött på en lite mer avancerad sak nämligen input codepages... ditt test kör sannolikt med OEM 850, då är 'å' -122 eller 134 (unsigned), men det kan variera, någon tidigare påstod andra värden... det beror alltså på codepage, sannolikt vilken typ av c++ projekt du kör med. I codepage Windows 1252 så är 'å' 229...

/Magnus

Permalänk

Tack så mycket för alla svar! Tror att jag har lyckats lösa den nu, uppskattar verkligen svaren!

Förlåt för rookie misstag, är relativt ny i programmeringsvärlden