# getchar unter UNIX



## angelo_Bux (25. Juli 2005)

Ich habe eine Frage, ich arbeite im Moment mit einer UNIX Workstation und bin gerade ein C Programm am programmieren. Nun wollte ich eine Abbrech Bedingung als IF erstellen. Wollte überprüfen ob die eingebene Taste eine ESC war. Falls es eine war sollte das Programm abbrechen. Beim vergeleich mit einem Char geht es aber wenn ich ein int habe geht es nicht mehr. 
Nun wie kann ich das Problem lösen


```
#include <stdio.h>
#include <stdlib.h>


int person(char *name, char *vorname, int *alter)
{
  printf("Name eingeben:\n");
  scanf("%s", name);
  
  if(*name == 27)
    {
      return 0;
    }
  else
    {
      printf("Vorname eingeben:\n");
      scanf("%s", vorname);
      if(*vorname == 27)
	{
	  return 0;
	}
      else
	{
	  printf("Alter eingeben:\n");
	  scanf("%i", alter);
	  if(*alter == getchar(27))
	    {      
	      return 0;
	    }
	}
    }
  return 1;
  
}
```

Gruss angelo


----------



## deepthroat (25. Juli 2005)

[das Thema hätte doch eher ins C/C++ Forum gepasst]

Hi.

Das Problem ist, das ein ESC natürlich keine gültige Zahl ist.

D.h. wenn du 
	
	
	



```
scanf("%i", alter);
```
 machst und der Nutzer ein ESC eingibt, bricht scanf ab und speichert keinen Wert in "alter", weil die Eingabe eben nicht in Ordnung war.

Deshalb sollte man immer prüfen ob scanf überhaupt erfolgreich war, bevor man mit den Ergebnissen in den Variablen weiterrechnet:
	
	
	



```
if (scanf("%i", alter) == 1)
   /* es wurde genau ein Wert einer Variablen zugewiesen */
} else {
   /* Fehler: keine gültige Eingabe. */
}
```

Wenn du also wirklich auf ESC reagieren willst, dann mußt du erstmal einen String einlesen, den du dann in eine Zahl konvertieren kannst falls es kein ESC war.
	
	
	



```
char tmp[11];
if (scanf ("%10s", tmp) == 1 && *tmp != 27) {
   tmp[10] = 0;
   if (sscanf (tmp, "%i", alter) != 1) {
      /* Fehler ... */
   }
}
```


----------



## angelo_Bux (25. Juli 2005)

Nach langer Forschung in Google konnte ich das Problem lösen ich scanne einfach getchar zmitzdrin rein. Hier meine lösung:

#include <stdio.h>
#include <stdlib.h>


int person(char *name, char *vorname, int *alter)
{
  char c; 
  printf("Name eingeben:\n");
  scanf("%s", name);

  if(*name == 27)
    {
      return 0;
    }
  else
    {
      printf("Vorname eingeben:\n");
      scanf("%s", vorname);
      if(*vorname == 27)
	{
	  return 0;
	}
      else
	{
	  printf("Alter eingeben:\n");
	  scanf("%i", alter);
	  c = getchar();
	  if(c == 27)
	    {      
	      return 0;
	    }
	}
    }
  return 1;

}


----------



## deepthroat (25. Juli 2005)

Wie gesagt, das Problem ist nur das du dann nicht weisst ob der Nutzer auch wirklich eine Zahl eingegeben hat oder ob in alter dann ein zufälliger Wert steht.


----------



## JohannesR (25. Juli 2005)

angelo_Bux, würdest Du bitte die CODE-Tags verwenden...?


----------

