[ Foro de C ]
Tengo que hacer un array de 10 caracteres como máximo y que al introducir el carácter 101 se salga del bucle y no me funciona. Enunciado: introducir
números reales de valor entre [-100, 100] (#define MIN -100, #define MAX 100) en un array de como a máximo ELEM elementos (#define ELEM 10), hasta entrar el 101.
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
#define MIN -100
#define MAX 100
#define ELEM 10
int main () {
system("COLOR 04");
float array[ELEM];
float num=-201,suma=0,producte=1,ngran=0,npetit=0;
int comptadormitja,mitja,parell=0,senar=0,opcio,comptadorseq=0,comptadornum=0;
int i,j,a,x[ELEM];
do {
printf(" \n *****************************************************");
printf(" \n * M E N U *");
printf(" \n *****************************************************");
printf(" \n 1. Introduir els nombres fins introduir un 101, com a minim dos elements. ");
printf(" \n 2. Mostrar resultats. ");
printf(" \n 3. Reiniciar els comptadors. ");
printf(" \n 4. Mostrar els valors introduits a l'array. ");
printf(" \n 5. Mostrar la mitja de tots els valors introduits per l'array. ");
printf(" \n 6. Finalitzar programa. ");
printf("\n");
printf("\n");
scanf ("%d",&opcio);
fflush(stdin);
switch(opcio) {
case 1:
do{
while((num<MIN)||(num>MAX)){
printf("Escriu el numero %d, que ha d'estar entre [-100 i 100]: ", i+1);
scanf("%f",&num);
}
if((num==101)&&(comptadornum<=2)){
printf("Torna a introduir els valors.");
}
if(num!=101){
x[i]=num;
i++;
comptadornum++;
}
} while ((num!=101)||(comptadornum<ELEM));
if(comptadornum>ELEM){
printf("L'array ja te el maxim de valors introduits. ");
}
for (i=0; i<=9; i++){
suma += x[i];
}
for (i=0; i<=9; i++){
producte *= x[i];
}
for(i=0; i<=9; i++){
if(x[i] > ngran){
ngran = x[i];
}
}
for(i=0; i<=9; i++){
if(x[i] < npetit){
npetit = x[i];
}
}
break;
case 2:
printf("La suma dels numero introduits es: %.2f\n",suma);
printf("\n");
printf("El producte dels numeros introduits es: %.2f\n",producte);
printf("\n");
printf("El numero mes gran introduit es: %.2f\n",ngran);
printf("\n");
printf("El numero mes petit introduit es: %.2f\n",npetit);
printf("\n");
printf("El total de nombres parells introduits es: %i\n",parell);
printf("\n");
printf("El total de nombres senars introduits es: %i\n",senar);
printf("\n");
printf("S'han detectat %i sequencies.",comptadorseq);
printf("\n");
break;
case 3:
num=-1,suma=0,producte=1,ngran=-1,npetit=151,parell=0,senar=0,comptadorseq=0;
printf("\n");
printf("Comptadors reiniciats.");
printf("\n");
break;
case 4:
for (i=0; i <ELEM; i=i+1)
for (j=0; j <ELEM; j=j+1)
if ( x[i] < x[j] ) {
a=x[i];
x[i]=x[j];
x[j]=a;
}
for(i=0; i <10; i=i+1) {
printf("%3d", x[i]);
}
break;
case 5:
mitja=suma/comptadormitja;
}
} while (opcio!=6);
}
Si pretendes lo que creo, sólo tienes que cambiar el "o" por un "y" en tu bucle do-while interno, para que salga cuando se llene o bien cuando se teclee 101, lo que primero ocurra:
while ((num!=101) && (comptadornum<ELEM));
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)