Schleife gibt den ersten Character nichts aus
-
Hallo zusammen, ich bin gerade dabei ein Programm zu erstellen, bei dem der Benutzer seine ersten 6 Buchstaben seines Vor- und Nachnamens eingeben muss und der Vor- und Nachname anschließend rückwärts Buchstabe für Buchstabe ausgegeben wird. Das Problem was ich habe ist, dass der erste Buchstabe des Vornamens (also rückwärts gesehen dann der Letzte) nicht ausgegeben wird, obwohl beim Nachnamen keine Probleme zu sehen sind.
#include <stdio.h> main(){ char vor[6],nach[6]; int i,j; printf("Geben Sie Ihren Vornamen ein:\n"); scanf("%s",vor); printf("Geben Sie ihren Nachnamen ein:\n"); scanf("%s",nach); for(i=6;i>=0;i--){ printf("%c",vor[i]); } printf("\n"); for(j=6;j>=0;j--){ printf("%c",nach[j]); } }
Ich danke im Vorraus !
-
Deine Arrays haben 6 Einträge, diese werden in C mit den Indices 0 - 5 angesprochen.
Du benutzt in Deinen Schleifen jedoch Indices von 0 - 6 (in umgekehrter Reihenfolge zwar, aber Du benutzt auch den Index 6).
Das ist schon mal auf jeden Fall falsch.
Und so, wie Du das machst, ist nicht vorhersehbar, was passiert, wenn Du als Name oder Vorname mehr als 5 Zeichen eingibst, das führt dann nämlich zu undefiniertem Programmverhalten, weil in Deinen Arrays nur Platz für 5 Zeichen plus Stringendekennung ist.
Also:
Schleifen berichtigen, und nicht mehr als 5 Zeichen für die Namen verwenden!
-
@Belli Hat das Array nicht 7 verfügbare Stellen, wenn man doch sagt char vor[6] bedeutet das doch, dass es von 0 bis 6 geht also im Endeffekt 7 freie Stellen besitzt oder versteh ich da etwas falsch?
-
@djinn nein, es heißt, dass es ein Array der Größe 6 ist, die einzelnen Positionen ansprechbar mit [0] bis [5].
-
@djinn: s. z.B. Felder (engl.: arrays)
-
@Belli Ich hab die for Schleifen Anfangsbedingung nun verändert, jedoch wird der erste Buchstabe meines Vornamens trotzdem nicht ausgegeben (nach der Schleife dann der letzte):
for(i=5;i>=0;i--){ printf("%c",vor[i]); } printf("\n"); for(j=5;j>=0;j--){ printf("%c",nach[j]); }
-
Hast du denn auch maximal 5 Zeichen jeweils eingegeben (ansonsten ist es Undefiniertes Verhalten (UB))?
Um die Länge bei der Eingabe auf maximal 5 (+ automatisch eingefügtes Nullendezeichen) zu begrenzen:scanf("%5s",vor);
-
@Th69 Jetzt hats funktioniert, ich danke Dir !
-
@Belli sagte in Schleife gibt den ersten Character nichts aus:
...
Also:
Schleifen berichtigen, und nicht mehr als 5 Zeichen für die Namen verwenden!