Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C] Dubbio su If e Scanf

    Salve a tutti mi sto da poco inserendo a programmare col linguaggio C.
    Adesso mi stavo esercitando facendo un programma che convertisse una lettera minuscola in una lettera maiuscola utilizzando a scelta i due rispettivi metodi: 1) tramite la funzione toupper() e 2) tramite un calcolo dei valori ASCII:

    Inizialmente avevo scritto una cosa simile:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
      int scelta;
      char min;
      char max;
      int scelta2;
      printf("Benvenuto!\n questo programma effettua il cambio da maiuscolo a miniscolo");
      printf("Puoi scegliere se utilizzare la funzione toupper o utilizzare un calcolo ASCII");
      printf("Digita 0 per la funzione toupper o 1 per la funzione ASCII, digita qualsiasi altra lettera per uscire dal programma");
     
      scanf("%d",&scelta);
      
      while(scelta==0 || scelta==1){
                       printf("Inserisci la lettera minuscola\n");
                       scanf("%c",&min);
    
                          if(scelta==0){
                           
                           printf("funzione toupper\n");
                           max=toupper(min);
                           printf("Il maiuscolo e'\n%c ",max);
                      }
                      else{
                           
                           max=min+'A'-'a';
                           printf("Il maiuscolo e'\n%c ",max);
                           
                      }
              scanf("%d",&scelta);             
    }
      
      
      system("PAUSE");	
      return 0;
    }
    Poi però mi sono accorto che mi saltava totalmente lo SCANF interno al while per la lettera minuscola...non so per quale motivo...e quindi sono stato costretto a mettere lo scanf della lettera minuscola esternamente al ciclo while..
    adesso non che mi interessi...però voglio sapere perchè internamente al ciclo while lo scanf non mi funziona...esternamente sì..

    spero che possiate essermi di aiuto e soprattutto che sono stato chiaro!
    grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466

    Re: [C] Dubbio su If e Scanf

    codice:
    if(scelta == 0 || scelta == 1)
    PS: a parte questo rivedi il tuo programma, una minuscola è semplicemente più grande di 32 rispetto a una maiuscola.

  3. #3
    non ho capito bene il discorso dell'if...potresti spiegarmelo?

    per quanto riguarda il discorso della maiuscola ti riferisci a questa istruzione immagino:
    max=min+'A'-'a';

    che posso opportunamente modificare utilizzando come hai detto tu il numero 32...
    ma ciò che mi preme è capire perchè lo scanf funziona fuori e dentro il while no....

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Scelta non l' hai inizializzato,il ciclo comincia se:
    codice:
    while(scelta==0 || scelta==1)
    Cioè se scelta è uguale a zero o se scelta è uguale a 1.
    Ma scelta non ha valore,l'hai dichiarato te con:
    codice:
    int scelta;
    Prova a dargli il valore 0.
    L' if è una condizione,eseguo l' istruzione se la condizione dentro l' if è verificata.
    Il while è come l' if ma si ripete finchè la condizione risulta vera.

  5. #5
    scelta non lho inizializzato volutamente in maniera tale che l'utente decide cosa fare..
    c'è uno scanf di scelta poco prima del while...
    ripeto il problema forse non sono stato chiaro..


    while(scelta==0 || scelta==1){
    printf("Inserisci la lettera minuscola\n");
    scanf("%c",&min);


    è qui il problema...esattamente nello scanf della variabile MIN. Se questo scanf è dentro il while...non appena eseguo il programma è come se lo ignora e non mi permette di digitare alcuna lettera minuscola costringendomi e farlo fuori dal while...

    voglio capire perchè mi fa questo problema

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Ah,ho capito.
    E' che devi pulire il buffer di input,ci sono vari metodi.
    O scrivi alla fine del ciclo:
    codice:
    while(getchar()!=10);
    Oppure a fine ciclo:
    codice:
    fflush(stdin);
    Io mi trovo meglio con fflush,ma sicuramente qualcuno ti dirà che è meglio usare il primo metodo.
    Non so dirti perchè.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Come indicato nel Regolamento interno il codice va postato all'interno degli appositi tag CODE (e non dei tag COLOR). Ho corretto il tuo primo post.

    In futuro, pensaci tu.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.