C - Eingabe zur Wiederholung des Programms

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
ToastMario
Beiträge: 1
Registriert: Sa Feb 03, 2018 4:31 pm

C - Eingabe zur Wiederholung des Programms

Beitrag von ToastMario » Sa Feb 03, 2018 4:33 pm

Servus Leute,

ich habe ein Programm geschrieben und soweit funktioniert auch alles außer am Ende die Abfrage zur Wiederholung des Programms.

Gebe ich am Ende 'j' ein, springt der Cursor im Terminal lediglich eine Zeile nach unten ohne dass das Programm endet.
Zudem ist mir aufgefallen dass das Programm sich nur wiederholt, wenn ich eine gerade Anzahl an 'j' eingebe und bei einer ungeraden Anzahl, der Cursor nur nach unten springt und eine weitere Eingabe verlangt.
Ich möchte jedoch, dass lediglich nur ein 'j' vom Benutzer eingegeben werden muss.

Anbei der Code.

Ich hoffe ihr könnt mir helfen.
Vielen Dank im Voraus.

Code: Alles auswählen

// Potenzierer
// Aufg3-1

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

i main (void)
{
    int basis, nbasis, potenz, npotenz;
    char weiter;
    
    do
    {
        printf("\nPotenzierer\n\nBasis eingeben: ");
        scanf("%d", &basis);
        
        printf("\nPotenz >= 0 eingeben: ");
        scanf("%d", &potenz);
        
        if (potenz < 0)
        {
            do
            {
                printf("\nFalsche Eingabe!\nPotenz >= 0 eingeben: ");
                scanf("%d", &potenz);
            }
            
            while (potenz < 0);
        }
        
        if (potenz == 0)
        {
            printf("\n%d ^ %d = 1\n\n", basis, potenz);
        }
        
        else
        {
            nbasis = basis;
            npotenz = potenz;
            
            do
            {
                nbasis = nbasis * basis;
                npotenz = npotenz - 1;
            }
            
            while (npotenz != 1);
            
            printf("\n%d ^ %d = %d\n\n", basis, potenz, nbasis);
        }
        
        printf("\nMöchten Sie eine weitere Zahl potenzieren? (j/n) \n\n");
      
        do
        {
            scanf("%c", &weiter);
        }
        while ( getchar() != '\n' );
        
    }
    
    while (weiter == 'j' || weiter == 'J');
    
    return 0;
}

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: C - Eingabe zur Wiederholung des Programms

Beitrag von nufan » Sa Feb 03, 2018 6:46 pm

Hallo! :)
Gib dir doch mal den ASCII-Wert deiner "weiter"-Variable direkt vor der Überprüfung ("j"/"J") aus.

Code: Alles auswählen

    while ( getchar() != '\n' );
    printf("weiter: %d\n", weiter);
} while (weiter == 'j' || weiter == 'J');
Du wirst sehen, dass der Wert einem Newline entspricht. Warum das so ist, findest du in unseren FAQ:
https://www.proggen.org/doku.php?id=c:faq:input-puffer

Antworten