Ayuda, problema para ingresar datos en tuberias.

Iniciado por jmrmcf, 22 Marzo 2015, 00:30 AM

0 Miembros y 1 Visitante están viendo este tema.

jmrmcf

Estoy haciendo un programa al que le ingrese un numero, hay un proceso hijo que envia el numero a traves de una tuberia y obtiene e imprime el factorial del numero (cuando el numero es menor que cero imprime los numeros ingresados en orden ascendente y se sale del programa). El proceso padre recibe a traves de la tuberia y descompone el numero en multiplicaciones de numeros primos. Pero tengo un problema ENORME: no puedo ingresar el numero, el programa compila (ubuntu 14.04) y al ejecutarlo solo imprime una linea que tengo previa al scanf que simplemente indica que se ingrese el numero. Agradezco su ayuda, adjunto el codigo.
Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int a,ing[50],b,tub[2];
void pedir (void)
{
        int num,i,fact,j,temp;
        num=10;
close(tub[0]);
do
{

printf("ingrese el numero \n");
scanf("%i",&num);
write(tub[1], &num, sizeof(int));
ing[a]=num;
        a++;
        for(i=num;i>0;i--)
        {   
        fact=fact*i;
        }
        printf("factorial: %i \n",fact);
fact=1;
if(num<=0)
{
for(i=0;i<=a-1;i++)
{
for(j=i;j<=a-1;j++)
{
if(ing[j]<=ing[i])
{
int temp=ing[j];
ing[j]=ing[i];
ing[i]=temp;
}
}
      }
printf("ordenada: \n");
for(i=0;i<a;i++)
        {   
        printf("%i \t",ing[i]);
        }
printf("\n");
}
}while(num>0);



}
void ppadre (void)
{
sleep(2);
int numl;
numl=1;
printf("ola que ase saliendose solo o que ase");
do{
int i,conta,o;
        int primos[50];
        int pos=0;
close(tub[1]);
for(i=1;i<=numl;i++)
        {
                conta=0;
                for(o=1;o<=i;o++)
                {
                        if(i%o==0)
                                conta++;
                }
                if(conta==2)
                {                 
                        primos[pos]=i;
                        pos++;     
                }   
        }
        o=1;
        for(i=0;i<pos;i++)
        {
                if(numl%primos[i]==0)
                {
                        o=o*primos[i];
printf("va en %i\n",o);
                }
        if(o==numl)
        {
        printf("terminado: %i\n",o);
                i=pos;
        }
if(i==(pos-1) && o!=numl)
{
i=-1;
}
        }
}while(numl>0);
}
void main (void)
{

a=0;
pid_t pid;
pid = fork ();
pipe(tub);
switch(pid)
{
case -1: // error del fork<)
printf("error al crear el proceso\n");
break;
case 0: // proceso hijo
//printf("hijo\n");
pedir();
break;
default: // padre
//printf("yo soy tu padre\n");
ppadre;
break;

}
}