# [C] nur eingabe von ganzahlen erlauben



## scsved (29. Oktober 2010)

Hallo,

Ich möchte eine zahl eingeben welche nur eine ganzzahl sein darf keine gleitkommazahl.
wie kann ich das coden?


----------



## Bratkartoffel (29. Oktober 2010)

scanf()
oder
cin
oder
readline() mit atoi()

Gruß
BK


----------



## deepthroat (29. Oktober 2010)

Hi.

C oder C++?

Für C siehe http://www.tutorials.de/c-c/367434-c-es-sollen-nur-ganze-zahlen-eingelesen-werden.html

Gruß


----------



## scsved (29. Oktober 2010)

int ausgangszahl;

		do
			{
				printf("Gib eine beliebe positive Ganzahl kleiner 200 ein: ");   
				scanf("%d", &ausgangszahl);   
				if (ausgangszahl == 0)
					{
						break;
				    }
			}
		while ((ausgangszahl >= 200) || (ausgangszahl < 0));


Frage:
wenn ich hier nun eine gleitkommazahl eingebe zB 22.8 rechnet er trotzdem weiter ich will aber nur ganzezahlen zulassen.


----------



## kickerxy123 (29. Oktober 2010)

er wird dann in dem Fall mit 22 rechnen.
Ich würde es so realisieren:

```
float tmp;
do
{
cout << "Beliebige Zahl kleiner 200: ";
cin >> tmp;
}while(tmp != ((int)tmp) || tmp < 0 || tmp > 199);
```

Gruß,
kickerxy


----------



## scsved (29. Oktober 2010)

danke für die antwort.

hast du auch ne lösung in C?


----------



## kickerxy123 (29. Oktober 2010)

sollte so funktionieren:

```
float tmp;
do
{
printf("Beliebige Zahl kleiner 200: ");
scanf("%f", &tmp);
}while(tmp != ((int)tmp) || tmp < 0 || tmp > 199);
```


----------



## deepthroat (29. Oktober 2010)

@kickerxy123: ich glaube du hast die Frage nicht wirklich verstanden.

@scsved: Siehe den Link den ich dir gegeben habe. (\edit: hab den Link berichtigt)


----------



## kickerxy123 (29. Oktober 2010)

wieso habe ich die Frage nicht verstanden?
Er will, dass der benutzer eine Zahl zwischen 0 und 200 eingibt, die keine Nachkommastellen hat. Genau das macht meine Funktion.
Man könnte dann noch

```
unsigned short ausgangszahl = (int)tmp;
```
 machen. Aber dieser Thread ist wohl eh überflüssig geworden (vgl andere parallele Thread).


----------



## deepthroat (29. Oktober 2010)

kickerxy123 hat gesagt.:


> wieso habe ich die Frage nicht verstanden?


Weil du eine Gleitkommazahl einliest. Und das machst du noch nicht einmal richtig.


kickerxy123 hat gesagt.:


> Er will, dass der benutzer eine Zahl zwischen 0 und 200 eingibt, die keine Nachkommastellen hat.


Er/sie möchte nur ganze Zahlen einlesen.

Gruß


----------



## scsved (29. Oktober 2010)

korrekt deepthroat!

in deinem link steht ja das es ueber die scanf_s() funktion geht.
gibt es da auch eine kontrollabfrage ohne eine funktion.

irgend eine mathematische bedingung die ich in die while-schleife packen kann?


----------



## kickerxy123 (29. Oktober 2010)

hast du meinen Code mal ausgeführt?
es werden nur ganze Zahlen akzeptiert (bzw natürliche Zahlen um korrekt zu bleiben)

Gruß,
kickerxy


----------



## deepthroat (29. Oktober 2010)

kickerxy123 hat gesagt.:


> hast du meinen Code mal ausgeführt?
> es werden nur ganze Zahlen akzeptiert (bzw natürliche Zahlen um korrekt zu bleiben)


Dein Code akzeptiert eigentlich so ziemlich alles - egal ob es eine Zahl ist oder nicht.

Gib z.B. mal ein "a" ein.

\edit: ganz nebenbei funktioniert deine angestrebte Methode nicht allgemein.

Gruß


----------



## Trulleberg (1. November 2010)

```
long ausgangszahl;
char *e, s[20];
...
    do
    {

      errno = 1;
      if( fgets( s,20,stdin ) )
      {
        if( strchr(s,'\n') )
          s[strlen(s)-1]=0;
        else
          while( getchar()!='\n' );

        errno = 0;
        ausgangszahl = strtol( s,&e,10 );
      }
    }
    while ( errno || e==s || *e || ausgangszahl >= 200 || ausgangszahl < 0 );
```
So funktionierts plattformunabhängig mit long-Über/Unterlaufprüfung Leeren des Eingabepuffers.


----------



## deepthroat (3. November 2010)

Trulleberg hat gesagt.:


> So funktionierts plattformunabhängig mit long-Über/Unterlaufprüfung Leeren des Eingabepuffers.


Falls dort 20 oder mehr Leerzeichen am Anfang einer Zeile stehen, funktioniert es auch nicht. Und du hast eine Endlosschleife falls die Eingabe zu Ende ist.

Gruß


----------

