Bruno Mars Skrevet 8. september 2009 Del Skrevet 8. september 2009 (endret) Har denne koden: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int tall; printf("This program will decide whetever the digit you enter is a even or odd.\nEnter your digit: "); scanf("%d", &tall); switch (tall % 2) { case 0: printf("Your digit is a EVEN integer.\n"); break; case 1: printf("Your digit is a ODD integer.\n"); break; default: printf("Incorrect digit!\nEnter a new digit: "); break; } system("PAUSE"); return 0; } Hvordan skal jeg gjøre for at hvis man skriver inn en bokstav eller et tegn som ikke er et tegn så skal det komme "Incorrect digit!\nEnter a new digit: " Har prøvd som dere ser i koden, men det funker ikke. NB: må bruke denne switch- metoden. Endret 8. september 2009 av mx1000 Lenke til kommentar
Giddion Skrevet 8. september 2009 Del Skrevet 8. september 2009 Du kan skjekke om scanf(....) != 0 for å se om den fant noe som matchet stringen. noe ala dette: hvis scanf(...) != 0 switchverdi = tall % 2; hvis ikke switchverdi = -1; Med metoden her kan du taste inn f. eks. 4f (4 leses), men ikke f4. Lykke til Lenke til kommentar
Dead_Rabbit Skrevet 8. september 2009 Del Skrevet 8. september 2009 (endret) Det du kan gjøre: - Les inn tallet til en char* istedenfor en int - Lag en funksjon som sjekker om en char er et tall - Lag en funksjon som itererer gjennom char-arrayet og sjekker om hver char er et tall vha. den forrige funksjonen Du kan lage en funksjon som sjekker om en char er et tall ved å gjøre følgende: - Cast char-variabelen til en int - Sjekk om denne verdien er større enn eller lik (int)'0' og mindre enn eller lik (int)'9' - Returner true/false avhengig av om testen feilet eller ikke Litt starthjelp (utesta kode!): // ... int i = (int) ch; if(i >= (int) '0' && i <= (int) '9') // ... Endret 8. september 2009 av Dead_Rabbit Lenke til kommentar
Bruno Mars Skrevet 9. september 2009 Forfatter Del Skrevet 9. september 2009 Du må utdype litt mer Giddeon. Har gjort noen forsøk men ikke noe som funka. @Dead_Rabbit; dessverre litt for avansert løsning for meg enda. Har drevet med C i 3 uker bare. Har dog erfaring fra C#, som virker mye mer brukervennlig. Lenke til kommentar
亚历山大 Skrevet 9. september 2009 Del Skrevet 9. september 2009 (endret) Som Dead_Rabbit sa: char* char y[1]; y[0] = 'a'; y[1] = 0; for(int i = 0; i < strlen(input);i++) while(y < 'z') if(strcmp(input[i],y) == 0) printf("Only numbers plx!\n"); (Ikke testa:P Skrev rett inn her:P) Endret 9. september 2009 av zorgion Lenke til kommentar
Dead_Rabbit Skrevet 9. september 2009 Del Skrevet 9. september 2009 (endret) Jeg så forresten at C-biblioteket allerede har en funksjon som heter isdigit, som sjekker om en char inneholder et tall mellom 0 og 9. Alt vi trenger å gjøre for å sjekke om inputen er et tall er derfor å iterere gjennom strengen og sjekke om hvert tegn er et tall vha isdigit-funksjonen: int isnum(const char str[], int length) { int i; for(i = 0; i != length; ++i) if(!isdigit(str[i])) return 0; return 1; } Edit: For å bruke isdigit må du huske å inkludere ctype.h Endret 9. september 2009 av Dead_Rabbit Lenke til kommentar
GeirGrusom Skrevet 10. september 2009 Del Skrevet 10. september 2009 Har et problem relatert til dette selv: Dette er til en oblig i algortimefaget. Problemet kommer ved at et heltall skal leses inn for å lagres i en linked list, men dersom brukeren skriver for eksempel 123.456 blir 123 lagt inn, og en feilmelding blir gitt. Alle heltall er gydlige input, men jeg kan ikke finne noen måte å gi feilmelding på alt annet enn heltall. Tenkte å lese til en string og bruke atoi, men problemet er at denne returnerer bare 0 dersom det gikk galt, men for programmet er 0 en gyldig verdi :/ Noen som har en god løsning? Lenke til kommentar
aC Skrevet 10. september 2009 Del Skrevet 10. september 2009 #include <stdio.h> void luk_ut_tall(char *tall); int main(int argc, char **argv) { char streng[200]; printf("Skriv så inn noe søppel: "); scanf("%s", streng); luk_ut_tall(streng); } void luk_ut_tall(char *tall) { int i; for (i=0; tall[i]!=0; ++i) { if( !(tall[i]<0x30 || tall[i]>0x39) ) printf("%c ",tall[i]); } } eller har jeg misforstått problmet, for dette ser jo for trivielt ut Lenke til kommentar
GeirGrusom Skrevet 10. september 2009 Del Skrevet 10. september 2009 Vel, jeg tenkte at jeg kunne sjekke tallet manuelt, og lese inn en streng, men jeg synes bare at dette problemet er såpass trivielt at STL burde hatt en fiks for det :/ Lenke til kommentar
zotbar1234 Skrevet 13. september 2009 Del Skrevet 13. september 2009 Tenkte å lese til en string og bruke atoi, men problemet er at denne returnerer bare 0 dersom det gikk galt, men for programmet er 0 en gyldig verdi :/ Noen som har en god løsning? strtol()? Lenke til kommentar
GeirGrusom Skrevet 13. september 2009 Del Skrevet 13. september 2009 (endret) Jo, det kunne jo gått an, jeg regner med at den skriver null til endptr dersom funksjonen feiler. Takker! Endret 13. september 2009 av GeirGrusom Lenke til kommentar
TheMaister Skrevet 13. september 2009 Del Skrevet 13. september 2009 Har denne koden: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int tall; printf("This program will decide whetever the digit you enter is a even or odd.\nEnter your digit: "); scanf("%d", &tall); switch (tall % 2) { case 0: printf("Your digit is a EVEN integer.\n"); break; case 1: printf("Your digit is a ODD integer.\n"); break; default: printf("Incorrect digit!\nEnter a new digit: "); break; } system("PAUSE"); return 0; } Hvordan skal jeg gjøre for at hvis man skriver inn en bokstav eller et tegn som ikke er et tegn så skal det komme "Incorrect digit!\nEnter a new digit: " Har prøvd som dere ser i koden, men det funker ikke. NB: må bruke denne switch- metoden. Du går ikke tilfeldigvis på HVE? Lenke til kommentar
Bruno Mars Skrevet 13. september 2009 Forfatter Del Skrevet 13. september 2009 Det er mulig det! Lenke til kommentar
GeirGrusom Skrevet 14. september 2009 Del Skrevet 14. september 2009 Så det er ikke bare meg her nei ^^ 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å