LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: 0100

错误:case label does not reduce to an integer constant

[复制链接]
发表于 2003-6-28 12:44:40 | 显示全部楼层
最初由 libinary 发表
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/types.h>
  4. #define NUM 5
  5. int main()
  6. {
  7.   pid_t pid[NUM], cpid;
  8.   int proc_number;
  9.   for(proc_number =[color=red] 1[/color] ; proc_number [color=red]<=[/color] NUM; ++proc_number){
  10.     if((pid[proc_number] = fork()) < 0)
  11.       perror("fork error");
  12.     else if(pid[proc_number] == 0)
  13.       break;
  14.   }
  15.   cpid = getpid();
  16.   if(proc_number < NUM)
  17.     printf("child %d: %d\n", proc_number + 1, cpid);
  18.   else
  19.     printf("parent: %d\n", cpid);
  20.   exit(0);
  21. }
复制代码


这段代码比我的强!!学习
在for以后,每个子进程的proc_number是不同的,其实不用我的那么麻烦,在这里可以用switch/case了
  1. switch(proc_number)
  2. {
  3. case 1:
  4.         printf("this is 1# child\n");
  5.         break;
  6. case 2:
  7.         //...
  8.         break;
  9. ......
  10. ......
  11. case NUM:
  12.         printf("this is perent!\n");
  13.         break;
  14. }
复制代码
 楼主| 发表于 2003-6-28 18:02:22 | 显示全部楼层
是啊。我也觉得这段代码也不象我的那样要保存pid.真的很有创意。很巧妙地解决了问题。
发表于 2003-6-28 18:41:16 | 显示全部楼层
colored兄怎么把libinary的循环条件给改了?如果要从1开始循环,则下面的打印条件也应该改掉,不然,只会打印出5个进程的ID,并且父进程的ID实际上是最后一个子进程的ID。

  1. if(proc_number <[color=red]=[/color]NUM)
  2.     printf("child %d: %d\n", proc_number, cpid);[color=red]//条件更改后,不应该再是proc_number+1[/color]
  3.   else
  4.     printf("parent: %d\n", cpid);
复制代码
发表于 2003-6-29 18:24:53 | 显示全部楼层
最初由 kj501 发表
colored兄怎么把libinary的循环条件给改了?如果要从1开始循环,则下面的打印条件也应该改掉,不然,只会打印出5个进程的ID,并且父进程的ID实际上是最后一个子进程的ID。


为了用switch/case,所以就没改后面的if()...

只能说我还不严谨:p
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表