#include <stdio.h>
#include <string.h>      // Για strcspn και strlen

int main() {
    /* ----------------------------------------------------------
       ΒΗΜΑ 1: Δήλωση του πίνακα χαρακτήρων
       ----------------------------------------------------------
       Δηλώνουμε πίνακα 101 θέσεων:
         - 100 για τους χαρακτήρες που θα δώσει ο χρήστης
         - 1 για τον τερματικό χαρακτήρα '\0' που υποχρεωτικά
           μπαίνει στο τέλος κάθε string στη C
    */
    char str[101];
    int i;            // Μετρητής για τον βρόχο
    int length;       // Το μήκος του string

    /* ----------------------------------------------------------
       ΒΗΜΑ 2: Διάβασμα του αλφαριθμητικού από τον χρήστη
       ----------------------------------------------------------
       Χρησιμοποιούμε fgets αντί για scanf γιατί:
         (α) Διαβάζει ΟΛΟΚΛΗΡΗ τη γραμμή, ακόμη και με κενά
             (το scanf("%s", ...) σταματάει στο πρώτο κενό)
         (β) Είναι ΑΣΦΑΛΕΣ: δεν θα γράψει ποτέ πάνω από
             sizeof(str) bytes, άρα δεν έχουμε buffer overflow

       Παράμετροι fgets:
         - str        : πού να αποθηκευτεί το input
         - sizeof(str): μέγιστο πλήθος bytes (συμπεριλαμβανομένου του '\0')
         - stdin      : από πού να διαβάσει (πληκτρολόγιο)
    */
    printf("Δώσε ένα αλφαριθμητικό (μέχρι 100 χαρακτήρες): ");
    fgets(str, sizeof(str), stdin);

    /* ----------------------------------------------------------
       ΒΗΜΑ 3: Αφαίρεση του '\n' από το τέλος
       ----------------------------------------------------------
       Όταν ο χρήστης πατάει Enter, η fgets αποθηκεύει και τον
       χαρακτήρα newline '\n' μέσα στο string. Π.χ. αν δώσει
       "geia", το str θα περιέχει: 'g','e','i','a','\n','\0'

       Η strcspn(str, "\n") επιστρέφει τη θέση του πρώτου '\n'.
       Αντικαθιστώντας τη θέση αυτή με '\0', "κόβουμε" το string
       εκεί και το newline εξαφανίζεται.
    */
    str[strcspn(str, "\n")] = '\0';

    /* ----------------------------------------------------------
       ΒΗΜΑ 4: Υπολογισμός του μήκους
       ----------------------------------------------------------
       Η strlen(str) επιστρέφει πόσοι χαρακτήρες υπάρχουν πριν
       τον τερματικό '\0' — δηλαδή το πραγματικό μήκος του string,
       ΧΩΡΙΣ να μετράει το '\0'.

       Π.χ. για "geia" → strlen = 4
              θέσεις:  0  1  2  3   4
              χαρακτ:  g  e  i  a  '\0'
    */
    length = strlen(str);

    /* ----------------------------------------------------------
       ΒΗΜΑ 5: Εκτύπωση από το τέλος προς την αρχή
       ----------------------------------------------------------
       ΠΡΟΣΟΧΗ στους δείκτες:
         - Ο ΤΕΛΕΥΤΑΙΟΣ χαρακτήρας βρίσκεται στη θέση length-1
           (όχι length! γιατί στη θέση length υπάρχει το '\0')
         - Ο ΠΡΩΤΟΣ χαρακτήρας βρίσκεται στη θέση 0

       Άρα ξεκινάμε από i = length-1 και κατεβαίνουμε μέχρι i = 0.
       Η συνθήκη i >= 0 σταματάει τον βρόχο μόλις φτάσουμε στην αρχή.

       Σε κάθε επανάληψη, εκτυπώνουμε ΕΝΑ ΧΑΡΑΚΤΗΡΑ με %c
       (όχι %s που είναι για ολόκληρα strings).
    */
    printf("Αντίστροφα: ");
    for (i = length - 1; i >= 0; i--) {
        printf("%c", str[i]);
    }
    printf("\n");

    return 0;
}