Programma switch case

di il
26 risposte

Programma switch case

Salve a tutti, ho un problema con un programma, che apparentemente esce, quindi funziona, pero lo fa quando gli pare: a volta funziona, altre no, ecc,ecco il codice:
main()
{
      int v[10];
      int i,j,t;
      int flag=0;
      
      
      printf("\n");
      int operazione;
     
      while(flag==0){
                     
      printf("inserisci opzione 1 per cominciare :");
      scanf("%d",&operazione);
      printf("\n");
     
                        printf("\n");
      switch(operazione){
                         case 1:
                              printf("inserici valori:");
                              for(i=0;i<10;i++){
                              scanf("%d",&v[i]);
                              }
                              case 2:
                                    for(i = 0; i<10; i++){
                                                    for(j =0; j<10-i; j++){
                                                          if(v[j]>v[j+1]){
                                                                           t = v[j];
                                                                           v[j] = v[j+1];
                                                                            v[j+1] = t;
                                                                            }
                                                                            }
                                                                            }
                                                                            printf("valore min:%d\n",v[0]);
                                                                            printf("\n");
                             case 3:
                                  for(i = 0; i<10; i++){
                                                    for(j = 0; j<10-i; j++){
                                                          if(v[j]<v[j+1]){
                                                                           t = v[j];
                                                                           v[j]= v[j+1];
                                                                            v[j+1] = t;
                                                                            }
                                                                            }
                                                                            }
                                                                            printf("valore max:%d\n",v[0]);
                                                                            printf("\n");
                                                                            break;
                         default :
                                 printf("valore errato , ripeti se vuoi:\n");
                                 }
                                 
                                 printf("inserisci 0 se vuoi continuare, 1 se lasciare:");
                                 scanf("%d",&flag);
                                 }
praticamente questo ripete ogni volta il caricamento del vettore e poi ogni volta vede il min e il max, solo che tipo dopo 2 volte che ripeto l operazione mi da il valore min dell operazione prima, mi spiego meglio:
inserisco per la prima volta i valori e il max e min sono: 3 e 100(giusto)
2^a volta : 4-103 (giusto)
3^ volta : 4- 607( sbagliato perche mi prende il valore min della seconda...)
non so perche faccia cosi, se potete aiutarmi, grazie

26 Risposte

  • Re: Programma switch case

    Il problema è che l'ordinamento è sbagliato. E COMUNQUE non si trova il minimo e il massimo in quel modo ... si fa con una semplice for.

    Ma il problema più grande è che non si capisce perché e come hai usato lo switch-case ...
  • Re: Programma switch case

    La dichiarazione "main()" anche se corretta è fuorviante.
    dopotutto stai studiando il "c for dev" e quindi Usa pure "main()"
    Se studiavi lo "standard c" ti avrei consigliato l'uso della più sicura chiamata "int main()" con return finale.
  • Re: Programma switch case

    oregon ha scritto:


    Il problema è che l'ordinamento è sbagliato. E COMUNQUE non si trova il minimo e il massimo in quel modo ... si fa con una semplice for.

    Ma il problema più grande è che non si capisce perché e come hai usato lo switch-case ...

    lo switch case mi sembra corretto; so come si trova anche il min e max in quel modo, ma volevo farlo cosi, non mi sembra sia sbagliato il ragionamento, e poi il bubble perche è sbagliato? non trovo l errore
  • Re: Programma switch case

    oregon ha scritto:


    Il problema è che l'ordinamento è sbagliato. E COMUNQUE non si trova il minimo e il massimo in quel modo ... si fa con una semplice for.

    Ma il problema più grande è che non si capisce perché e come hai usato lo switch-case ...

    edit : ho risolto seguendo il tuo consiglio, ho tolto tutto il bubble e l ho fatto con un for, ecco:
    #include<stdio.h>
    #include<stdlib.h>
    
    main()
    {
          int v[10];
          int i;
          int min,max;
          int flag=0;
          
          
          printf("\n");
          int operazione;
         
          while(flag==0){
                         
          printf("inserisci opzione 1 per cominciare :");
          scanf("%d",&operazione);
          printf("\n");
         
                            printf("\n");
          switch(operazione){
                             case 1:
                                  printf("inserici valori:");
                                  for(i=0;i<10;i++){
                                  scanf("%d",&v[i]);
                                  }
                                  case 2:
                                       min=v[0];
          for(i=1;i<10;i++){
                            if(v[i]<min){
                                         min=v[i];
                                         }
                                         }
                                         printf("minimo:%d",min);
                                                                                printf("\n");
                                 case 3:
                                       max=v[0];
          for(i=1;i<10;i++){
                            if(v[i]>max){
                                         max=v[i];
                                         }
                                         }
                                         printf("max:%d",max);
                                         
                                                                                printf("\n");
                                                                                break;
                             default :
                                     printf("valore errato , ripeti se vuoi:\n");
                                     }
                                     
                                     printf("inserisci 0 se vuoi continuare, 1 se lasciare:");
                                     scanf("%d",&flag);
                                     }
                                     system("pause");
                                     return 0;
                                     }
    lo switch-case funziona perfettamente, non mi da nessun problema? cosa non si capisce?
  • Re: Programma switch case

    lo switch-case funziona perfettamente, non mi da nessun problema? cosa non si capisce?
    In realtà non è un uso corretto del costrutto switch-case. Lo switch-case serve per scegliere una delle varie opzioni e non entrare alla prima e farle eseguire in sequenza. Ma non sembra che sia quello che vuoi fare, quindi togli lo switch che è inutile.
    
    switch(operazione){
         case 1:
         ...
         break;
    
         case 2:
         ...
         break;
    
         default:
         ...
         break;
    }
    
    Così andrebbe usato lo switch-case, ovvero se operazione vale 1 entra nel case 1, se operazione vale 2 entra nel case 2, altrimenti nel default.
  • Re: Programma switch case

    SVNiko ha scritto:


    lo switch-case funziona perfettamente, non mi da nessun problema? cosa non si capisce?
    In realtà non è un uso corretto del costrutto switch-case. Lo switch-case serve per scegliere una delle varie opzioni e non entrare alla prima e farle eseguire in sequenza. Ma non sembra che sia quello che vuoi fare, quindi togli lo switch che è inutile.
    
    switch(operazione){
         case 1:
         ...
         break;
    
         case 2:
         ...
         break;
    
         default:
         ...
         break;
    }
    
    Così andrebbe usato lo switch-case, ovvero se operazione vale 1 entra nel case 1, se operazione vale 2 entra nel case 2, altrimenti nel default.
    si lo so pero in questo modo non funzionerebbe il mio programma, perche al caricamento del vettore uscirebbe subito dallo switch senza calcolando il min e max..effettivamente in questo caso il programma e inutile pero il professore c ha dato questa consegna, quindi..
  • Re: Programma switch case

    Va bene che ti hanno dato la consegna di usare lo switch ma devi capire come farlo.

    Devi mostrare un menu, ad esempio

    1) inserimento dati
    2) calcolo e visualizzazione massimo
    3) calcolo e visualizzazione minimo

    e allora utilizzi lo switch case
  • Re: Programma switch case

    oregon ha scritto:


    Va bene che ti hanno dato la consegna di usare lo switch ma devi capire come farlo.

    Devi mostrare un menu, ad esempio

    1) inserimento dati
    2) calcolo e visualizzazione massimo
    3) calcolo e visualizzazione minimo

    e allora utilizzi lo switch case
    quindi dovrei fare sempre : inserisci 1 per caricare
    2 per visualizzare il max e 3 per min ,
    e gli devo dare l opzione ogni volta che finisce una...pero cosi non ha molto senso mettere l inserimento dati in uno switch case perche io potrei benissimo mettere l inserimento dei valori del vettore fuori dallo switch e poi mettere la visualizzazione del max e min dentro questo,pero anche stavolta non avrebbe senso perche mi basterebbe fare un if al posto dello switch e ho fatto..
  • Re: Programma switch case

    Potresti scrivere il programma in mille modi ... questo era SOLO un esempio per mostrarti come funziona lo swith-case ... !
  • Re: Programma switch case

    oregon ha scritto:


    Potresti scrivere il programma in mille modi ... questo era SOLO un esempio per mostrarti come funziona lo swith-case ... !
    si si ho capito cosa vuoi dire,ma sto programma secondo me non ha molto senso...qual e il senso di inserire delle opzioni ognuna conseguente all altra, io credo che lo switch case vada sfruttato per altre occasioni, quando ci sono opzioni piu distinte tra loro, in questo caso non ha proprio senso...perche se io do una scelta su 3 dove la prima(il caricamento) è quella indispensabile si deve per forza cliccare l opzione 1 per poi proseguire se non non funge..va beh..
  • Re: Programma switch case

    In realtà il vettore potrebbe essere azzerato all'inizio e quindi funzionerebbero anche le opzioni 2 e 3.

    Potresti anche inserire del codice che dica, scegliendo il 2 o il 3, che si devono prima inserire i dati.

    Un utente potrebbe volere solo il minimo e quindi utilizzare solo l'opzione 1 e 2; o solo il massimo e quindi utilizzare 1 e 3 ...
  • Re: Programma switch case

    oregon ha scritto:


    In realtà il vettore potrebbe essere azzerato all'inizio e quindi funzionerebbero anche le opzioni 2 e 3.

    Potresti anche inserire del codice che dica, scegliendo il 2 o il 3, che si devono prima inserire i dati.

    Un utente potrebbe volere solo il minimo e quindi utilizzare solo l'opzione 1 e 2; o solo il massimo e quindi utilizzare 1 e 3 ...

    eh ma non capisco come posso fare questa cosa, ovvero dopo che ho inserito un opzione dare un altra possibilita di inserimento di un altra opzione...non mi viene nulla in mente,perche se inserisco un opzione all inizio allora fa solo quella indicata, poi al massimo o esce oppure continua con il case che sta dopo di questa...ma per quanto riguarda scegliere il case una seconda volta non ho proprio idea..
    potrei fare un if ma cosi non ha assolutamente senso lo switch-case, anzi..
  • Re: Programma switch case

    Ma tu conosci i cicli?
  • Re: Programma switch case

    oregon ha scritto:


    Ma tu conosci i cicli?

    si certo , non ho capito che soluzione hai in mente ,fatto sta che ho appena creato una specie di soluzione, ma ovviamente rispetta solo in modo paraziale la consegna..
    #include<stdio.h>
    #include<stdlib.h>
    
    main()
    {
          int v[10];
          int i;
          int min,max;
          int flag=0;
          
          
          printf("\n");
          int operazione;
         
          while(flag==0){
                         
          printf("inserisci opzione 1 per cominciare :");
          scanf("%d",&operazione);
          printf("\n");
         
                            printf("\n");
          switch(operazione){
                             case 1:
                                  printf("inserici valori:");
                                  for(i=0;i<10;i++){
                                  scanf("%d",&v[i]);
                                  }
                                  }
            printf("inserisci 1 se vuoi il min e 2 se max:");
            scanf("%d",&operazione);
            switch(operazione)  {                    
                                  case 1:
                                       min=v[0];
          for(i=1;i<10;i++){
                            if(v[i]<min){
                                         min=v[i];
                                         }
                                         }
                                         printf("minimo:%d",min);
                                                                                printf("\n");
                                                                                break;
                                 case 2:
                                       max=v[0];
          for(i=1;i<10;i++){
                            if(v[i]>max){
                                         max=v[i];
                                         }
                                         }
                                         printf("max:%d",max);
                                         
                                                                                printf("\n");
                                                                                break;
                             default :
                                     printf("valore errato , ripeti se vuoi:\n");
                                     }
                                     
                                     printf("inserisci 0 se vuoi continuare, 1 se lasciare:");
                                     scanf("%d",&flag);
                                     }
    ho creato 2 switch case, dove il primo e totalmente no sense pero bho non so che fare se no..
Devi accedere o registrarti per scrivere nel forum
26 risposte