do-while schleife (brauche hilfe)

swerflash

Mitglied
Hallo,
ich habe dieses Program geschrieben, das nicht so richtig klappt

#include <stdio.h>
#include <conio.h>

void main()
{
int A;
char Taste;


do
{
printf("geben Sie eine Zahl ein:\n");
A=getch();
putch(Taste);

A++;
printf("Ihre Zahl betraegt jetzt %d\n",A);
printf("j macht +1, n macht Ende\n");
Taste=getch();

}

while(Taste=='j'||Taste=='n');
if(Taste=='j')
do
{
A++;
printf("Ihre Zahl betraegt jetzt %d\n",A);
printf("j macht +1, n macht Ende\n");
Taste=getch();

}while(Taste=='j'||Taste=='n');
{
if(Taste=='n')
return;
}
}



so meine Fragen sind:

Warum reagiert er nicht auf j und n wie ich in der IF anweisung geschrieben habe
Warum schreibt er wenn ich zb 5 eingebe 56 und nicht 6?



Also ich wollte eigentlich folgendes machen, ich gebe eine Zahl ein, der macht diese Zahl +1 >>> A++
Wenn er das gemacht hat, fragt er mich ob ich j oder n drücken will, wenn ich j drücke vergrößert er die Zahl wieder um 1 und wenn nein, dann beendet er das Program.

Kann mir jemand bitte helfen und sagen warum das nicht klappt?

Danke im Voraus

MFG
swerflash
 
swerflash hat gesagt.:
void main()
{
int A;
char Taste;

do
{
printf("geben Sie eine Zahl ein:\n");
A=getch();
putch(Taste);

A++;
printf("Ihre Zahl betraegt jetzt %d\n",A);
printf("j macht +1, n macht Ende\n");
Taste=getch();

}

while(Taste=='j'||Taste=='n');
if(Taste=='j')
do
{
A++;
printf("Ihre Zahl betraegt jetzt %d\n",A);
printf("j macht +1, n macht Ende\n");
Taste=getch();

}while(Taste=='j'||Taste=='n');
{
if(Taste=='n')
return;
}

}

Ok, ich versuch es mal. Gehen wir von oben nach unten die fett markierten Stellen durch:

getch() liest meines Wissens nach einen character aus, deshalb wird scheinbar der Ascii-Code bei printf("Ihre Zahl betraegt jetzt %d\n",A); ausgegeben.

putch() kenne ich nicht, ich verstehe auch nicht, was du dort genau bezwecken willst. Das j und n liest du ja erst später aus.

Wenn du while(Taste=='j'||Taste=='n'); machst, ist es ja klar, das er immer wieder eine Zahl abfragt, solange j oder n gedrückt werden. So kann man ja nicht aus der Schleife raus (ausser mit irgendeinem anderen Buchstaben).
Hier würde ein while( Taste=='j' ); reichen. Dann würde aber auch immer wieder nach der Zahl gefragt werden, was du ja nicht bezwecken willst.
Deshalb solltest du die Abfrage nach der Zahl von der Erhöhungsschleife trennen.

Da du aus der Schleife nie rauskommst, kommst du auch nie zur if-Abfrage.


Überhaupt ist dein Quellcode recht wirr, z.B. warum du die letzte if-Abfrage in { Klammern } geschrieben hast, verstehe ich nicht.

Naja, vielleicht konntest du ein wenig mit meinen Erläuterungen anfangen (ich bin nicht der beste Erklärer :p ). Wenn nicht, hier eine funktionierende Version:

Code:
#include <stdio.h>
#include <conio.h> //ermöglicht getch()

void main()
{
int A;
char Taste='j';
	
	printf("Bitte geben Sie eine Zahl ein:\n");
	scanf("%d",&A); //Zahl einlesen

	do
	{
		A++; //Zahl erhöhen
		printf("\nIhre Zahl betraegt jetzt %d\n",A);
		printf("j macht +1, n macht Ende\n");
		Taste=getch();
	}
	while(Taste=='j');

        if(Taste!='j') 
	{
		printf("\nDanke, das Sie das Programm benutzt haben.\nProgramm wird beendet.\n");
		return;
	}
}



Duddle
 
ok danke hat geholfen ich habe jetzt mein program verbessert, klapt aber nicht so wie ich will


Code:
#include <stdio.h>
#include <conio.h> //ermöglicht getch()

