2015-10-10 6 views
-5

Я не могу найти ошибку на do-while. Цикл продолжается, если я отвечу «N» на вопрос. (Приложение предназначено для поиска среднего значения высоты неопределенного числа людей).Не нашел ошибку

#include <stdio.h> 
#include <stdlib.h> 

/* 
* 
*/ 
int main(int argc, char** argv) { 
    int i; 
    float measure[i],sum,average; 
    char sex; 
    char yn; 


    do{ 
     for(i=1;i;i++) { 
      printf("Persoa %d",i); 
      printf("\nIndique se é home (H) ou muller (M): "); 

      scanf("%s",&sex); 
       while((sex != 'M') && (sex != 'H')) 
       { 
        printf("Lo ha escrito mal."); 
        printf("\nIndique se é home (H) ou muller (M): "); 
        scanf("%s",&sex);   
       } 

      printf("Indique a súa measure (en metros): "); 
      scanf("%f",&measure[i]); 

      sum=sum+measure[i]; 

      printf("\nDesea seguir? (Y/N): "); 
      scanf("%s",&yn); 
       while((yn != 'Y') && (yn != 'N')) 
       { 
        printf("Lo ha escrito mal."); 
        printf("\nDesea seguir? (Y/N): "); 
        scanf("%s",&yn); 
       } 
     } 
    }while(yn == 'Y'); 

    average=sum/i; 
    printf("\nA media de measures é: %f m.",average);  

    return (EXIT_SUCCESS); 

Нужна помощь ребятам. Мне нужно отправить это моему учителю завтра. Я нуб на этом языке :(

+2

Это выглядит как C/C++, а не C#. –

+1

Что такое 'for' for? У вас всего один цикл, так что вы можете самостоятельно отслеживать переменную 'i', без' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' – SWeko

+3

Вызов scanf() повреждает стек, все возможно. Переменная yn равна% c, а не% s –

ответ

0

попробовать эту поправку к программе

#include <stdio.h> 
#include <stdlib.h> 

/* 
* 
*/ 
#define NB_MESURES 50 

int main(int argc, char** argv) { 
    int i=0; 
    float measure[NB_MESURES] /* NB_MESURES is predefined to be 50*/ 
    ,sum=0,average=0; 
    char sex=0; 
    char yn=0; 


    while(1){ /*endless loop (1)*/ 

      printf("Persoa %d",i); 
      printf("\nIndique se é home (H) ou muller (M): "); 


      while(1) /*endless loop (level 2)*/ 
      { 
       scanf(" %c",&sex); 
       if((sex == 'M') || (sex == 'H')) break; /*Upper case*/ 
       if((sex == 'm') || (sex == 'h')) break; /*Lower case*/ 

       /* ok exit loop (level 2) 
        else show the help message */ 
       printf("Lo ha escrito mal."); 
       printf("\nIndique se é home (H) ou muller (M): "); 
      } 

      printf("Indique a súa measure (en metros): "); 
      scanf("%f",&measure[i]); 

      sum=sum+measure[i]; 
      i++; 
      if(i==NB_MESURES){ 
        /* 
        we can not add more than 50 elements 
        exiting loop (1) 
        */ 
       printf("\nMax Allowed entries is %d\n",NB_MESURES); 
       break; 
      }else{ 
       printf("\nDesea seguir? (Y/N): "); 
       while(1) /* loop (level 2) */ 
       { 
        scanf(" %c",&yn); 
        if((yn == 'Y') || (yn == 'N')) break; 
        if((yn == 'y') || (yn == 'n')) break; 
        /* if the input was different than ['Y','y','N','n'] 
         show newt message else we break and use yn in the next check to exit loop (level 1) 
        */ 
        printf("Lo ha escrito mal."); 
        printf("\nDesea seguir? (Y/N): "); 
       } 

       if((yn == 'N') || (yn == 'n')) break; /*Exit level 1*/ 
      } 
    } 

    average=sum/i; 
    printf("\nA media de measures é: %f m.\n",average);  

    return (EXIT_SUCCESS); 
} 
+1

Ответ будет полезен для объяснения. – Onik

+0

Я добавил несколько комментариев – milevyo

1

две основные ошибки являются: наиболее важным является:

float measure[i]; 

вы должны объявить точно размер таблицы, например:

float measure[50]; 

второй: зсапЕ формат строки для полукокса "%c" существует не "%s"

еще другая ошибка

01.
Смежные вопросы