Foros del Web » Programación para mayores de 30 ;) » C/C++ »

funcion que compila pero se queda trabada

Estas en el tema de funcion que compila pero se queda trabada en el foro de C/C++ en Foros del Web. En este caso el programa me pide : /*Escribir un programa que presente un menu con 3 opciones. La opcion A debera aceptar una serie ...
  #1 (permalink)  
Antiguo 16/08/2012, 10:25
 
Fecha de Ingreso: agosto-2012
Mensajes: 8
Antigüedad: 11 años, 8 meses
Puntos: 0
Pregunta funcion que compila pero se queda trabada

En este caso el programa me pide :
/*Escribir un programa que presente un menu con 3 opciones. La opcion A debera aceptar una
serie de numeros separados por un espacio y terminada en un punto, dando como resultado la
suma de todos los numeros.
La opcion B aceptara un numero y calculara la suma de sus divisores, excepto el mismo. El
menu se ejecutara hasta introducir la opcion C.*/

La funcion a) es la que me falta, la he hecho pero cuando introduzco los numeros y por ultimo el punto se me queda parado el programa, no se donde he fallado.

Código:
#include <stdio.h>
#include <stdlib.h>
#define PUNTO '.'
int sumanumeros(int b);
int sumadivisores(int a);
int main()
{ 
    char letra;
    int num,num2,x,cont=0;;

    do{
          system("cls");
          printf(" a)Suma de numeros \n b)Suma de divisores \n c)Salir \n");
          scanf("%c",&letra);
          
          switch(letra)
          {
                       case'a':system("cls");
                               
                               printf("Introduzca una serie de numeros terminada en punto");
                               scanf("%d",&num2);
                               x=sumanumeros(num2);
                               
                               printf("La suma de los numeros es:%d \n\n\n",x);
                               break;
                       case'b':system("cls");
                               printf("Introduzca un numero:");
                               scanf("%d",&num);
                               x=sumadivisores(num);
                               printf("La suma de los divisores excluyendo a el mismo es:%d \n\n",x);
                               break;
                       case'c':break;
          }
    fflush(stdin);
    system("pause");
    }
    while(letra>='a' && letra<='b');                   
    
return 0;
}
int sumanumeros(int b)
{
    int suma=0;
    
    while(b!= PUNTO)
    {
      scanf("%d",&b);
      suma = suma + b;
    }
    
      return suma;
}   

int sumadivisores(int a)
{
    int i,suma=1;
    for(i=2;i<=a/2;i++)
    {
        if(a%i==0)
        suma=suma+i;
    }
    return suma;
}
  #2 (permalink)  
Antiguo 16/08/2012, 10:36
 
Fecha de Ingreso: agosto-2012
Mensajes: 30
Antigüedad: 11 años, 8 meses
Puntos: 3
Respuesta: funcion que compila pero se queda trabada

Hola

El problema puede estar en que cuando lees la serie de numeros no puedes leerlos todos con scanf de golpe.

Scanf es para leer un numero, por ejemplo si pones 12345, te leera 12345 y lo almacenara en tu variable, pero si pones 1 2 3 4 5. , que estas leyendo?

lo que tienes que hacer es leerlos como char* y analizarlos de forma independiente.
Ya sabes que el separador es el espacio y el caracter terminal es el punto

Espero que te sirva de ayuda
  #3 (permalink)  
Antiguo 16/08/2012, 18:15
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: funcion que compila pero se queda trabada

Hola! tenes que seguir la idea de lucas_max2002. Lee la entrada como si fuese una cadena y usa fgets en vez de scanf, luego vas a tener que separar la cadena con strtok() y finalmente convertir cada numero en entero con atoi()

Saludos

PD: para el tipo de ejercicio me resulta raro que te den algo asi, estas seguro del enunciado??

Etiquetas: compila, funcion, int, programa, queda
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:05.