在if语句之外保留和打印值

时间:2014-02-24 05:48:57

标签: c

我在if语句之外声明了一个字符fileName,并在另一个if语句中的if语句中使用它。我想知道如何从if块外部检索并打印我扫描并存储在char文件名中的值。

我的代码段:

char fileName[30] = "";
if(pid2==0){
    block of statements here
    if(pid3==0){
        block of statements here
    }else if(pid3==-1){
        block of statements here
    }else{
        printf ("\t CHILD2: Enter a filename: ");
        scanf ("%s", fileName);
        ...

    }
}else if(pid2==-1){
    block of statements here
}else{
    printf ("\t CHILD2: %s was successfully created!\n", fileName);

2 个答案:

答案 0 :(得分:0)

如果这不是一个需要正确的进程间通信的家庭作业,而你只需要完成它,你可以做如下的事情:

char whereIStoreMyData = "file.tmp"

// fork...

if(pid2==0){
    block of statements here
    if(pid3==0){
        block of statements here
    }else if(pid3==-1){
        block of statements here
    }else{
        printf ("\t CHILD2: Enter a filename: ");
        scanf ("%s", fileName);
        FILE* fp = fopen(whereIStoreMyData, "w");
        fprintf(fp, "%s\n");
        fclose(fp);

        ...

    }
}else if(pid2==-1){
    block of statements here
}else{
    FILE* fp;
    while ((fp = fopen("whereIStoreMyData", "r")) == NULL) {
        sleep(1000) // wait 1 second
    }
    fscanf(fp, "%s\n", fileName);
    fclose(fp);
    printf ("\t CHILD2: %s was successfully created!\n", fileName);
}

这不是理想的代码(你应该使用fgets,或其他更好的函数,例如),但是显示了基本的逻辑流概念。

如果您需要更正式的内容,请查看进程间通信(IPC)的形式,例如管道(最常用于此)或共享内存。网上有大量的参考文献,其中包括fork() and pipes() in c

答案 1 :(得分:-1)

使用gets(fileName);代替scanf ("%s", fileName); 因为scanf();将在输入中出现空格时终止输入,而当您按ENTER时,gets()将终止。希望这会奏效。如果要输入超过29个字符,请使用大数而不是30。即:将fileName[30];更改为fileName[90]