# C - If - Anweisung - Buchstaben prüfen



## Go-Autoit (10. November 2011)

Hallo Tutorials.de,

ich habe wieder ein Problem mit einer If-Anweisung.
Wahrscheinlich beginnt mein Problem schon mit der Definition der Var. .

Aufgabe ist es, zu Fragen, ob der User weiter machen will oder nicht.
Ich habe das Ganze in eine While schleife gelegt und Frage den User nach einer belibigen Zahleingabe, ob er noch einmal möchte.

Wenn er verneint soll er in den Zweig mit break; gehen.

Ich schaffe es nicht die If-Anweisung richtig zu schreiben.

Wo liegt mein Fehler?
Danke euch.

Hier mein Code:

```
#include <stdio.h>


int main()
{

	//vars

	//double Zahl;
	double i=0;
	
	int Antwort;
	
	cstring endcheck;
	
	//int janein;

	while(1) 
	{

		printf("Bitte geben Sie eine ganze Zahl ein: ");	
		scanf("%d",&Antwort); 
		
		printf("Sie haben %.0f eingegeben.",(double)Antwort);


		//erster check auf Zahl

		if (scanf("%d",&Antwort) !=1)  	{
			printf("Sie haben keine ganze Zahl eingegben. ");	



		}
	
		fflush(stdin);

		printf("Möchten Sie noch einmal?");	
		scanf("%i",&endcheck); 

		if(endcheck !="n" && "N") {
			printf("Das Programm wird beendet.");	
			break;
		}





	}

	






	return 0;

}
```


----------



## FSA (10. November 2011)

Ähm ich bin mir nicht sicher aber: 
scanf("%i",&endcheck); 
 if(endcheck !="n" && "N") 

List doch nur eine Integer aus, oder?
also vll %s ?


----------



## sheel (10. November 2011)

Hi

Warum ist endcheck ein cstring? Ein char reicht doch auch.
Warum mischt du %i und %d?
Warum behandelst du ein int als double, nur um die Kommastellen wieder abzuschneiden?
Warum liest du ein int auf den Speicherplatz eines cstring?
fflush(stdin) ist schlecht.
In der letzten if-Bedingung überprüfst du entweder, ob endcheck falsch ist, oder ob
endcheck nicht "n" ist und "N" richtig ist. Du musst schon ein zweites == einbauen.

Code kommt verbessert, gleich...

```
#include <stdio.h>

int main()
{
	int antwort;
	char endcheck;

	do
	{
		printf("Bitte geben Sie eine ganze Zahl ein:\n");
		scanf("%d", &antwort);
		printf("Sie haben %d eingegeben.\n\n", antwort);

		fflush(stdin);
		//Eigentlich schlecht, aber sonst wirds wahrscheinlich unverständlich
		
		printf("Moechten Sie noch einmal?\n");
		scanf("%c", &endcheck);
	}while(endcheck == 'j' || endcheck == 'J');

	printf("Das Programm wird beendet.\n");
	return 0;
}
```


----------



## Go-Autoit (10. November 2011)

Super danke.
Ich bin reichlich verwirrt.

Nun muss ich noch die Eingaben kontrollieren.

Also bei der Zahleneingabe muss ich prüfen ob wirklich eine Zahl eigegeben wurde.
Wenn ein Text eigegeben wurde, soll die Meldung "Sie haben keine ganze Zahl eigegeben" kommen und der User  soll noch einmal gefragt werden, ob er eine neue Zahl eigeben möchte möchte.

Dies muss ich auch wieder auf Ja oder Nein prüfen.

Habt ihr Ideen oder Vorschläge?

Ich bin ziemlich neu auf dem Gebiet.

Danke euch.

Hier nochmal mein Versuch.

```
#include <stdio.h>


int main()
{

	//vars

	
	int antwort;
	char endcheck;
	


	do 
	{
		fflush(stdin);

		printf("Bitte geben Sie eine ganze Zahl ein:");	
		scanf("%d", &antwort); 
		
		printf("Sie haben %d eingegeben.", antwort);






		if (scanf("%d", &antwort) !=1)  	{
			printf("Sie haben keine ganze Zahl eingegben.\n");
		}

		else {
		
		fflush(stdin);

		printf("Möchten Sie noch einmal?");	
		scanf("%c", &endcheck); 
		}


	
	}while(endcheck == 'j' || endcheck == 'J');

	

	printf("Das Programm wird beendet.");	




	return 0;

}
```


----------



## sheel (10. November 2011)

Wieso machst du eigentlich so Riesenabstände zwischen den Codezeilen? :suspekt:

Und...du liest antwort ein, gibst aus "Sie haben ... eingegeben"
und liest antwort darunter wieder ein.

Und soll die Nocheinmal-Abfrage wirklich nur kommen, wenn eine gültige Zahl eingegeben wurde?


----------



## Go-Autoit (10. November 2011)

Ja richtig.
Da soll er prüfen, ob die Var. "Antwort" aus einer Zahl oder Text besteht.
Wenn Text dann " printf("Sie haben keine ganze Zahl eingegben.\n"); "   etc.

Die nocheinmal-Abfrage soll immer kommen bis der User mit Nein Programm beendet.


----------



## sheel (10. November 2011)

Dir scheint aber nicht bewusst zu sein, dass du zweimal eine Tastatureingabe verlangst
und nur die zweite prüfst.

Und zur nochmal-Abfrage: Wenn sie unabhängig von der Zahl kommen soll,
warum schreibst du sie in das else?


```
#include <stdio.h>
 
int main()
{
    int antwort;
    char endcheck;
 
    do
    {
        printf("Bitte geben Sie eine ganze Zahl ein:\n");
        if(1 == scanf("%d", &antwort))
            printf("Sie haben %d eingegeben.\n\n", antwort);
        else
            printf("Das war keine ganze Zahl.\n\n", antwort);

        fflush(stdin);
        //Eigentlich schlecht, aber sonst wirds wahrscheinlich unverständlich
        
        printf("Moechten Sie noch einmal?\n");
        endcheck = getchar();
    }while(endcheck == 'j' || endcheck == 'J');
 
    printf("Das Programm wird beendet.\n");
    return 0;
}
```


----------



## FSA (10. November 2011)

@sheel
Ich weiß nicht ob er schon verschachtlungen hatte  Mach doch {}


----------



## sheel (10. November 2011)

Verschachtelungen?


----------



## FSA (10. November 2011)

if(1 == scanf("%d", &antwort))
            printf("Sie haben %d eingegeben.\n\n", antwort);
if(1 == scanf("%d", &antwort)) {
            printf("Sie haben %d eingegeben.\n\n", antwort);
}
 Vll heißt es auch anderst ich kenne es als Verschachtlung


----------



## sheel (10. November 2011)

Ach so, versteh was du meinst.
Wenn das noch nicht bekannt ist, wird es eben jetzt gelernt 
Man sieht ja doch recht deutlich, wo der "Block" anfangt und aufhört.


----------

