为什么循环值永远不会大于0?

时间:2016-03-01 15:02:51

标签: c

我正在尝试打印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导致级联效果。

有什么建议吗?谢谢。

2 个答案:

答案 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);
   }