RISOLTO Esercizio Linguaggio C con Linux

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

NicoAlte99

Utente Attivo
Messaggi
361
Reazioni
28
Punteggio
39
Sto cercando di imparare alcuni comandi base del linguaggio c ma non riesco a terminare con successo questo esercizio di prova.
Il mio scopo è quello di creare un semplicissimo "Bancomat" con operazioni di prelievo e deposito ma non riesco a far funzionare quest'ultimo.
Linguaggio c.webp
Se premo il tasto 1 funziona tutto correttamente se premo 2 non va nulla. Dove ho sbagliato?
 
Non hai messo le parentesi graffe nelle istruzioni che devono essere eseguite nei test condizionali.
Nel linguaggio C, senza mettere parentesi viene eseguita solo l’istruzione seguente il IF, se il test è positivo.

PS questo non ha nulla a che vedere con Linux.

PPS usa il TAG Code per pubblicare il codice, come richiesto (e spiegato) nel regolamento di sezione.
 
Dove ho sbagliato?
parecchio pasticciato...
  • intanto quando posti qui dentro del codice di programmazione c'è un tag chiamato codice e dovresti farlo con quello
  • il messaggio è sbagliato "se vuoi prelevare premi 1 e se vuoi prelevare premi 2" non significa niente a parte che vuoi prelevare sia che se premi 1 che 2, magari se premi 2 vorresti depositare...
  • manca l'indentazione del codice
  • probabilmente mancano delle parentesi graffe che separano i blocchi logici delle operazioni
  • mancano tutti i commenti al codice, non si capisce nulla del significato delle variabili
 
Non hai messo le parentesi graffe nelle istruzioni che devono essere eseguite nei test condizionali.
Nel linguaggio C, senza mettere parentesi viene eseguita solo l’istruzione seguente il IF, se il test è positivo.

PS questo non ha nulla a che vedere con Linux.

PPS usa il TAG Code per pubblicare il codice, come richiesto (e spiegato) nel regolamento di sezione.
ok grazie e dove devo mettere le parentesi graffe? Mi scuso per la mancanza del codice ma non scrivo spesso qua. La prossima volta non ricapiterà.
 
ok grazie e dove devo mettere le parentesi graffe?
subito dopo gli if e alla fine di essi
esempio:
se premi 1 vuoi fare certe operazioni --> acquisire per esempio i soldi da prelevare e poi fare la sottrazione, sono 2 istruzioni da mettere in un unico blocco (in realtà dovresti prima controllare che il totale residuo è sufficiente al prelievo)
quindi
Codice:
if(1==b){
    istruzione1;
    istruzione2;
    ...
    istruzioneN;
}
 
subito dopo gli if e alla fine di essi
esempio:
se premi 1 vuoi fare certe operazioni --> acquisire per esempio i soldi da prelevare e poi fare la sottrazione, sono 2 istruzioni da mettere in un unico blocco (in realtà dovresti prima controllare che il totale residuo è sufficiente al prelievo)
quindi
Codice:
if(1==b){
    istruzione1;
    istruzione2;
    ...
    istruzioneN;
}
continua a non funzionare
Immagine 2022-07-09 190724.webp
 
continua a non funzionare
e tu continui a non usare il tag per il codice

premi qui, il menu si allargherà
01.png

poi premi qui
02.png

scegli il linguaggio di programmazione e copia-incolla il codice, non postare foto

ti ho pure postato come si fa, hai messo il punto e virgola immediatamente dopo la condizione dell'if, ma programmi da 1 giorno per caso?
 
ok grazie e dove devo mettere le parentesi graffe? Mi scuso per la mancanza del codice ma non scrivo spesso qua. La prossima volta non ricapiterà.
Visto che hai due if potresti mettere un if - else che fa la stessa cosa ma è più elegante.
Inoltre impara già da adesso che sei all'inizio a dare dei nomi significativi alle variabili, specie come in questo caso che ne hai dichiarate tante: a b c d e f g non significano niente, pensa invece quanto sarebbe più leggibile (e comprensibile) il codice se usassi nomi tipo prelievo, deposito, totale ecc.

Poi, come già ti è stato detto l'indentazione è fondamentale perché spesso ti aiuta a trovare errori a colpo d'occhio (tipo la mancanza delle graffe chiuse) che diversamente faresti molta più difficoltà ad individuare, specie quando avrai sottomano centinaia di righe di codice: è assolutamente impensabile scrivere in maniera non indentata.

Ultimo ma non meno importante: sei agli inizi no? Usa un IDE piuttosto che un semplice text editor, gli IDE ti aiutano molto nella correzione degli errori perché ti segnalano con precisione quasi tutto.
--- i due messaggi sono stati uniti ---
La sintassi è questa:

C:
if (condizione) {
   operazione1;
   operazione2;
   operazioneN;
}
else {
   operazione1;
   operazione2;
   operazioneN;
}
--- i due messaggi sono stati uniti ---
ma programmi da 1 giorno per caso?
Eh, se è agli if direi...
 
Ultima modifica:
Se sei interessato al linguaggio C ti consiglio la sua “Bibbia” :

