fgets() falsch angewandt

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Robocop1
Beiträge: 24
Registriert: Mo Dez 07, 2020 3:59 pm

fgets() falsch angewandt

Beitrag von Robocop1 » 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.

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

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

Re: fgets() falsch angewandt

Beitrag von Xin » Sa Apr 24, 2021 9:19 am

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;
    }
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