moescream
Gast
Hallo liebe Apfelsportsfreunde,
es ist mal wieder soweit und meine IT Abgabe steht vor der Tür. Diesmal klemmts an einer winzig kleinen Kleinigkeit, aber leider komm ich selbst nicht dahinter.
Ich will in einer Schleife solange einen Integer einlesen lassen, bis dessen Wert zwischen 1 und 9999 liegt. Wenn versehentlich ein anderes Zeichen, also ein Character, eingegeben wird, dann dürfte sich der Wert der Variablen n ja nicht geändert haben, d.h. der Wert ist entweder noch 0 oder, falls bereits eine ungültige Eingabe erfolgt ist, eben dieser ungültige vorangegangene Wert, was ja wieder die Schleife einleiten müsste. Alles funktioniert wunderbar, nur wenn ich tatsächlich einen Character eingebe, dann lande ich sofort in einer Endlosschleife. Bin ehrlich gestanden gerade ziemlich überfragt. Ich habe die Variable mit dem Wert 0 initialisiert und selbst wenn ich in der Schleife eine 0 eingebe (also tatsächlich die Bedingung der Schleife erfülle), dann läuft das Programm noch normal und die Schleife wird wieder ausgeführt. Sobald aber ein Character eingegeben wurde, liefert scanf zwar AUCH eine 0 zurück (oder eben die letzten ungültigen Wert) aber geht dann sofort in die Endlosschleife ohne die scan funktion ein weiteres mal auszuführen. Heißt das, das bei einem Typenkonflikt (Integer erwartet - character eingelesen) zwar der zuletzt aktuelle Wert der Variablen an den Benutzer zurückgegeben wird, aber das Programm intern mit einem anderen Wert arbeitet?
Ich würde mich über Hinweise sehr freuen, vor allem weil ich glaube, dass hier wahrscheinlich nur eine Winzigkeit verändert werden muss um das Programm lauffähig zu machen.
PS: Ich hab in anderen Beiträgen gelesen, dass man den -Wall Compiler benutzen soll, wenn man detailierte Fehlermeldungen erhalten will. Weiß jemand ob der unter XCode zur Verfügung steht? Hab in den man pages nichts gefunden...
Danke!!! Moritz
Hier noch ein code schnippsel:
#include <stdio.h>
int main ()
{
/*Variablendeklaration*/
int n=0;
/*Eingabe der Obergrenze*/
do
{
printf("\nBitte legen Sie eine Grenze fest, bis zu der alle Primzahlen ermittelt werden sollen.\n");
scanf(" %d", &n);
printf("Die Eingabe war: %d", n);
}
while ((n<=0)||(n>=10000));
return 0;
}
es ist mal wieder soweit und meine IT Abgabe steht vor der Tür. Diesmal klemmts an einer winzig kleinen Kleinigkeit, aber leider komm ich selbst nicht dahinter.
Ich will in einer Schleife solange einen Integer einlesen lassen, bis dessen Wert zwischen 1 und 9999 liegt. Wenn versehentlich ein anderes Zeichen, also ein Character, eingegeben wird, dann dürfte sich der Wert der Variablen n ja nicht geändert haben, d.h. der Wert ist entweder noch 0 oder, falls bereits eine ungültige Eingabe erfolgt ist, eben dieser ungültige vorangegangene Wert, was ja wieder die Schleife einleiten müsste. Alles funktioniert wunderbar, nur wenn ich tatsächlich einen Character eingebe, dann lande ich sofort in einer Endlosschleife. Bin ehrlich gestanden gerade ziemlich überfragt. Ich habe die Variable mit dem Wert 0 initialisiert und selbst wenn ich in der Schleife eine 0 eingebe (also tatsächlich die Bedingung der Schleife erfülle), dann läuft das Programm noch normal und die Schleife wird wieder ausgeführt. Sobald aber ein Character eingegeben wurde, liefert scanf zwar AUCH eine 0 zurück (oder eben die letzten ungültigen Wert) aber geht dann sofort in die Endlosschleife ohne die scan funktion ein weiteres mal auszuführen. Heißt das, das bei einem Typenkonflikt (Integer erwartet - character eingelesen) zwar der zuletzt aktuelle Wert der Variablen an den Benutzer zurückgegeben wird, aber das Programm intern mit einem anderen Wert arbeitet?
Ich würde mich über Hinweise sehr freuen, vor allem weil ich glaube, dass hier wahrscheinlich nur eine Winzigkeit verändert werden muss um das Programm lauffähig zu machen.
PS: Ich hab in anderen Beiträgen gelesen, dass man den -Wall Compiler benutzen soll, wenn man detailierte Fehlermeldungen erhalten will. Weiß jemand ob der unter XCode zur Verfügung steht? Hab in den man pages nichts gefunden...
Danke!!! Moritz
Hier noch ein code schnippsel:
#include <stdio.h>
int main ()
{
/*Variablendeklaration*/
int n=0;
/*Eingabe der Obergrenze*/
do
{
printf("\nBitte legen Sie eine Grenze fest, bis zu der alle Primzahlen ermittelt werden sollen.\n");
scanf(" %d", &n);
printf("Die Eingabe war: %d", n);
}
while ((n<=0)||(n>=10000));
return 0;
}