RISOLTO [C] Programma che salva in una tabella solo lettere minuscole

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.
No, il tuo codice è ancora sbagliato.
Il codice non va scritto a caso, provando finché funziona (o pare funzionare) bisogna pensarci su. Devi pensare cosa succede quando digiti un carattere giusto e uno sbagliato, e vedere cosa fa il tuo codice in quei casi, vedrai subito gli sbagli.
Sistemato cosi funziona

C:
#include <stdio.h>
#define N 100

int main()

{
    int i=0, arrayCaratteri[N];
    char carattere;

    printf("Inserire un carattere minuscolo per volta\n\n");
    scanf("%c", &carattere);

    while(carattere!='#' && i<N)
    {
        if(carattere<'a' || carattere>'z')
        {
            continue;
        }

        else
        {
            arrayCaratteri[i]=carattere;
            i++;
        }
        scanf("%c", &carattere);
    }

    for(int n=0;n<i;n++)
        printf("%c", arrayCaratteri[n]);

    return(0);
}
 
Al posto di continue ho messo questo, forse oraé giusto?
C:
printf("Il testo contiene un carattere non minuscolo");
 
Quel continue nel corpo è sbagliato, come fa notare Andretti: il continue salta alla condizione del ciclo, quindi non torni più alla lettura.

Puoi anche modificare la condizione, se non vuoi inserire messaggi (qui si, invertendola!):

C:
        if(carattere >='a' && carattere<='z')
        {
            arrayCaratteri[i]=carattere;
            i++;
        }

Ad ogni modo, se non ti fa fare ulteriore confusione, puoi anche fare direttamente:
C:
        if(carattere >='a' && carattere<='z')
            arrayCaratteri[i++]=carattere;
 
Non stai ascoltando i miei suggerimenti.
Ripeto: che succede quando digiti ‘A’. Non fare la prova, guarda il codice.
Passa all'else?
--- i due messaggi sono stati uniti ---
Quel continue nel corpo è sbagliato, come fa notare Andretti: il continue salta alla condizione del ciclo, quindi non torni più alla lettura.

Puoi anche modificare la condizione, se non vuoi inserire messaggi (qui si, invertendola!):

C:
        if(carattere >='a' && carattere<='z')
        {
            arrayCaratteri[i]=carattere;
            i++;
        }

Ad ogni modo, se non ti fa fare ulteriore confusione, puoi anche fare direttamente:
C:
        if(carattere >='a' && carattere<='z')
            arrayCaratteri[i++]=carattere;
meglio la prima che hai detto
 
Ahh, capito, quindi sarebbe togliere il continue e mettere un messaggio?
L'equivalente di togliere il continue è lasciare il corpo vuoto, non necessariamente il messaggio. Ma in un codice "normale" non si fa (mi correggo: non si dovrebbe fare) una cosa come quella... piuttosto si inverte la condizione, come ho fatto qui sopra.
 
L'equivalente di togliere il continue è lasciare il corpo vuoto, non necessariamente il messaggio. Ma in un codice "normale" non si fa (mi correggo: non si dovrebbe fare) una cosa come quella... piuttosto si inverte la condizione, come ho fatto qui sopra.
ok penso di aver capito. Ora dopo aver memorizzato i caratteri minuscoli li deve stampare traslati di 13, ho finito cosi. E` giuisto?

C:
#include <stdio.h>
#define N 100

int main()

{
    int i=0, arrayCaratteri[N];
    char carattere;

    printf("Inserire un carattere minuscolo per volta\n\n");
    scanf("%c", &carattere);

    while(carattere!='#' && i<N)
    {
        if(carattere>='a' && carattere<='z')
        {
            arrayCaratteri[i]=carattere;
            i++;
        }
        scanf("%c", &carattere);
    }

    for(int n=0;n<i;n++)
        printf("%c", arrayCaratteri[n]+13);

    return(0);
}
 
Dichiara il vettore come char invece di int, e non avrai bisogno di alcuna traslazione.
 
Perché leggi un char con il formato %c che è lo stesso che usi per stamparlo, perché quindi memorizzarlo in un vettore di int?
Sinceramente non capisco perché tu debba aggiungere 13 al codice ascii del carattere, a pensarci bene. Per esempio il carattere ‘z’ viene memorizzato come 122, aggiungi 13 e diventa 135, non si neanche che carattere possa stampare poiché essendo maggiore di 128 dipende dalla code page che si sta usando… ok la sto facendo troppo lunga…
 
Perché leggi un char con il formato %c che è lo stesso che usi per stamparlo, perché quindi memorizzarlo in un vettore di int?
Sinceramente non capisco perché tu debba aggiungere 13 al codice ascii del carattere, a pensarci bene. Per esempio il carattere ‘z’ viene memorizzato come 122, aggiungi 13 e diventa 135, non si neanche che carattere possa stampare poiché essendo maggiore di 128 dipende dalla code page che si sta usando… ok la sto facendo troppo lunga…
Eh infatti dovrebbe restare entro le 26 lettere minuscole ma non saprei come fare
 
Domanda: che succede se NON sommi 13? E perché mai hai deciso di sommare 13. Immetti la lettera a minuscola, cosa ti stampa?
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top