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

int main() {
    /* ----------------------------------------------------------
       ΔΗΛΩΣΕΙΣ
       ----------------------------------------------------------
       - str[101]: 100 χαρακτήρες + 1 για '\0'
       - ch       : ένας χαρακτήρας (όχι string!)
       - length   : το μήκος του αλφαριθμητικού
       - count    : πόσες φορές βρέθηκε ο χαρακτήρας
       - i        : μετρητής βρόχου
    */
    char str[101];
    char ch;
    int length;
    int count = 0;
    int i;

    /* ==========================================================
       ΒΗΜΑ 1: Διάβασμα string με υποχρέωση μήκους ≥ 3
       ==========================================================
       Χρησιμοποιούμε do-while γιατί θέλουμε να εκτελεστεί
       ΤΟΥΛΑΧΙΣΤΟΝ ΜΙΑ ΦΟΡΑ το διάβασμα, και μετά να ελέγξουμε
       αν χρειάζεται επανάληψη.

       Με σκέτο while θα έπρεπε να βάλουμε αρχική ψεύτικη τιμή
       στο length — άσχημη λύση. Το do-while είναι το ιδανικό
       εργαλείο για "επανάλαβε μέχρι να ικανοποιηθεί η συνθήκη".
    */
    do {
        printf("Δώσε αλφαριθμητικό (τουλάχιστον 3 χαρακτήρες): ");
        fgets(str, sizeof(str), stdin);

        // Αφαίρεση '\n' που αφήνει η fgets — ΥΠΟΧΡΕΩΤΙΚΑ πριν
        // υπολογίσουμε το μήκος (αλλιώς το '\n' θα μετρηθεί
        // σαν χαρακτήρας και "ab" θα είχε μήκος 3, λάθος!)
        str[strcspn(str, "\n")] = '\0';

        // Τώρα παίρνουμε το πραγματικό μήκος
        length = strlen(str);

        // Μήνυμα προειδοποίησης αν είναι μικρό
        if (length < 3) {
            printf("  ⚠ Πολύ μικρό! Δώσε ξανά.\n");
        }
    } while (length < 3);
    // ↑ ο βρόχος επαναλαμβάνεται όσο length < 3
    //   σταματάει μόνο όταν length >= 3

    /* ==========================================================
       ΒΗΜΑ 2: Διάβασμα ενός μόνο χαρακτήρα
       ==========================================================
       Για να διαβάσουμε ΕΝΑΝ χαρακτήρα μετά από fgets, υπάρχει
       μια παγίδα: στον buffer του πληκτρολογίου μπορεί να έχουν
       μείνει χαρακτήρες (π.χ. ένα κρυφό '\n').

       Η λύση είναι το " %c" με ΚΕΝΟ πριν το %c.
       Το κενό λέει στη scanf: "αγνόησε όσα whitespace βρεις πριν
       φτάσεις στον επόμενο κανονικό χαρακτήρα". Έτσι ξεπερνάει
       οποιοδήποτε '\n', tab ή space που έχει μείνει.

       ΠΡΟΣΟΧΗ: ΧΩΡΙΣ το κενό, το scanf("%c", &ch) θα διάβαζε
       το '\n' και θα προχωρούσε χωρίς να ρωτήσει τον χρήστη!
    */
    printf("Δώσε χαρακτήρα προς αναζήτηση: ");
    scanf(" %c", &ch);

    /* ==========================================================
       ΒΗΜΑ 3: Μέτρημα εμφανίσεων του χαρακτήρα
       ==========================================================
       Διατρέχουμε το string με τον γνωστό μας τρόπο (μέχρι '\0',
       ή ισοδύναμα μέχρι i < length).

       Για κάθε χαρακτήρα, συγκρίνουμε με ==.
       ΘΥΜΗΣΟΥ: για ΧΑΡΑΚΤΗΡΕΣ χρησιμοποιούμε ==
                για STRINGS  χρησιμοποιούμε strcmp.
       Εδώ συγκρίνουμε str[i] (char) με ch (char), άρα == ΣΩΣΤΟ.
    */
    for (i = 0; i < length; i++) {
        if (str[i] == ch) {
            count++;
        }
    }

    /* ==========================================================
       ΒΗΜΑ 4: Εμφάνιση κατάλληλου μηνύματος
       ==========================================================
       Διαφορετικό μήνυμα για 3 περιπτώσεις:
         - 0  εμφανίσεις: "δεν υπάρχει"
         - 1  εμφάνιση :  "1 φορά"    
         - >1 εμφανίσεις: "Ν φορές"   

       
    */
    if (count == 0) {
        printf("Ο χαρακτήρας '%c' ΔΕΝ υπάρχει στο \"%s\".\n", ch, str);
    } else if (count == 1) {
        printf("Ο χαρακτήρας '%c' υπάρχει 1 φορά στο \"%s\".\n", ch, str);
    } else {
        printf("Ο χαρακτήρας '%c' υπάρχει %d φορές στο \"%s\".\n",
               ch, count, str);
    }

    return 0;
}