getchar unter UNIX

angelo_Bux

Grünschnabel
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

Code:
#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
 
[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
Code:
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:
Code:
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.
Code:
char tmp[11];
if (scanf ("%10s", tmp) == 1 && *tmp != 27) {
   tmp[10] = 0;
   if (sscanf (tmp, "%i", alter) != 1) {
      /* Fehler ... */
   }
}
 
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;

}
 
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.
 
Zurück