Programm speichert String-Werte in Endlosschleife



  • N'Abend zusammen.
    Ich habe ine Programm geschrieben mit dem eine Zeichenfolge eingegeben werden soll. Dabei werden alle ausgegeben Ziffern bis zur 9. ausgegeben. Die drüber liegenden nicht. Diese werden seperat ausgegeben. Auch wird gezählt wie viele Großbuchstaben und wie viele Zahlen sich darin befinden.

    So, dieser Prozess soll in einer Endlosschleife laufen (;;)

    Wenn ich aber im 2ten Durchlauf wieder eine Zeichenfolge eingebe wird die Anzahl der Großbuchstaben und Zahlen die vorher rauskamen zu den neuen Werten dazu addiert. Also ist das wohl im Speicher iwie...

    Weiß jmd wie ich das verhindern kann?

    Hier der Code:

    #include <stdio.h>           // Bibliothek fuer printf, scanf, ...
    #include <conio.h>           // Bibliothek fuer getch, gets, ...
    
    char string[100]={'\0'};
    char inlay[11], overlay[91];							//
    int i, j, k, anzahl = 0, grossbuchstabe = 0, zahl = 0;				//Deklaration i, j, k, anzahl, grossbuchstabe, zahl zunächst auf 0
    
    int main(void)
    {
    
    	for (;;)														//Endlosschleife ;;
    	{
    
    	printf("Bitte geben Sie eine Zeichenfolge ein: ");
    	scanf("%s", &string);											//Ein String soll eingegeben werden.
    
    		for (j=0; j<=9; j++)
    		{
    			inlay[j] = string[j];
    		}
    	inlay[10]='\0';
    
    	printf("Der gespeicherte String ist %s.", inlay);
    
    			for (i=0; string[i]!='\0'; i++)									// \0 Endmakierung des Strings.
    			{
    				if (string[i]>='A' && string[i]<='Z')	grossbuchstabe++;	// Eingrenzung für Großbuchstaben
    				if (string[i]>='0' && string[i]<='9')	zahl++;				// Eingrenzung für Zahlen
    				anzahl++;
    			}
    
    			for (k=0; k<=anzahl-10; k++)
    			{
    			overlay[k] = string[k+10];
    			}
    	overlay[k+1]='\0';
    
    	printf("\nDie eingegebene Folge enth\x84lt %d Zeichen.", i);
    	printf("\nDer Zeichen wurden abgeschnitten: %s", overlay);
    	printf("\nDie Folge enth\x84lt %d Ziffern und %d Grossbuchstaben.\n\n", zahl, grossbuchstabe);
    	//printf("\nAnzahl: %d", anzahl);								// Anzahl aller eingegebenen Ziffern.
    
    	}
    
    	getch();
    
    	return 0;
    }
    


  • Du musst grossbuchstabe und zahl nicht nur bei der Definition initialisieren sondern auch bei jedem Schleifendurchlauf.
    Am besten nach dem for( ;; )

    Und in der ctype.h gibt es die Funktionen isupper() und isdigit(). Schau sie dir mal an.



  • Ups xD
    Stimmt 😃 Wieso bin ich da nciht sleber draufgekommen xD
    Setzte das ja alles = 0 xD
    Okay vielen Dank.

    Ja, aber den ctype sollen wir nicht benutzen -.-


Anmelden zum Antworten