我正在尝试打印26个标记为A到Z的子进程,其间距设置为int wid = 2*(i-1)
,以实现级联类型效果。但是,计算中i的值始终为0,导致0-1为-1,然后2 * -1为宽度始终为-2。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char * argv[]){
pid_t pid;
int i;
int j;
for(i=0; i<26; i++){
pid=fork();
if(pid==0){
int l;
for(l=0; l<5; l++){
for(j=0; j<26; j++){
char value = j + 'A';
int wid = 2 *(i-1);
printf("wid: %d", wid);
printf("%*c\n", wid, value);
usleep(1000);
}
}
exit(EXIT_SUCCESS);
}
while(wait(NULL)>0);
exit(EXIT_SUCCESS);
}
}
我不知道如何构造for循环以打印出间距,所以我从0开始并转到25导致级联效果。
有什么建议吗?谢谢。
答案 0 :(得分:3)
正如MikeCAT在评论中所说,问题在于第二次exit()
电话。
另一个问题似乎是一个太多的循环。
for(i=0; i<26; i++){
pid=fork();
if(pid==0){
int l;
for(l=0; l<5; l++){
for(j=0; j<26; j++){ // <-- Get rid of this line
char value = j + 'A'; // <-- Use i instead of j
int wid = 2 *(i-1);
printf("wid: %d", wid);
printf("%*c\n", wid, value);
usleep(1000);
} // <-- Also get rid of this line
}
exit(EXIT_SUCCESS); // <-- This is fine, exits the child process
}
while(wait(NULL)>0); // <-- Move with the line below
exit(EXIT_SUCCESS); // <-- Problem here, exits the parent process, preventing any looping
}
由于它位于主for
循环内,因此它永远不会循环,因为它在第一次迭代结束时退出。将有问题的exit()
移到}
之下,然后解决问题。
答案 1 :(得分:0)
您可能想要更改此
apply(expand.grid(x, y, z), 1, paste, collapse = "_")
成为这个
for(i=0; i<26; i++){
...
while(wait(NULL)>0);
exit(EXIT_SUCCESS);
}