Problema c il programma salta un'istruzione

di il
2 risposte

Problema c il programma salta un'istruzione

Ciao a tutti, a scuola stiamo facendo un po' di ripasso di c e il professore mi ha chiesto di creare un programma che risolva le equazioni di primo grado e anche quelle di secondo grado utilizzando if..
fin qui tutto ok ho creato tutto il codice e funziona tutto tranne una cosa che mi sta facendo impazzire.. ecco il codice:
#include <stdio.h>  /*Include la libreria stdio.h*/
#include <conio.h>  /*Include la libreria conio.h*/
#include <math.h>   /*Include la libreria math.h*/

int scelta_utente;  /*Dichiara la variabile di tipo intero "scelta_utente"*/
float a,b,c,delta,x,x_1,x_2; /*dichiaro tutte le variabili di tipo float (non
                             intere) utili nel programma*/
main () 

{     /*Apre il programma*/
        printf("Programma per il calcolo di equazioni.\n\n"
               "1. Equazioni di primo grado\n"
               "2. Equazioni di secondo grado\n"
               "3. Esci\n\n"     );     /*Menù di scelta*/
        printf("Scelta: ");
        scanf("%d",&scelta_utente);     /*Acquisisce il valore della 
                                        variabile scelta_utente*/
     if(scelta_utente==1) {             /*Se il valore è 1, il programma 
                                        esegue questo blocco di istruzioni 
                                        */
              printf("Hai scelto -Equazione di Primo Grado-\n"
                     "secondo la forma generale ax = b\n"
                     "inserisci il valore di a:\n"); /*Intestazione*/
              scanf("%f",&a);             /*Acquisisce il valore 
                                          della variabile a*/
              printf("Adesso inserisci il valore di b:\n");
              scanf("%f",&b);             /*Acquisisce il valore
                                          della variabile b*/
              printf("La tua equazione e': (%.2f)x = (%.2f)\n",a,b); 
                                           /*Visualizza su schermo l'equazione*/
              if(a != 0){          /*SE a DIVERSO da 0*/
                        x=b/a;     /*Calcola x*/
                        printf("Secondo la formula risolutiva \t x = b/a \n"
                               "si ha:\tx = %.2f\n",x);       /*Visualizza il
                                                              valore di x*/
                        }         /*Fine del blocco di istruzioni di if a!=0*/
              else if(b != 0)   /*ALTRIMENTI SE b DIVERSO da 0*/
                     printf("L'equazione e' impossibile.");   /*Non calcola x
                                                              perchè l'equazione
                                                              è impossibile*/                 
              else printf("L'equazione e' indeterminata.");
                                           /*ALTRIMENTI se a e b non sono
                                           diverse da 0 l'equazione sarà
                                           indeterminata*/
                           }         /*Fine del blocco di istruzioni
                                     di if scelta_utente==1*/
              
     else if (scelta_utente==2)            {  /*"Altrimenti" se il valore 
                                              di scelta_utente è 2, il programma
                                              esegue questo blocco di istruzioni
                                              */
               printf("Hai scelto -Equazione di Secondo Grado-\n"
                     "Secondo la forma generale ax^2 + bx + c = 0\n"
                     "Inserisci il valore di a:\n"); /*Intestazione*/
               scanf("%f",&a);     /*Acquisisce il valore di a*/
               if(a==0)           /*SE a è UGUALE a 0*/
                        printf("L'equazione e' di primo grado!\n");
               else if (a!=0) {   /*ALTRIMENTI SE a diverso da 0*/
                 printf("Inserisci il valore di b:\n");
                 scanf("%f",&b);     /*Acquisisce il valore di b*/
                 printf("Inserisci il valore di c:\n");
                 scanf("&f",&c);     /*Acquisisce il valore di c*/       //SALTA QUESTO PASSAGGIO -.-''
                 printf("Secondo la formula generale la tua equazione e':\n"
                        "(%.2f)x^2 + (%.2)fx + (%.2f) = 0\n",a,b,c);
                  delta=pow(2,b)-4*a*c;      /*Calcola il valore di delta*/
                    if(delta>0) { /*ALTRIMENTI SE delta>0 esegue questo blocco 
                                  di istruzioni*/
                      x_1=-b+sqrt(delta);          /*Calcola x_1*/
                      x_2=-b-sqrt(delta);          /*Calcola x_2*/
                      printf("L'equazione ha due soluzioni:\n"
                             "x_1 = %.2f\nx_2 = %.2f\n",x_1,x_2); /*Visualizza
                                                                  su schermo il 
                                                                  valore di x_1 
                                                                  e x_2*/
                                } /*Fine del blocco di istruzioni di 
                                  else if delta>0*/
                    else if(delta==0) { /*ALTRIMENTI SE delta è uguale a 0*/
                                      x_1=-b+sqrt(delta); /*Calcola x_1*/
                                      x_2=-b-sqrt(delta); /*Calcola x_2*/
                         printf("L'equazione ha due soluzioni coincidenti:\n"
                            "x_1 = %.2f\nx_2 = %.2f\n",x_1,x_2);
                                                   /*Visualizza su schermo il 
                                                   valore di x_1 e x_2 che in 
                                                   questo caso sono cincidenti*/
                                            }/*Fine del blocco di istruzioni 
                                             di else if delta==0*/
                    else printf("L'equazione e' impossibile."); 
                                /*ALTRIMENTI se delta NON è > 0 e non è ==0
                                l'equazione sarà impossibile*/
                                          }/*Fine del blocco di istruzioni di 
                                           else if a!=0*/
                              }/*Fine del blocco di istruzioni di
                               else if scelta_utente==2*/

     else if(scelta_utente==3) printf("Arrivederci!"); /*ALTRIMENTI SE 
                                                       scelta_utente==3 
                                                       visualizza su schermo 
                                                       "Arrivederci!"*/
     getch (); /*Funzione utile a non far chiudere 
               il programma immediatamente dopo l'apertura*/
}  /*Fine del programma*/

Allora.. funziona tutto apparte quando scelgo di risolvere un'equazione di secondo grado perchè il programma mi dice di inserire il valore di a e di b ma non quello di c! non capisco proprio perchè è come se non ci fosse scanf("%f",&c);
Qualcuno sa aiutarmi???

2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte