scanf在报告中不起作用

时间:2010-08-09 15:44:10

标签: c

#include <stdio.h>
#include <unistd.h>
//#include <iostream.h>
#include <sys/types.h>
#include <sys/wait.h>   
#include <sys/types.h>

int t_array[100];
int h_array[100];
int race_length=0;

void cursor(int y)
{
    int i;
    printf("%c[%d;%df",0x1B,y,0);
}

void turtle_fun()
{   
    int Ti=0;

    while(Ti<=race_length-1)
    {
    //cursor(10);       
    //  printf("t      ");
    //  fflush(stdout);     
        Ti++;
        sleep(3);
    }

}

void hare_fun(int rh[])
{
    int k;
    int i=0;
    char pos_h;

    while(i<=race_length-1)
    {
    //  cursor(5);
//printf("h ");
//  fflush(stdout);
        read(rh[0],&pos_h,1);
        if(pos_h==1) write(rh[1],&i,1);
        i++;
        sleep(1);
    }

}

void god_fun(pid_t id)
{
}

void report_fun(int rh[],int rg[],int rt[])
{   
    int k,m,pos;
    int pos_h,pos_t;

    close(rh[1]);

    if(k=fork()==0) hare_fun(rh);
    else
    {
        if(fork()==0) turtle_fun();
        else
        {       
            printf("press 1 to know current position \n");
            fflush(stdout);
            scanf("%d\n",&pos);

            if(pos==1) write(rh[1],&pos,1);

             read(rh[0],&pos_h,1);
             printf("H%d|T\n",pos_h);
             printf("j");

             //while(h_comp!=1||c!=1);*/
         }

    }

}

void main()
{
    int rg[2],rh[2],rt[2],gh[2],gt[2],ht[2];
    int child_id;
    pid_t cpid;

    printf("what is the length of the race");
    scanf("%d",&race_length);
    cpid=fork();

    if(cpid==0)
    {
        pipe(rg);
        pipe(rh);
        pipe(rt);
        report_fun(rh,rg,rt);
    }
    else
    {       
        pipe(gh);
        pipe(gt);
        god_fun(cpid);
    }

}   

1 个答案:

答案 0 :(得分:0)

请勿在{{1​​}}格式字符串中加入\n,这可能会导致您的程序等待两次进入。

所以在scanf()更改

report_fun()

scanf("%d\n",&pos);

更新

scanf("%d",&pos); 中,您在子进程中调用main()()而不是父进程。您可能想要撤消report_fun测试。

请使用if (cpuid == 0)代替int main(void),并使用void main()结束您的主要功能。