Seite 1 von 1

fgets() falsch angewandt

Verfasst: Fr Apr 23, 2021 10:00 pm
von Robocop1
Hi,

habe unter der "char word[80]"-Deklaration statt einem scanf, die Funktion fgets() versucht, um seeehr lange Eingaben zu unterdrücken die bei scanf möglich wären. Es funktioniert aber nicht.

Habe Manuals bereits durchgelesen bzw. div. yt-Videos: https://www.proggen.org/doku.php?id=c:lib:stdio:fgets

Code: Alles auswählen

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

int main()  {

    //Declaring char-variable with max. lengt of 80 (indices)
    char word[80];
    fgets(word, 80, stdin);
    
    //For count from RHS, deduct 1 since strlen respective "length" counts from 1 instead 0.
    int length = strlen(word); int palindrome = 1; int leftcount = 0; int rightcount = length - 1;

    //Increase word letter-count from LHS, decrease word letter-count from RHS
    while(leftcount < rightcount)   {
        
        //Terminate if-statement as soos as left- & rightcount do not return the same (letters are case-sensitive)
        if(word[leftcount] != word[rightcount]) {

            palindrome = 0;
            break;
        }
        leftcount++; rightcount--;
    }
    //If palindrome = 1, meaning entered word is a palindrome => print "palindrome"
    if(palindrome)
        printf("palindrome\n");
    //If palindrome = 0, meaning entered word is not a palindrome => print "palindrome"
    else
        printf("not a palindrome\n");

    return 0;
    }
Könnte mir jemand sagen, ob ich das fgets oben falsch anwende, denn bei sehr langen Eingaben inkl. Rufzeichen oder Dot-Zeichen ".", etc..
gibt der Compiler eine falsche Bewertung aus ==> bei Eingabe "OttO" oder "HannaH", meint er das sei kein Palindrom, obwohl es eines ist.

Danke!
LG

Re: fgets() falsch angewandt

Verfasst: Sa Apr 24, 2021 9:19 am
von Xin
Robocop1 hat geschrieben:
Fr Apr 23, 2021 10:00 pm
Hi,

habe unter der "char word[80]"-Deklaration statt einem scanf, die Funktion fgets() versucht, um seeehr lange Eingaben zu unterdrücken die bei scanf möglich wären. Es funktioniert aber nicht.
Frage?
Robocop1 hat geschrieben:
Fr Apr 23, 2021 10:00 pm
Könnte mir jemand sagen, ob ich das fgets oben falsch anwende, denn bei sehr langen Eingaben inkl. Rufzeichen oder Dot-Zeichen ".", etc..
gibt der Compiler eine falsche Bewertung aus ==> bei Eingabe "OttO" oder "HannaH", meint er das sei kein Palindrom, obwohl es eines ist.
Wenn Du Fragen an Dein Programm hast, frag es doch mal, was es da eigentlich tut und ob das Deiner Erwartung entspricht.

Ich hab mal ein paar printf reingestreut. Schau doch mal, ob die Ausgaben Deinen Erwartungen entsprechen.

Code: Alles auswählen

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

int main()  {

    //Declaring char-variable with max. lengt of 80 (indices)
    char word[80];
    fgets(word, 80, stdin);
    
    //For count from RHS, deduct 1 since strlen respective "length" counts from 1 instead 0.
    int length = strlen(word); int palindrome = 1; int leftcount = 0; int rightcount = length - 1;
    printf( "Length: %d\n", length );
    //Increase word letter-count from LHS, decrease word letter-count from RHS
    while(leftcount < rightcount)   {
        
        printf("%d:%c(%d) != %d:%c(%d)\n", leftcount, word[leftcount], word[leftcount], rightcount, word[rightcount], word[rightcount]);
        
        //Terminate if-statement as soos as left- & rightcount do not return the same (letters are case-sensitive)
        if(word[leftcount] != word[rightcount]) {

            palindrome = 0;
            break;
        }
        leftcount++; rightcount--;
    }
    //If palindrome = 1, meaning entered word is a palindrome => print "palindrome"
    if(palindrome)
        printf("palindrome\n");
    //If palindrome = 0, meaning entered word is not a palindrome => print "palindrome"
    else
        printf("not a palindrome\n");

    return 0;
    }