C 保留和打印if语句外部的值

C 保留和打印if语句外部的值,c,C,我在if语句外声明了一个字符文件名,并在另一个if语句内的if语句中使用了它。我想知道如何从if块外部检索和打印扫描并存储在char filename中的值 我的代码片段: char fileName[30] = ""; if(pid2==0){ block of statements here if(pid3==0){ block of statements here }else if(pid3==-1){ block of statem

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

我的代码片段:

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);
使用
get(文件名)而不是
scanf(“%s”,文件名)

因为scanf();将在输入中显示空格时终止输入,而gets()将在按ENTER键时终止。希望这能奏效。如果要输入超过29个字符,请使用大数字而不是30。i、 e:更改
文件名[30]
文件名[90]

如果这不是针对需要正确进程间通信的家庭作业,而您只需要完成它,您可以执行以下操作:

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)的形式,例如管道(最推荐使用)或共享内存。web上有大量的引用,其中包括。

您提供的少量代码似乎是可以接受的-
fileName
声明在
if
语句的范围之上,因此它们都可以访问(当然,您从未显示设置它)。您对此有问题吗?很抱歉,我删除了我发现不需要在此处显示的大部分代码:(.是的,除了我扫描并存储在第二个if块(else语句中)中的值之外,所有内容都可以访问char文件名)不会将其传递到外部。因为您正在查看PID,这是在一组不同的线程/进程中吗?一旦您分叉一个进程,在一个线程中变量中更改的数据不会反映在另一个线程中。您需要查看某种形式的进程间通信,如管道。(或者将数据存储在一个已知文件中,然后打开它,尽管如果在写入之前尝试读取它会变得混乱)。:(我的评论是在按下enter按钮时通过的……我想详细说明几秒钟前我的评论。在else语句中,假设我扫描了“hello”.现在我想将它传递给另一个else语句,但它只给了我(null)或者一个非法字符。所以你想从一个
else
跳转到另一个
else..if
或其他什么?另请参阅@Scottermelstein的注释,因为线程执行意味着一个线程中的更改数据不会反映到另一个线程。虽然有很好的建议,但这些都与保留值无关。可能是OP没有问题要阅读字符串,但问题与在多个线程之间共享数据有关。您好,谢谢您的回答。但是---我更多的是寻找如何将else语句中的值传递给另一个else语句的解决方案:)