void main()
{
int A;
char Taste='j';
	
	printf("Bitte geben Sie eine Zahl ein:\n");
	scanf("%d",&A); //Zahl einlesen

	do
	{
		A++; //Zahl erhöhen
		printf("\nIhre Zahl betraegt jetzt %d\n",A);
		printf("j macht +1, n macht Ende\n");
		Taste=getch();
		do
		{
			Taste=getch();
		}
		while(Taste=='n'&&Taste=='N'&&Taste=='j'&&Taste=='J');

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

		if(Taste=='n') 
	{
		printf("\nDanke, das Sie das Programm benutzt haben.\nProgramm wird beendet.\n");
		return;
	}
}


Also wenn ich andere Taste als J oder N drücke dann geht der raus aus dem Program, ich will aber dass er diese Tasten ignoriert und keinen Befehl ausführt wenn ich andere taste als J oder N drücke. Und noch eine Frage, warum muss ich bei meinem Program 2xN oder 2XJ drücken, damit er die ausführt?

Ich danke im Voraus

MFG
swerflash
 
Code:
while(Taste=='n'&&Taste=='N'&&Taste=='j'&&Taste=='J')

Mach aus den && mal || , ich glaube, danach sollte es richtig funktionieren.
Da ja die Tasten nicht alle gleich sein können...

Cya
-Perry-
 
Hallo,
wenn ich so mache, dann reagieren taste J und N danach überhaupt nicht...

Hat jemand noch Vorschläge?

Danke im Voraus

MFG

swerflash
 
Also irgentwie sieht mir die Bedingung der Schleife ein wenig zu komisch aus.
Der dürfte sie eigentlich garnicht verlassen,ausser wenn du eine andere Taste als
n oder j drückst.

Lass diesen Block mal aus und verwandel ihn in eine if- Abfrage

Code:
             do
		{
			Taste=getch();
		}
		while(Taste=='n'&&Taste=='N'&&Taste=='j'&&Taste=='J');

Machst du zu:

Code:
do{
      Taste = getch();
       if(taste == 'n' || taste == 'N')
          break;
       if(taste == 'j' || taste == 'J'){
          A++; //Zahl erhöhen
		printf("\nIhre Zahl betraegt jetzt %d\n",A);
		printf("j macht +1, n macht Ende\n");
        }
}while(true);



Das ganze Prog sollte dann so aussehen:

Code:
#include <stdio.h>
#include <conio.h> //ermöglicht getch()

void main()
{
int A;
char Taste='j';
	
	printf("Bitte geben Sie eine Zahl ein:\n");
	scanf("%d",&A); //Zahl einlesen

      do{
         Taste = getch();
         if(taste == 'n' || taste == 'N')
              break;
         if(taste == 'j' || taste == 'J'){
              A++; //Zahl erhöhen
	      printf("\nIhre Zahl betraegt jetzt %d\n",A);
	      printf("j macht +1, n macht Ende\n");
         }
       }while(true);

		printf("\nDanke, das Sie das Programm benutzt haben.\nProgramm
                         wird beendet.\n");
		return;
	}
}


So dürfte alles klappen.
Ich habe es aber nicht überprüft!

Cya
-Perry-
 
Zuletzt bearbeitet:
swerflash hat gesagt.:
Code:
#include <stdio.h>
#include <conio.h> //ermöglicht getch()

void main()
{
int A;
char Taste='j';
	
	printf("Bitte geben Sie eine Zahl ein:\n");
	scanf("%d",&A); //Zahl einlesen

	do
	{
		A++; //Zahl erhöhen
		printf("\nIhre Zahl betraegt jetzt %d\n",A);
		printf("j macht +1, n macht Ende\n");
		Taste=getch();
		do
		{
			Taste=getch();
		}
		while(Taste=='n'&&Taste=='N'&&Taste=='j'&&Taste=='J');

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

		if(Taste=='n') 
	{
		printf("\nDanke, das Sie das Programm benutzt haben.\nProgramm wird beendet.\n");
		return;
	}
}

1. warum muss ich bei meinem Program 2xN oder 2XJ drücken, damit er die ausführt?

2. ich will aber dass er diese Tasten ignoriert und keinen Befehl ausführt wenn ich andere taste als J oder N drücke

1. Weil du 2x nach einer Taste fragst (siehe fettgedruckt).

2. Dann musst du es anders aufziehen. Dann muss dem Programm gesagt werden, das es nur die Anweisung "Zahl erhöhen" ausführen soll, wenn j oder J gedrückt wird, bei n oder N soll es rausgehen. Ich hab's gerade so gelöst:

Code:
#include <stdio.h>
#include <conio.h>

void main()
{
int A;
char Taste='j'; //auf j damit die erste erhöhung auf jeden fall ausgeführt wird
	
	printf("Bitte geben Sie eine Zahl ein:\n");
	scanf("%d",&A);

	while(true) //unendlich schleife, da das programm mit dem return beendet wird
	{
		/*Anweisungen "erhöhen" bzw "Programm beenden" werden nur
		ausgeführt wenn j, J oder n, N gedrückt werden*/

		if(Taste=='j' || Taste=='J')
		{
			A++;
			printf("\nIhre Zahl betraegt jetzt %d\n",A);
			printf("j macht +1, n macht Ende\n");
		}

		Taste=getch();

		if(Taste=='n' || Taste=='N')
		{
			printf("\nDanke, das Sie das Programm benutzt haben.\nProgramm wird beendet.\n");
			return; //Alternativ auch break möglich, falls danach noch was gemacht wird
		}
	}
}


Hoffe ich konnte helfen.

Duddle
 
sorry es gibt doch ein kleines problem, wenn ich eine Zahl eingebe und dann Enter drücke, dann passiert nichts, er macht Enter am Anfang mit der Taste j oder J, wie kann man das ändern bzw verbessern?


hier ist nochmal das Programm

Code:
#include <stdio.h>
#include <conio.h> //ermöglicht getch()

void main()
{
int A;
char Taste;
   
   printf("Bitte geben Sie eine Zahl ein:\n");
   scanf("%d",&A); //Zahl einlesen

	  do{
		 Taste = getch();
		 if(Taste =='n'||Taste =='N')
			  break;
		 if(Taste =='j'||Taste =='J')
	   {
		  A++; //Zahl erhöhen
		 printf("\nIhre Zahl betraegt jetzt %d\n",A);
		 printf("j macht +1, n macht Ende\n");
		 }
	   }while(Taste=='j'||Taste=='J');

	  printf("\nDanke, das Sie das Programm benutzt haben.\nProgramm wird beendet.\n");
	  return;
}


Danke im Voraus

MFG
swerflash
 
Zurück