Gå til innhold

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


Anbefalte innlegg

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
Lenke til kommentar
Videoannonse
Annonse

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
Lenke til kommentar

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
Lenke til kommentar

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

#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
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

Lenke til kommentar

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...