C 保留和打印if语句外部的值
我在if语句外声明了一个字符文件名,并在另一个if语句内的if语句中使用了它。我想知道如何从if块外部检索和打印扫描并存储在char filename中的值 我的代码片段: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
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语句的解决方案:)