Ein kleines Problem mit C

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
T1mor
Beiträge: 2
Registriert: Do Jul 07, 2016 1:41 pm

Ein kleines Problem mit C

Beitrag von T1mor » Do Jul 07, 2016 1:50 pm

Hey, ich bin noch ein ziemlicher Anfänger in C und hoffe, dass ihr eine Lösung für mein Problem habt.

Ich habe versucht ein Programm zu schreiben, welches immer wieder den Benutzer auffordert einen Text einzugeben um ihn danach einfach wieder ausgibt. Das ganze funktioniert auch beim ersten Durchlauf. Dann aber springt es direkt wieder ans Ende und ich habe keine Möglichkeit überhaupt ein zweites Mal den Text einzugeben. Hoffe das war verständlich, was ich für ein Problem habe. Vielleicht habt ihr ja eine Idee, wie das zu beheben ist.

Code: Alles auswählen

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

int main()
{
    char satz[100];
    int eingabe;

    do{
    printf("Bitte geben Sie einen Satz ein:\n");
    gets(satz);
    printf(">%s<",satz);
    printf("\nDer Satz lautet:\n%s", satz);

    printf("\nWollen Sie das Programm wiederholen?(1)\nOder beenden? (0)");
    scanf("%i", &eingabe);
    }while(eingabe != 0);
    return 0;
}
Und dies zeigt mir die Eingabeaufforderung an:

Bitte geben Sie einen Satz ein:
Test
>Test<
Der Satz lautet:
Test

Wollen Sie das Programm wiederholen?(1)
Oder beenden? (0) 1
Bitte geben Sie einen Satz ein:
><
Der Satz lautet:

Wollen Sie das Programm wiederholen?(1)
Oder beenden? (0)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Ein kleines Problem mit C

Beitrag von Xin » Do Jul 07, 2016 6:36 pm

T1mor hat geschrieben:Hey, ich bin noch ein ziemlicher Anfänger in C und hoffe, dass ihr eine Lösung für mein Problem habt.
Es gibt eine Lösung für Dein Problem und einen Hack.

Fangen wir mit dem Hack an:

Code: Alles auswählen

do
{
    printf("Bitte geben Sie einen Satz ein:\n");
    gets(satz);
    printf(">%s<",satz);
    printf("\nDer Satz lautet:\n%s", satz);

    printf("\nWollen Sie das Programm wiederholen?(1)\nOder beenden? (0)");
    scanf("%i", &eingabe);

    /* Die Eingabe ist hier 0 (oder) 1 und dann Return. Im Eingabe-Stream steckt also noch das Return-Zeichen. */

    getchar();      // Return-Zeichen aus stdin rausholen
}
while(eingabe != 0);
Wenn das Return-Zeichen noch im Eingabe-Stream liegt und Du rufst gets() auf, erkennt gets, dass die Zeile leer ist, schließlich liest es als erstes ein Return-Zeichen.

Das ist der Hack.

Nun die Lösung zu Deinem Problem: Nutze eine brauchbare Lib. NCurses oder eine GUI.
Wenn Du Eingaben zum Üben brauchst, nimm Programmparameter:

Code: Alles auswählen

meinprogramm "MeinText"
Du benutzt scanf() hier zu Übungszwecken. Übe anders. scanf() solltest Du niemals produktiv nutzen. Also brauchst Du scanf auch nicht zu üben.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

T1mor
Beiträge: 2
Registriert: Do Jul 07, 2016 1:41 pm

Re: Ein kleines Problem mit C

Beitrag von T1mor » Do Jul 07, 2016 7:20 pm

Vielen Dank! Hat mir sehr weiter geholfen.

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: Ein kleines Problem mit C

Beitrag von mfro » Mi Aug 03, 2016 8:29 pm

Ich glaub' da hat einer einen Bot freigeschaltet ...
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Ein kleines Problem mit C

Beitrag von Xin » Mi Aug 03, 2016 8:43 pm

mfro hat geschrieben:Ich glaub' da hat einer einen Bot freigeschaltet ...
Hier ist jeder gleich freigeschaltet zu posten. Es ist aber ungewöhnlich, dass ein Bot durch die Anmeldung durchkommt, die ist nämlich definitiv nicht Standard.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten