Warum wird mir keine Rückgabe wert angezeigt.

informatik123

Cadet 1st Year
Registriert
Mai 2022
Beiträge
9
Hallo zusammen,

ich bin gerade dabei einen Code zu programmieren mit dem man einen Palindrom aus einem erkennen kann oder nicht. Problem was ich habe ist das der Code nachdem ich einen Wort eingeben habe direkt zur ende springt und nichts weiter mehr macht. Vielleicht habt ihr einen oder zwei Hinweise was ich da besser machen könnte.

C:
#include <stdio.h>
#include <string.h>
#define _CRT_SECURE_NO_WARNINGS

int main()
{
    char wort[50];
    int i, flag = 1, len;


    printf("Geben Sie einen Wort ein: \n");
    scanf_s("%s", wort); // Warum muss ich undbedingt scanf_s und nicht einfach scanf nutzten und wieso wird mir
                         // trotzdem angezeigt obwohl ich #define _CRT_SECURE_NO_WARNINGS hinzugefügt habe.

    len = strlen(wort);

    for (i = 0; i < len; i++)
    {
        if(wort[i] == wort[len - i]);
        flag = 1;
        break;
    }
 
    if (flag)
    {
        printf("Das Wort ist ein Palindrom \n");
    }
        else
        {
       
            printf("Das ist kein Palindrom \n");

return = 0;
        }

}

Wie ihr schon im Code sehen könnt habe ich mein Problem schon etwas als Kommentar geschildert.


viele Grüße
Linas[/I]
 
Zuletzt bearbeitet:
Das dürfte sich doch gar nicht compilieren lassen mit dem großen I: wort
 
  • Gefällt mir
Reaktionen: kamanu
informatik123 schrieb:
soll das ein großes i sein in Zeile 19?
Außerdem hast du in Zeile 19 nach der if-Abfrage direkt ein Semikolon ;.

Die If Abfrage macht also nichts.
 
Wie @r0b0t schon schreibt soll das in Zeile 19 wohl eher
Code:
wort[i]
heißen. Wenn das dann soweit läuft, wirst du feststellen das dein Programm z.B. das Wort abbaaba als Palindrom erkennt. Was eindeutig keins ist.
 
Zeile 8.
Dein flag is immer 1, du setzt es nie auf 0 bei "falscher" Eingabe.
Solltest auch eher ein bool (true/false) dafür verwenden als ein int
 
  • Gefällt mir
Reaktionen: kamanu
C++:
if(wort[I] == wort[len - i]);
flag = 1;
break;

kann gar nichts werden.

Sorum machts eher Sinn:
C++:
bool isPalindrom = true; //statt    int flag

//Andres Zeug hier
//...

//for( blablabla )
{
    if(wort[i] != wort[len - i])
    {
        isPalindrom = false;
        break;
    }
}
Ergänzung ()

informatik123 schrieb:

Abgesehen davon ist das krumm, da dein User ja beliebig langen String eingeben kann.
Du verwendest ja offenbar C++ mit STL, also am besten statt char array nen std::string nehmen. Der kann dann (nahezu) beliebig lange Eingabe aufnehmen.

Ed: ah wait ja, stdio ist nicht STL.
 
Zuletzt bearbeitet:
@Powl_0 ich programmiere das ganze in C deshalb kann ich std::string nicht anwenden.

Ich habs außerdem es so geschrieben:

C:
    for (i = 0; i < len; i++)
    {
        if (wort[i] != wort[len - i])
        {
            isPalindrom = false;
            break;
        }

aber da komme ich nicht weiter.
Ergänzung ()

welchen Präprozessor kann ich für die boolsche Algebra verwenden?
 
Zuletzt bearbeitet:
Wenn Du nicht einen Uraltcompiler einsetzt muesste stdbool.h Dein Freund sein. Noch ein Kommentar zu sauberem programmieren. Wenn Du nicht weisst wieviele Schleifendurchlaeufe noetig sind waere ein ‘do…while’ deutlich eleganter als einen ‘for’ loop mit break abzubrechen, speziell wenn Du eh schon die noetige Pruefung drin hast. Deshalb gibt es die verschiedenen Iterationsmoeglichkeiten. Es gibt genug Menschen mit schlechtem Programmierstil, Du musst nicht unbedingt dazugehoeren wollen.
 
  • Gefällt mir
Reaktionen: mental.dIseASe, Backfisch und SaxnPaule
informatik123 schrieb:
aber da komme ich nicht weiter.
Weil?

Müsste das nicht auch
C:
wort[i] != wort[(len - 1) - i]
sein?
An Index len ist ja schon der string terminator, also 1 Stelle hinter dem letzten Buchstaben.
 
Zuletzt bearbeitet:
Zurück
Oben