# scanf fehler



## Preference (27. Dezember 2012)

Hallo.

ich muss für die uni ein programm schreiben und bin mir eig sicher das es klappen müsste, aber dem compiler sagt mir ständig das scanf ignoriert wird...
vlt könnt ihr mir ja sagen warum.

es ist noch nicht fertig.



> Warnung: Der Rückgabewert von »scanf«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]




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

int main()
{
	int a;
	int z1, z2, z3;

	do
	{
		printf("Programm zur Sortierung von Zahlen!\n");
		printf("-----------------------------------\n\n");

		printf("Bitte das Eingabeformat wählen!\n");
		printf("1 -- Dezimal ; 2 -- Oktal ; 3 -- Hexal\n");
		scanf("%d", &a);
	
		switch(a)
		{
			case '1':
				printf("Sie haben Dezimalzahlen ausgewählt!\n");
			break;
		
			case '2':
				printf("Sie haben Oktalzahlen ausgewählt!\n");
			break;

			case '3':
				printf("Sie haben Hexadezimalzahlen ausgewählt!\n");
			break;
		
			default:
				printf("Sie haben eine falsche Auswahl getroffen! Bitte wiederholen!\n");
		}
	}while(a > 0 && a < 4);

	printf("----------------------------------\n");

	printf("Eingabe von Zahlenwerten!\n");
	printf("-------------------------\n\n");

	if (a == '1')
	{
		printf("Bitte geben sie den ersten Zahlenwert ein!\n");
		scanf("%9d",&z1);

		printf("Bitte geben sie den zweiten Zahlenwert ein!\n");
		scanf("%9d",&z2);

		printf("Bitte geben sie den dritten Zahlenwert ein!\n");
		scanf("%9d",&z3);
	}

/*	if (value == '2')
	{
		printf("Bitte geben sie den ersten Zahlenwert ein!\n");
		z1=getchar ();

		printf("Bitte geben sie den zweiten Zahlenwert ein!\n");
		z2=getchar ();

		printf("Bitte geben sie den dritten Zahlenwert ein!\n");
		z3=getchar ();
	}

	if (value == '3')
	{
		printf("Bitte geben sie den ersten Zahlenwert ein!\n");
		z1=getchar ();

		printf("Bitte geben sie den zweiten Zahlenwert ein!\n");
		z2=getchar ();

		printf("Bitte geben sie den dritten Zahlenwert ein!\n");
		z3=getchar ();
	}*/

	printf("\n\nAusgabe******\n\n");
	printf("%d , %d , %d ", z1,z2,z3);
}
```


----------



## ibafluss (27. Dezember 2012)

Es funktioniert auch. Der Compiler sagt dir nur, dass der RÜCKGABEWERT von scanf() (die Anzahl der übergebenen Variablen, die erfolgreich beschrieben wurden) ignoriert wird. Du könntest zum Beispiel schreiben:


```
int a, rgw;
rgw = scanf ("%d", &a);
```

Wenn die Eingabe erfolgreich war, steht in a die eingegebene Zahl und in rgw steht 1 weil eben eine Zahl eingegeben wurde. Der Rückgabewert von scanf() wird eigentlich sehr oft ignoriert, warscheinlich hast du in deinem Compiler irgendeine Option aktiviert, damit du, wenn der Rückgabewert ignoriert wird, eine Warnung bekommst.
Du machst also auf jeden Fall nichts Böses 
Du müsstest noch sagen welchen Compiler/welche Entwicklungsumgebung du nutzt, wenn du wissen möchtest, wie du die Meldungen deaktivierst.

Lg


----------



## Preference (27. Dezember 2012)

danke erstmal^^

und ich benutze anjuta^^ hab ich heute endeckt und gefällt mir eig ganz gut


----------



## ibafluss (28. Dezember 2012)

Schau die Seite hab ich gefunden: http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
Da steht du müsstest in den Compiler Optionen die Option "-Wno-unused-result" aktivieren, dann bekommst du die Warnungen nicht mehr.

Lg


----------



## deepthroat (30. Dezember 2012)

Hi.

In dem Fall ist es aber gar keine gute Idee die Warnung einfach zu ignorieren bzw. gar zu unterdrücken.

Der Compiler hat nämlich recht und macht auf einen Programmierfehler aufmerksam.

Ohne den Rückgabewert zu prüfen, kannst du ja gar nicht wissen, ob der Benutzer überhaupt etwas eingegeben hat bzw. ob der Benutzer etwas anderes als eine Dezimalzahl eingegeben hat.

Deshalb sollte man _immer_ den Rückgabewert prüfen und entsprechend reagieren bevor man mit dem Wert der Eingabevariablen weiter arbeitet.


----------

