gets probleme (funktion)



  • Hallo Leute ich habe ein Problem mit gets !!!

    Wenn ich in einer Funktion versuche Strings über gets einzulesen dann passiert nicht 😞 😞 😞

    Hier ein teil des Codes:

    /* Programm mit Schleife Strings Funktion usw... */
    
    #include <stdio.h>
    #include <string.h>
    
    satzfunktion ()
    {
        int i, laenge, anzahl=0;
        double prozent;
        char satz [100];
    
        printf("\nBitte einen Satz eingeben:");
        fflush(stdout);
        gets(satz);
        laenge=strlen(satz);
    
        for(i=0;i < laenge; i ++)
        {
            if(satz[i] == 'e')
            anzahl ++;
        }
    
        prozent=100.0/laenge * anzahl;
    
        printf("\n%.2lf%% der Zeichen sind ein 'e'.\n\n",prozent);
    }
    
    satz25 () 
    {
        int i=0;
        char satz2[100];
    
        printf("\nGeben Sie eine Satz ein:\n");
        gets(satz2);
        while (satz2[i])
        {
            switch(satz2[i])
            {
                case' ':
                case',':
                case'.':
                case'?':
                case'!':
            break;
            default:
            printf("%c",satz2[i]);
            }
            i ++;
        }
    }
    

    Grüsse crasy Maschindriver

    😕 😕



  • Hi Crasy Maschindriver,

    der Funktion:

    char *gets( char *buffer )
    

    muss ein Zeiger auf den String übergeben werden.
    Normalerweise dürfte sich dein Code gar nicht compilieren lassen.
    Daher musst du die Funktion so verwenden:

    ...
    char satz [100];
    ...
    gets(&satz); // & ist hier das wichtige
    ...
    

    Sollte dann einwandfrei funktionieren.

    Bye Peter.



  • Käse ...

    Der Aufruf Deiner gets()-Funktion ist richtig! Arrays werden schon immer als Zeiger an Funktionen übergeben.

    Ist das Dein ganzes Programm, oder fehlt vielleicht die main() Funktion???



  • Nein das geht auch nicht hier ist der der ganze code (ist ne Aufgabe)

    /* Programm mit Schleife Strings Funktion usw... */
    
    #include <stdio.h>
    #include <string.h>
    
    /* Veranlasst langsamme Nullen und 1 die am Bildschirm vorbei sausen muss noch überarbeitet werden*/
    
    matrix()
    {
            int i;
    
            /*Hauptschleife die sich 10 mal wieder holt die geschachtelten Schleifen laufen allle nur einmal durch sie werden mit break abgebrochen*/
            for(i=0;i < 10; i ++)
            {
                    for (i = i; i <10;i ++)
                    {
                            sleep(1);/*wenn man sleep rausholt funktioniert nichts mehr*/
                            printf("0 ");
                            break;
                    }
    
                    for (i = i; i <10;i ++)
                    {
                            sleep(1);
                            printf("1 ");
                            break;
                    }
    
                    for (i = i; i <10;i ++)
                    {
                            printf("0 ");
                            break;
                    }
    
                    for (i=i;i <10;i ++)
                    {
                            sleep(1);
                            printf("1");
                            break;
                    }
    
                    for (i=i;i< 10;i ++)
                    {
                            printf(" 0 ");
                            break;
                    }
    
                    for (i = i; i <10;i ++)
                    {
                            sleep(1);
                            printf("1 ");
                            break;
                    }
    
                    for (i = i; i <10;i ++)
                    {
                            printf("0 1 0 1 1 0 1 0 0 1 0 1 0 1 0 0 1  01 1 0 1 0 0 1 0 1  ");
                            break;
                    }
    
                    for (i=i;i <10;i ++)
                    {
                            sleep(1);
                            printf("1");
                            break;
    
                    }
                    for (i=i;i< 10;i ++)
                    {
                            sleep(1);
                            printf(" 0\n");
                            break;
                    }
            }
    }
    
    /* Lässt nullen und 1 mit Topspeed über den Bildschirm sausen ist auch nicht das wahre*/
    
    schnelle_matrix()
    {
            int i;
    
            for(i=0;i <800; i++)
            {
                    printf("0101010101010101010101010010101010101010101010101010101010110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101 01010011010101001010110101010101010101010101010010101010110010101010101010100101\n");
            }
    }
    
    satzfunktion ()
    {
            int i, laenge, anzahl=0;
            double prozent;
            char satz [100];
    
            printf("\nBitte einen Satz eingeben:");
            gets(satz);
            laenge=strlen(satz);
    
            for(i=0;i < laenge; i ++)
            {
                    if(satz[i] == 'e')
                    anzahl ++;
            }
    
            prozent=100.0/laenge * anzahl;
    
            printf("\n%.2lf%% der Zeichen sind ein 'e'.\n\n",prozent);
    }
    
    satz25 ()
    {
            int i=0;
            char satz[100];
    
            printf("\nGeben Sie eine Satz ein:\n");
            gets(satz);
            while (satz[i])
            {
                    switch(satz[i])
                    {
                            case' ':
                            case',':
                            case'.':
                            case'?':
                            case'!':
                    break;
                    default:
                    printf("%c",satz[i]);
                    }
                    i ++;
            }
    }
    
    geheime_funktion()
    {
            char geheim[7], passwort[80];
            int  versuch= 3;
    
            geheim[0]=109;
            geheim[1]=97;
            geheim[2]=114;
            geheim[3]=105;
            geheim[4]=111;
            geheim[5]=110;
            geheim[6]='\0';
    
            do
            {
    
                    printf("Login eingeben : ");
                    gets(passwort);
    
                    if(strcmp(geheim,passwort) == 0)
                    {
                            printf(" Login OK\n\a");
                            break;
                    }
                    else
                            printf("\nFalsch du doof\n");
                            versuch --;
            }
                    while (versuch < 0);
    }
    
    main ()
    {
            int i, wahl;
            float betrag;
            char geheim[7], passwort [80];
    
            geheim[0]=109;
            geheim[1]=97;
            geheim[2]=114;
            geheim[3]=105;
            geheim[4]=111;
            geheim[5]=110;
            geheim[6]='\0';
    
                    printf("\nLogin eingeben : ");
                    gets(passwort);
    
                    if(strcmp(geheim,passwort) == 0)
                    {
                            printf("\n\t                     Login OK\n\a");
                    }
                    else
                    {
                            printf("\n\t              Sie haben keine Zugriff Rechte\n\n\n");
                            exit(0);
                    }
    
    while (wahl != 0)
    {
    
            printf("\n________________________________________________________________________________");
            printf("\n\n");
            printf("\t_______________________________________________\n");
            printf("\t|    Programm mit verschiedenen Funktionen    |\n");
            printf("\t|_____________________________________________|\n");
    
            printf("\n\n Prozentanzahl der Satzzeichen 1                Die Matrix 8\n");
            printf("\n Satz Ausgabe ohne Leerzeichen 3                Ende 0\n");
            printf("\n Rechner von Euro in Dm 12\n\n");
    
            printf(" EINGABE:  ");
    
            scanf("%i",&wahl);
    
            switch(wahl)
            {
                    case 1:satzfunktion(); break;
                    case 5:matrix(); break;
                    case 8:schnelle_matrix(); break;
                    case 3:satz25(); break;
    
                    case 12:
                    printf("Betrag eingeben: ");
                    scanf("%f",&betrag);
                    printf("\n%.2f Euro sind %.2f D\nM",betrag,betrag * 1.95583);
                    break;
    
            }
    
    }
    
    }
    


  • @mady:
    Das mit der Arrayübergabe wusste ich nicht.
    Man lernt halt jeden Tag was neues 🙂

    Bye Peter.


Anmelden zum Antworten