Pagina 2 di 3 PrimaPrima 123 UltimaUltima
Risultati da 11 a 20 di 26

Discussione: Programmare in C++

  1. #11

    Predefinito

    Allora, intanto grazie per il chiarimento sui float. In particolare, non sapevo dei problemi che si possono creare andando ad uguagliare dei float.

    Darkito, il programma che hai modificato contiene un paio di righe in più. In pratica se inizializzo a zero i parametri e poi faccio assumere loro il valore inserito dall'utente non rischio errori?

    Un'ultima cosa per quanto riguarda gli \n all'interno di una scanf.
    La maggior parte di voi ritiene siano inutili e per il 90% dei casi potrei essere d'accordo.

    Se notate, la scanf sui caratteri in cui volevo inserire uno \n è la seconda che si incontra nel codice scritto da me. Prima di quella c'è una scanf su un numero intero inserito dall'utente. Durante questa prima scanf, l'utente inserisce il numero ma preme anche Invio. Nella standard input del computer entrano sia il valore intero inserito, sia il carattere invio. Proprio questo carattere Invio potrebbe causare un problema in una seconda scanf dedicata ai caratteri (come accade nel mio caso), poiche questa seconda scanf andrebbe a leggere non "q" per terminare, ma ciò che nella standard input lo precede, ovvero l'Invio inserito dall'utente nella prima scanf. Inserendo una \n nella seconda scanf risolveremmo il problema. Ma perchè qui invece non serve?

    Ora per semplificare vi mostro un codice che senza una \n in una seconda scanf per caratteri genererebbe un piccolo problema (provate a togliere \n):
    #include <stdio.h>
    #include <iostream>
    int main () {
    float a, b;
    char operation;
    int ok=1;

    printf("Inserire i valori a e b:\n");
    scanf("%f%f", &a, &b);

    do {printf("Indacare l'operazione da eseguire (+,-,*,/):\n");
    scanf("\n%c", &operation);
    if (operation=='+') ok=0;
    if (operation=='-') ok=0;
    if (operation=='*') ok=0;
    if (operation=='/') ok=0;
    } while(ok);

    switch(operation){
    case '+': printf("%f+%f=%f\n", a, b, a+b);
    break;
    case '-': printf("%f-%f=%f\n", a, b, a-b);
    break;
    case '*': printf("%f*%f=%f\n", a, b, a*b);
    break;
    case '/': printf("%f/%f=%f\n", a, b, a/b);
    break;
    default: printf("Operazione non riconosciuta.\n");
    }
    system("pause");

    return 0;
    }
    @Vaan: no, non ancora.
    Ultima modifica di Archie Hicox; 01-11-2010 alle 11:45

  2. #12
    A morte i camperoni! L'avatar di Darkito
    Data Registrazione
    Sat May 2006
    Località
    Catania
    Messaggi
    4,083

    Predefinito

    Riguardo alla tua prima domanda no, non rischi errori perch&#232; &#232; vero che inizializzi a zero entrambe per&#242; con il primo scanf fai assumere sia a max che a min lo stesso valore. Dopo per&#242; entri nel ciclo do while e sicuramente qualsiasi valore che inserirai sar&#224; o maggiore del primo inserito e quindi verr&#224; modificata la variabile max, oppure minore del primo e in questo caso verr&#224; modificata la variabile min.

    Riguardo a \n si utilizza nella scanf per escludere il carattere invio quando acquisisci un carattere subito dopo aver acquisito un qualsiasi altro dato da tastiera. Mentre nel primo caso a te va bene che il carattere invio battuto durante l'acquisizione di val venga letto da scanf("%c",&fine) in modo da "saltare" l'acquisizione della variabile fine, nel secondo esempio non puoi farne a meno perch&#232; devi necessariamente leggere un carattere e non vuoi saltare quell'acquisizione. Lo so di non essere abbastanza chiaro ma per comprenderlo al meglio devi aver ben presente come funziona la funzione scanf e come vengono memorizzati nel buffer della tastiera i caratteri da te digitati.


    Max Pezzali Mania
    ---> http://www.maxpezzalimania.it

  3. #13

    Predefinito

    Citazione Originariamente Scritto da Darkito Visualizza Messaggio
    Riguardo alla tua prima domanda no, non rischi errori perchè è vero che inizializzi a zero entrambe però con il primo scanf fai assumere sia a max che a min lo stesso valore. Dopo però entri nel ciclo do while e sicuramente qualsiasi valore che inserirai sarà o maggiore del primo inserito e quindi verrà modificata la variabile max, oppure minore del primo e in questo caso verrà modificata la variabile min.

    Riguardo a \n si utilizza nella scanf per escludere il carattere invio quando acquisisci un carattere subito dopo aver acquisito un qualsiasi altro dato da tastiera. Mentre nel primo caso a te va bene che il carattere invio battuto durante l'acquisizione di val venga letto da scanf("%c",&fine) in modo da "saltare" l'acquisizione della variabile fine, nel secondo esempio non puoi farne a meno perchè devi necessariamente leggere un carattere e non vuoi saltare quell'acquisizione. Lo so di non essere abbastanza chiaro ma per comprenderlo al meglio devi aver ben presente come funziona la funzione scanf e come vengono memorizzati nel buffer della tastiera i caratteri da te digitati.
    Mmm, credo di aver capito in linea di massima. Nel primo caso, lo \n non è necessario, poichè non sappiamo se l'utente vuole inserire un ulteriore val o terminare il programma inserendo il carattere q.
    Nel secondo caso invece l'utente deve per forza inserire uno dei 4 caratteri (+,-,*,/) e quindi \n diventa necessario.

    Bè grazie mille credo di aver risolto la maggior parte dei miei dubbi.
    Se qualcuno notasse qualcosa di strano nei codici o nei ragionamenti lo faccia notare senza problemi.

  4. #14
    Senior Member L'avatar di Smallman_647
    Data Registrazione
    Tue Apr 2010
    Località
    Manfredonia(FG)
    Messaggi
    5,592

    Predefinito

    Citazione Originariamente Scritto da The Prince Visualizza Messaggio
    Mmm, credo di aver capito in linea di massima. Nel primo caso, lo \n non &#232; necessario, poich&#232; non sappiamo se l'utente vuole inserire un ulteriore val o terminare il programma inserendo il carattere q.
    Nel secondo caso invece l'utente deve per forza inserire uno dei 4 caratteri (+,-,*,/) e quindi \n diventa necessario.

    B&#232; grazie mille credo di aver risolto la maggior parte dei miei dubbi.
    Se qualcuno notasse qualcosa di strano nei codici o nei ragionamenti lo faccia notare senza problemi.
    Secondo me nel caso in cui l'utente sceglie /(la divisione), devi mettere la condizione che b deve essere diverso da 0.

    E poi non capisco perch&#232; inizialiazzi ok=1; perch&#232; scrivi "while(ok)"? forse volevi scrivere while(ok==0)?
    Ultima modifica di Smallman_647; 01-11-2010 alle 14:20

    perchè lo hai detto tu che sei ogni sapiente

  5. #15
    A morte i camperoni! L'avatar di Darkito
    Data Registrazione
    Sat May 2006
    Località
    Catania
    Messaggi
    4,083

    Predefinito

    Citazione Originariamente Scritto da Smallman_647 Visualizza Messaggio
    Secondo me nel caso in cui l'utente sceglie /(la divisione), devi mettere la condizione che b deve essere diverso da 0.

    E poi non capisco perchè inizialiazzi ok=1; perchè scrivi "while(ok)"? forse volevi scrivere while(ok==0)?
    Certo, quando ci sono le divisioni si deve sempre evitare che si faccia una divisione per zero, il controllo è d'obbligo.
    Riguardo a come utilizza la variabile ok, lui ha deciso di fare in quel modo, si poteva fare anche continuando il loop fino a che ok==0, ovviamente cambiando inizializzazione di ok e tutto quello che ci sta dentro il ciclo. L'algoritmo non è uno solo, bensì ci sono infiniti modi per realizzare un programma.


    Max Pezzali Mania
    ---> http://www.maxpezzalimania.it

  6. #16
    Senior Member L'avatar di Smallman_647
    Data Registrazione
    Tue Apr 2010
    Località
    Manfredonia(FG)
    Messaggi
    5,592

    Predefinito

    Citazione Originariamente Scritto da Darkito Visualizza Messaggio
    Certo, quando ci sono le divisioni si deve sempre evitare che si faccia una divisione per zero, il controllo è d'obbligo.
    Riguardo a come utilizza la variabile ok, lui ha deciso di fare in quel modo, si poteva fare anche continuando il loop fino a che ok==0, ovviamente cambiando inizializzazione di ok e tutto quello che ci sta dentro il ciclo. L'algoritmo non è uno solo, bensì ci sono infiniti modi per realizzare un programma.
    No, intendevo che while(ok) a quale condizione corrisponde?

    perchè lo hai detto tu che sei ogni sapiente

  7. #17
    A morte i camperoni! L'avatar di Darkito
    Data Registrazione
    Sat May 2006
    Località
    Catania
    Messaggi
    4,083

    Predefinito

    Citazione Originariamente Scritto da Smallman_647 Visualizza Messaggio
    No, intendevo che while(ok) a quale condizione corrisponde?
    ah....corrisponde a while(ok!=0)


    Max Pezzali Mania
    ---> http://www.maxpezzalimania.it

  8. #18
    Unforeseen Consequences L'avatar di Albyx
    Data Registrazione
    Wed Jan 2009
    Località
    Bologna
    Messaggi
    5,051

    Predefinito

    Approfitto del topic.
    C'&#232; un modo per sapere (sempre in C) il numero di righe di un file di testo?

  9. #19
    coffeecoffeecoffeecoffeec L'avatar di Black Ghost
    Data Registrazione
    Sat Feb 2007
    Località
    クィーン・デキム
    Messaggi
    12,356

    Predefinito

    Citazione Originariamente Scritto da Albyx Visualizza Messaggio
    Approfitto del topic.
    C'è un modo per sapere (sempre in C) il numero di righe di un file di testo?
    File di testo o testo del programma?

    stupid sexy greedo butt


  10. #20
    Unforeseen Consequences L'avatar di Albyx
    Data Registrazione
    Wed Jan 2009
    Località
    Bologna
    Messaggi
    5,051

    Predefinito

    Citazione Originariamente Scritto da Black Ghost Visualizza Messaggio
    File di testo o testo del programma?
    File di testo .txt esterno.

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •