Gå til innhold

Hvordan sjekke at det du skriver inn ikke er et tall?


Anbefalte innlegg

Skrevet (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 av mx1000
Videoannonse
Annonse
Skrevet

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

Skrevet (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 av Dead_Rabbit
Skrevet

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.

Skrevet (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 av zorgion
Skrevet (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 av Dead_Rabbit
Skrevet

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?

Skrevet

#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

Skrevet
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()?

Skrevet
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? :D

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...