2 Programme in einer main.c ausführen

#1
Hallo,

ich bin C-Einsteiger und wollte mal für mich selbst, abseits von dem Buch "C Programmieren von Anfang an" von Helmut Erlenkötter, ein Programm schreiben, in dem ich unter 2 Programmen per Eingabe auswaehlen, und dieses auch ausfuehren kann.

Beide Programme für sich alleine funktionieren ohne Probleme, ich kann auch beide Programme nacheinander in der main() ausführen.
Wenn ich aber meine main so gestalte, dass ich per Eingabe das Programm auswählen möchte, wird das gewählte Programm im ersten Eingabeschritt (in diesem Fall gets(satz)) übersprungen. Leider verstehe ich noch nicht so recht warum das passiert und hoffe, dass man mir hier weiter helfen kann.

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

beispiel01()
{
    int anzahl = 0;
    int i = 0;
    int laenge = 0;
    char bst;
    char satz[80];
    printf("\n\tB u c h s t a b e n z a e h l e r\n");
    printf("\nBitte geben Sie einen Satz ein\n> ");
    gets(satz);
    printf("\nWelchen Buchstaben innerhalb dieses Satzes moechten Sie zaehlen?\n>");
    scanf("%c",&bst);
    laenge = strlen(satz);
    while(satz[i]) {
        if(satz[i++] == bst)
            anzahl++;
    }
    printf("\nDer Buchstabe '%c' kommt im Satz %i mal vor.", bst, anzahl);
    printf("\nDer Buchstabe '%c' ist zu %i%% im Satz enthalten.\n", bst, 100/laenge*anzahl);
}


beispiel02()
{
    int i=0;
    char satz[100];
    printf("\nGeben Sie bitte einen Satz ein\n>");
    gets(satz);
    while(satz[i]) {
        if(satz[i] == ' ') {
            printf("\n");
        }
    printf("%c",satz[i]);
    i++;
    }
}

int main()
{
    int wahl=0;
    printf("Waehlen Sie ein Programm: \n");
    printf("\n 1 Buchstabenzaehler\n 2 1WortProZeile\n\n> ");
    scanf("%i",&wahl);
    if(wahl == 1)
        beispiel01();
    else if (wahl == 2)
        beispiel02();
    else
        printf("Falsche Eingabe!");
}

Schreibe ich stattdessen einfach nur "beispiel01();" bzw. "beispiel02();" in die main(), wird das jeweilige Programm korrekt ausgefuehrt.

Ich wuerde mich freuen, wenn mir da jemand erklaeren koennte, was da falsch laeuft. Ich vermute als C-Laie, dass durch die scanf-Einfabe in der main() eventuell etwas ueberschrieben wird!?
 
Zuletzt bearbeitet:
#3
Vielen Dank @BAGZZlash

...also war ich doch gar nicht so weit weg mit meiner Ueberlegung. Ich habe mal gehoert, dass man scanf sowieso nicht verwenden sollte. Ist das korrekt?

Denn dann werde ich bei dem Buch nicht mehr dem scanf-Befehl folgen, sondern mir gleich eine Alternative aneignen.
 
Oben