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

Stato
Discussione chiusa ad ulteriori risposte.

Vito-

Nuovo Utente
104
8
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-

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

DispatchCode

Moderatore
Staff Forum
1,360
999
CPU
Intel 1200 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
AOC C27g2u 165Hz
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
30Mbps/3Mbps con Eolo
OS
Windows 10 64bit
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-

Nuovo Utente
104
8
Non stai ascoltando i miei suggerimenti.
Ripeto: che succede quando digiti ‘A’. Non fare la prova, guarda il codice.
Passa all'else?
Post automatically merged:

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
1,360
999
CPU
Intel 1200 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
AOC C27g2u 165Hz
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
30Mbps/3Mbps con Eolo
OS
Windows 10 64bit
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-

Nuovo Utente
104
8
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
5,226
3,807
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-

Nuovo Utente
104
8
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
5,226
3,807
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.

Entra

oppure Accedi utilizzando

Discussioni Simili