È di facile lettura e ha esempi molto semplici.
Esiste anche una discussione a riguardo dei libri di testo consigliati, ma visto i problemi che sta avendo (non ti demoralizzare, è perfettamente normale per chi sia alle prime armi) io ti consiglio di partire con quello, gli autori sono quelli che hanno creato il linguaggio C, creato per scrivere il sistema operativo che stavano scrivendo (Unix).
 
  • Mi piace
Reazioni: BAT
Se sei interessato al linguaggio C ti consiglio la sua “Bibbia” :

È di facile lettura e ha esempi molto semplici.
Esiste anche una discussione a riguardo dei libri di testo consigliati, ma visto i problemi che sta avendo (non ti demoralizzare, è perfettamente normale per chi sia alle prime armi) io ti consiglio di partire con quello, gli autori sono quelli che hanno creato il linguaggio C, creato per scrivere il sistema operativo che stavano scrivendo (Unix).
Avrai senz'altro più esperienza e più conoscenze di me, e quindi non vorrei sembrare irriverente, però non gli consiglierei il manuale di riferimento. Perché? Io l'ho avuto, da principiante come lui, l'ho trovato troppo ostico, pochi esempi, spiegazioni troppo stringate.
Infatti poco dopo ho dovuto passare ai Deitel, ora non sto dicendo "o Deitel o niente per i principianti", andrebbe bene un qualunque manuale del C che abbia tanti esempi ed esercizi, basta però che non sia il manuale di riferimento. :)

A meno che il Kernighan e Ritchie sia cambiato così tanto negli ultimi 10 anni...in quel caso ritiro quanto detto.
 
Avrai senz'altro più esperienza e più conoscenze di me, e quindi non vorrei sembrare irriverente, però non gli consiglierei il manuale di riferimento. Perché? Io l'ho avuto, da principiante come lui, l'ho trovato troppo ostico, pochi esempi, spiegazioni troppo stringate.
Infatti poco dopo ho dovuto passare ai Deitel, ora non sto dicendo "o Deitel o niente per i principianti", andrebbe bene un qualunque manuale del C che abbia tanti esempi ed esercizi, basta però che non sia il manuale di riferimento. :)

A meno che il Kernighan e Ritchie sia cambiato così tanto negli ultimi 10 anni...in quel caso ritiro quanto detto.
Hai fatto bene a raccontare la tua esperienza (non c’è nulla di irriverente) infatti anche io dico sempre che occorre trovare il manuale giusto in base alle proprie conoscenze. Il mio è solo un suggerimento, tra tutti i manuali che ho letto (non solo C) ho sempre trovato il K&R tra i migliori. Ma se non funziona per noi, hai ragione su tutti i fronti, meglio provare altro. Io studiai il C dal suo inizio, primi anni 80, il K&R era l’unico testo a disposizione, in inglese, quindi non so cosa ci sia adesso.
 
C:
#include <stdio.h>



int main()
{
  
    char selezione;
    int somma_prelevata;
    int somma_depositata;
  


  
    printf("Benvenuto allo sportello automatico:\n se si desidera prelevare premere a\n se si desidera depositare premere b\n");

do
{

scanf("%c" , &selezione);


if(selezione == 'a')
{
    printf("Inserire la somma da prelevare\n");
  
    scanf("%d" , &somma_prelevata);
  
    printf("Hai prelevato: %d" , somma_prelevata);
  
    selezione = 'x'; 
}
else if(selezione  == 'b')
{
    printf("Inserire la somma da depositare\n");
  
    scanf("%d" , &somma_depositata);
  
    printf("Hai depositato: %d " , somma_depositata);
  
    selezione = 'x';
}
else
{
    printf("Si prega di premere a per Prelievo o b per Deposito\n");
  
}
}while(selezione != 'x');
}

Premetto che non sono un gran esperto di C me la cavo meglio con C++, comunque questo è pressapoco quello che vorresti fare tu, con qualche ritocco...unica pecca, non capisco come mai stampa 2 volte la riga interna all'else(quando premo un valore diverso da 'a' o 'b' dovrebbe restituirmi ilmessaggio all'interno dell'else, e solo che invede di stamparlo una sola volta, ne stampa 2) e non capisco dove sia l'errore. Utilizzando delle funzioni con C++ questo non accade...se riuscite a risolvere,fate un gran piacere anche a me. Grazie.
 
Tutta colpa dello scanf() usando il formato %c che legge solo UN carattere lasciando il ritorno nel buffet di input, che incasina poi le scanf() successive.
Dura da sistemare specie se si è all’inizio, ti consiglio di tornare a leggere la selezione come un numero ossia in formato %d
 
Tutta colpa dello scanf() usando il formato %c che legge solo UN carattere lasciando il ritorno nel buffet di input, che incasina poi le scanf() successive.
Dura da sistemare specie se si è all’inizio, ti consiglio di tornare a leggere la selezione come un numero ossia in formato %d
All'inizio avevo usato numeri interi ma ero incappato in un altro problema, avevo poi cambiato con i caratteri ma non aveva funzionato...dopo aver trovato un ulteriore soluzione ho per pigrizia lasciato il valore char...
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top