C Fragen zur Korrektheit des folgenden C-Programms

BookOfLove

Cadet 3rd Year
Registriert
Dez. 2015
Beiträge
32
Ich möchte den Nutzer in der Shell dazu auffordern, zwei Zahlen einzugeben.
Die 2 Zahlen sollen dividiert werden.
Meine Fragen lauten: (Die Stelle habe ich im Code mit Zahl kommentiert)
(1) Das Programm soll nach der Eingabe von 2 Zahlen weitere Zahlen annehmen.(Bis mit strg+c oder Kill beendet wird)
Ist es korrekt, dies durch die While Schleife zu realisieren?
(2) Ist die Annahme der Zahlen korrekt?
Code:
int main(void)
{
  
  while(1)  //(1)
    {
	printf("Geben Sie 2 Zahlen ein");
	
	int e;
        int f;
	if(scanf("%d %d", &e,&f)<1)  //(2)
	{
		
		printf("Fehler bei scanf");
                 return 1;
	}
	
	int result = division(e,f);
	printf("Das Ergebnis lautet: %d \n",result); //Und ausgeben
    }
	return 0;

}
 
Zuletzt bearbeitet:
scanf wird nur in der if-Abfrage aufgerufen wenn die Zahl kleiner als 1 ist.
Wenn also False, dann hast du keinen Aufruf des scanf.

Macht wenig Sinn.

EDIT: und die if abfrage, also der Kopf des IF, ist absolut falsch. Du willst doch die eingebenen Zahlen vergleichen und nicht scanf mit <1
 
Zuletzt bearbeitet:
scanf wird aufgerufen und wenn der Wert kleiner 1 ist, wurden falsche Parameter übergeben. Bei mir funktioniert das
Ist (2) korrekt?
 
Habe nur den oberen Code eingegeben. Aber das kann definitiv nicht korrekt funktionieren. Du rufst die Methode/Funktion scanf() auf, der speichert zwei zahlen in die variablen e und f. Aber du vergleichst nicht e und f mit <1 sondern die Funktion scanf() mit <1.

Unabhängig davon, was passiert denn bitte wenn du Zahlen eingibst die größer als 0 sind? Die werden nirgendwo abgespeichert!?
 
@Hades85, ich glaube dir ist nicht bewusst wie scanf funktioniert. Ich habe zwar lange kein c mehr geschrieben (arbeite nur noch mit c#) aber der rückgabe wert von scanf ist die Anzahl an Parameter von scanf die Erfolgreich gefüllt wurde: http://www.cplusplus.com/reference/cstdio/scanf/

Egal wie groß die Zahlen sind, sie werden immer in e und in f gespeichert.

Warum sollte er bitte e und f mit <1 vergleichen?

Soweit ich dies beurteilen kann, sieht (2) korrekt aus. Wobei du vielleicht eher überprüfen solltest, ob der Rückgabewert von scanf != 2 ist. (Vorausgesetzt der Rückgabewert bei scanf funktioniert genauso in c wie in der reference von c++ erwähnt). Du willst ja wahrscheinlich nur fortfahren, wenn erfolgreich 2 Zahlen eingegeben wurden. Und aufhören, sollte nur eine zahl eingegeben worden sein.
 
scanf gibt die Anzahl der erfolgreichen Umwandlungen an. Sprich wenn ich 2 Zahlen eingebe, kriege ich als Wert 2 zurückgegebn. Wenn ich "5 ABC" eingebe, kriege ich eine 1. Bei "ABC 5" kriege ich eine 0 zurückgegeben, da schon bei ABC abgebrochen wird. Wenn ich 2 Zahlen größer 0 eingebe, werden die Zahlen in e und f gespeichert.

Müsste es also so sein:
if(scanf(....) !=2) ?

Danke an Saiker
 
Jo, schon zu lange her in C.

Ich habe gedacht er will verhindern dass eine Div durch null stattfindet.

Sorry
 
Ich würde noch das ganze unter dem if in einen else Zweig stecken, dann musst du bei falscher Eingabe nicht das ganze Programm beenden sondern kannst einfach 2 neue Zahlen einlesen.

Code:
int main(void)
{
  
	while(1)  //(1)
	{
		printf("Geben Sie 2 Zahlen ein");
		
		int e;
		int f;
		if(scanf("%d %d", &e,&f) != 2)  //(2)
		{
			printf("Fehler bei scanf");
			//return 1;
		} else {
			int result = division(e,f);
			printf("Das Ergebnis lautet: %d \n",result); //Und ausgeben
		}
	}
	return 0;
}

Edit: Achja und auf division durch 0 solltest du evtl auch noch prüfen ;)
 
Zuletzt bearbeitet:
Zurück
Oben