2010-09-15 18 views
3

Hé les gars ... c'est le débutant à nouveau :) Je suis en train de mettre en place un programme qui va calculer l'aire d'un triangle ou un carré et ensuite inviter l'utilisateur s'ils souhaitent en calculer un autre. J'ai le code fonctionnant au point qu'il va calculer la zone de l'une ou l'autre forme, mais ne continue pas avec le reste du code. Par exemple, le carré est sélectionné, la zone est calculée et retourne à l'invite pour le côté du carré. Je suppose que c'est à nouveau le temps de boucler pour toujours, mais je ne sais pas comment arrêter la boucle de continuer indéfiniment.Alors que l'aide de la boucle

Heres mon code:

#include<stdio.h> 
#include<math.h> 

int main(void) 

{ 
    float sq_side, tri_base, tri_height, Area; 
    char shape, cont = 'Y'; 

    printf("Please select the type of shape you desire to calculate the area for:\n"); 
    printf("                  \n"); 
    printf(" Square = S        Triangle = T    \n"); 
    printf(" -------         x      \n"); 
    printf(" :  :         x x      \n"); 
    printf(" :  :         x x     \n"); 
    printf(" -------         xxxxxxx     \n"); 
    printf("                  \n"); 
    printf("Please select either S or T:"); 
    scanf("%c", &shape); 
    while (cont != 'n' && cont != 'N') 

     if (shape == 'S' || shape == 's') 
     { 
      printf("What is the length of the sides of the square?:\n"); 
      scanf("%f", &sq_side); 

      Area = pow(sq_side,2); 

      printf("The area of the square is %.2f.\n", Area); 
     } 

     else if (shape == 'T' || shape == 't') 
     { 
      printf("What is the length of the base of the triangle?:\n"); 
      scanf("%f", &tri_base); 
      printf("What is the height of the triangle?:\n"); 
      scanf("%f", &tri_height); 

      Area = 0.5 * tri_base * tri_height; 

      printf("The area of the triangle is %.2f.\n", Area); 
     } 

     else 
     { 
     printf("Error: You have select an incorrect option."); 
     } 

     printf("Do you wish to calculate a new shape?"); 
     fflush(stdin); 
     scanf("%c", &cont); 

    return(0); 

} 
+4

Toujours vérifier la valeur de retour de 'scanf()'! En outre, vous ne documentez pas la réponse "N" ou "n". Méfiez-vous du code de conversion '% c'; il ne saute pas d'espace blanc, comme une nouvelle ligne, contrairement à la plupart des autres codes de conversion 'scanf()'. En général, évitez 'scanf()'; utilisez 'fgets()' et 'sscanf()' à la place. –

Répondre

8

te manque accolades. Le résultat était que seule l'instruction if (qui inclut la chaîne d'else ifs) était réellement dans le corps de la boucle. Le printf (et plus tard) ne fait pas partie de cette déclaration composée.

while (cont != 'n' && cont != 'N') 
{ 
    if (shape == 'S' || shape == 's') 
    { 
     printf("What is the length of the sides of the square?:\n"); 
     scanf("%f", &sq_side); 

     Area = pow(sq_side,2); 

     printf("The area of the square is %.2f.\n", Area); 
    } 

    else if (shape == 'T' || shape == 't') 
    { 
     printf("What is the length of the base of the triangle?:\n"); 
     scanf("%f", &tri_base); 
     printf("What is the height of the triangle?:\n"); 
     scanf("%f", &tri_height); 

     Area = 0.5 * tri_base * tri_height; 

     printf("The area of the triangle is %.2f.\n", Area); 
    } 

    else 
    { 
    printf("Error: You have select an incorrect option."); 
    } 

    printf("Do you wish to calculate a new shape?"); 
    fflush(stdin); 
    scanf("%c", &cont); 
} 
3

Theres pas de crochets pour vous tout en boucle. Donc le code en dehors de votre bloc if elseif else n'est pas appelé.

actuellement votre code se traduit par

while (cont != 'n' && cont != 'N') 
{ 
    if (shape == 'S' || shape == 's') 
    {} 
    else if (shape == 'T' || shape == 't') 
    {} 
    else 
    {} 
} 

printf("Do you wish to calculate a new shape?"); 
fflush(stdin); 
scanf("%c", &cont); 

quand vous voulez

while (cont != 'n' && cont != 'N') 
{ 
    if (shape == 'S' || shape == 's') 
    {} 
    else if (shape == 'T' || shape == 't') 
    {} 
    else 
    {} 

    printf("Do you wish to calculate a new shape?"); 
    fflush(stdin); 
    scanf("%c", &cont); 
} 

Rappelez-vous que si vous ne pas inclure des accolades dans une structure de contrôle, il appelle que la déclaration suivante, qui votre cas est une série d'instructions imbriquées if-else if.

Espérons que cela aide - Val