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

Stato
Discussione chiusa ad ulteriori risposte.

Vito-

Utente Attivo
184
14
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);
}
 

Vito-

Utente Attivo
184
14
Al posto di continue ho messo questo, forse oraé giusto?
C:
printf("Il testo contiene un carattere non minuscolo");
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,208
1,845
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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;
 
  • Adoro
Reazioni: Andretti60

Vito-

Utente Attivo
184
14
Non stai ascoltando i miei suggerimenti.
Ripeto: che succede quando digiti ‘A’. Non fare la prova, guarda il codice.
Passa all'else?
Post unito automaticamente:

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
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,208
1,845
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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.
 
  • Mi piace
Reazioni: Vito- e Andretti60

Vito-

Utente Attivo
184
14
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);
}
 

Andretti60

Utente Èlite
6,440
5,091
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…
 

Vito-

Utente Attivo
184
14
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
 

Andretti60

Utente Èlite
6,440
5,091
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.

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili