Domanda da Principiante nabbo su linguaggio C

di il
24 risposte

Domanda da Principiante nabbo su linguaggio C

Salve a tutti, quella che sto per farvi è una domanda mooooolto principiante quindi munitevi di pazienza

é vero che nel linguaggio C le variabili di tipo "char" possono essere soltanto una per far funzionare un codice?

ad esempio, se io volessi fare: char a,b,c,d; il programma mi leggerebbe soltanto la lettera 'a'

Chiedo conferma da chi è più esperto di me

24 Risposte

  • Re: Domanda da Principiante nabbo su linguaggio C

    Nel tuo post ci sono una serie d'imprecisioni. Con ordine: una variabile di tipo char può contenere al massimo un valore di tipo char, che di solito è un intero senza segno da 8 bit (quindi 256 valori diversi). I 256 valori corrispondono di solito alla tabella ASCII Estesa.
    "Far funzionare un codice" è una frase che non si può sentire: se il programmatore sa quello che fa, il codice farà quello che deve fare. Le variabili di tipo char, come tutte le altre, possono essere quante si vuole, al limite si consulta il manuale tecnico del compilatore per sapere i limiti (a un certo punto lo spazio di allocazione finisce): ovviamente ogni variabile deve avere nome diverso oppure uno scope diverso.
    Infine, nel caso di
     char a,b,c,d;
    il programma non leggerebbe niente: si limiterà ad allocare spazio per quattro variabili di tipo char, di cui nulla sappiamo dell'utilizzo.
    Ti consiglio una lettura di un buon manuale di programmazione per principianti.
  • Re: Domanda da Principiante nabbo su linguaggio C

    L' ho già letto tutto il libro per principianti, ma mi sono accorto alla fine che sono state saltate di proposito tante cose specifiche come questa.

    Allora cerco di spiegarmi meglio nonostante la mia attuale inesperienza:

    Se io scrivo char a,b,c,d; senza inizializzare nessuna variabile e successivamente metto uno scanf per ogni variabile in modo che si abbia un comportamento diverso*, o comunque separato, per ognuna di loro.

    la mia domanda è: il programma che viene compilato è in grado di riconoscere queste variabili come distinte tra di loro? O me ne viene riconosciuta soltanto una?

    P.S.: nel mio caso non mi serve sapere che il valore delle "char" possa essere tradotto in ASCII

    * - per comportamento diverso intendo "se faccio scanf con 'a' ad esempio mi stampa il printf riferito ad 'a' e se faccio scanf con 'b' mi stamperà il printf riferito ad 'b', ecc..ecc..
  • Re: Domanda da Principiante nabbo su linguaggio C

    Quale sarebbe l'utilità di un compilatore che tratta come uguali due variabili che hai dichiarato distintamente?

    scanf() accetta un puntatore. Non gliene frega nulla di dove punta, dovrai essere tu a passargli &a o &b eccetera

    printf() è un altra funzione ancora e non può sapere se è stata chiamata una scanf() prima oppure no
  • Re: Domanda da Principiante nabbo su linguaggio C

    Weierstrass ha scritto:


    Quale sarebbe l'utilità di un compilatore che tratta come uguali due variabili che hai dichiarato distintamente?

    scanf() accetta un puntatore. Non gliene frega nulla di dove punta, dovrai essere tu a passargli &a o &b eccetera

    printf() è un altra funzione ancora e non può sapere se è stata chiamata una scanf() prima oppure no
    quindi è vero che il compilatore li tratterebbe come se vedesse una sola variabile? o per trattare in egual modo intendi dire che il loro scopo è quasi identico?
  • Re: Domanda da Principiante nabbo su linguaggio C

    No, assolutamente falso. Sono quattro variabili diverse e avrai contenuti diversi.
  • Re: Domanda da Principiante nabbo su linguaggio C

    Deimos84 ha scritto:


    Weierstrass ha scritto:


    Quale sarebbe l'utilità di un compilatore che tratta come uguali due variabili che hai dichiarato distintamente?
    quindi è vero che il compilatore li tratterebbe come se vedesse una sola variabile?
    Come hai fatto a fare quella deduzione errata da quello che ho scritto?
  • Re: Domanda da Principiante nabbo su linguaggio C

    Perchè non sentendoci di persona tendo a dare diverse interpretazioni di quello che si intende.

    Ad ogni modo incollo qui un codice MOLTO spartano, incompleto e con qualche errore, ma serve per darvi un' idea di quello che vorrei sapere riguardo alla mia domanda principale e iniziale.
    {
        int i, x, y, n;
        char a, c, b;
        y = 2;
        n = 5;
        puts("Scegli il tipo di problema:\n");
        puts("AREA = a\t" "PERIMETRO = b\t\t" "CIRCONFERENZA = c\n");
        scanf("%c", &b);
        if (scanf("%c", &a))
        {
          scanf("%d", &x);
            y = y * x;
              
                printf("L' area del....e': %d\n", y);
              
            
        }
         else if(scanf("%c", &b))
         {
                 scanf("%d", &x);
                 n = n + x;
                   printf("Il risultato e': %d\n", n);
              
             }
         }
  • Re: Domanda da Principiante nabbo su linguaggio C

    oregon ha scritto:


    No, assolutamente falso. Sono quattro variabili diverse e avrai contenuti diversi.
    Grazie
  • Re: Domanda da Principiante nabbo su linguaggio C

    Ma cosa ti aspetti che succeda (cosa pensi che significhi)

    if (scanf("%c", &a))

    o

    if(scanf("%c", &b))

    ??
  • Re: Domanda da Principiante nabbo su linguaggio C

    oregon ha scritto:


    Ma cosa ti aspetti che succeda (cosa pensi che significhi)

    if (scanf("%c", &a))

    o

    if(scanf("%c", &b))

    ??
    scritto così in effetti non succede nulla, o meglio, viene "attivata" solo una variabile. Quello che tentavo di creare inizialmente è di consentire all' utente di digitare una lettera della tastiera che sarebbe corrisposta alla lettera della variabile, ad esempio volevo che nel primo scanf ci fosse da premere il tasto A sulla tastiera in correlazione appunto della variabile A, stessa cosa per B. In questo modo avrei ottenuto un programma che fa scegliere all' utente il tipo di azione da intraprendere. Purtroppo ho scoperto poi che non si poteva, o perlomeno, non con questa tecnica.
    Tuttavia poi mi sono chiesto: non è che sia anche per il fatto che il compilatore è come se considerasse solo la prima variabile?
  • Re: Domanda da Principiante nabbo su linguaggio C

    Quello che vuoi fare tu c'è sicuramente scritto in un libro di testo e si può fare così
    
    #include <stdio.h>
    int main(){
        char in;
        do{
            printf("Premi il tasto A oppure il tasto B\n");
            scanf(" %c", &in);
            if(!(in == 'A' || in == 'B' || in == 'a' || in == 'b'))
                printf("Input rifiutato\n");
        }while(!(in == 'A' || in == 'B' || in == 'a' || in == 'b'));
        if(in == 'A' || in == 'a'){
            printf("Azione A\n");
        }
        else if(in == 'B' || in == 'b'){
            printf("Azione B\n");
        }    
        return 0;
    }
    
    scanf() funziona così
    https://www.cplusplus.com/reference/cstdio/scanf
  • Re: Domanda da Principiante nabbo su linguaggio C

    Ripeto: piglia un libro for dummies e ricomincia da capo. Oppure iscriviti a un qualche corso on-line con video (sempre "for dummies").
    Quello snippet di codice non farà mai quello che vuoi perché non è così che funziona la programmazione in generale. Il compilatore non c'entra niente, otterresti lo stesso risultato con praticamente tutti i linguaggi di programmazione.
    La scanf è una funzione definita così:
    int scanf ( const char * format, ... );
    Cioè si aspetta una descrizione di formattazione, poi una serie di variabili passate per riferimento. La scanf legge da standard input, e a seconda dello schema di formattazione mette quello che arriva nelle variabili. Noterai che la funzione è definita int, quindi, al termine della sua esecuzione, ritornerà un valore intero, che corrisponde al numero di elementi riempiti. In sostanza,
    if (scanf("%c", &a))
    se premi un qualunque tasto sarà vera ed eseguirà il codice.
    Quello che vuoi fare tu è una cosa del tipo
    scanf("%c", &a);
    if (a == 'a'){
    ...
    }else if (a == 'b'){
    ...
    }else if (a == 'c'){
    ...
    }else {
    	printf("Scelta non valida!\n");
    }
  • Re: Domanda da Principiante nabbo su linguaggio C

    Andrea Quaglia ha scritto:



    Quello che vuoi fare tu è una cosa del tipo
    scanf("%c", &a);
    if (a == 'a'){
    ...
    }else if (a == 'b'){
    ...
    }else if (a == 'c'){
    ...
    }else {
    	printf("Scelta non valida!\n");
    }
    esatto! Vorrei poter fare questo tipo di codice.
  • Re: Domanda da Principiante nabbo su linguaggio C

    Weierstrass ha scritto:


    Quello che vuoi fare tu c'è sicuramente scritto in un libro di testo e si può fare così
    
    #include <stdio.h>
    int main(){
        char in;
        do{
            printf("Premi il tasto A oppure il tasto B\n");
            scanf(" %c", &in);
            if(!(in == 'A' || in == 'B' || in == 'a' || in == 'b'))
                printf("Input rifiutato\n");
        }while(!(in == 'A' || in == 'B' || in == 'a' || in == 'b'));
        if(in == 'A' || in == 'a'){
            printf("Azione A\n");
        }
        else if(in == 'B' || in == 'b'){
            printf("Azione B\n");
        }    
        return 0;
    }
    
    scanf() funziona così
    https://www.cplusplus.com/reference/cstdio/scanf
    Ecco, ad esempio nel libro che ho studiato NON c'era la parola chiave "in" (come const, e altre ancora...) o magari sono più avanti nella sezione del C++
Devi accedere o registrarti per scrivere nel forum
24 risposte