就是字符串才会多出一个字符'\0'来啊。 我在看看 !
那 提示: assign makes integer from apointer without a pointer 经过反复调试 终于通过了 谢谢大家! 呵呵,我觉得像字符串后面其实还带着一个'\0'很容易被忽略。
很惭愧啊,我学了一年C了,还什么真正的程序都没编过呢(不过自认基础还是学得不错的:P)。
以后还得跟大家多多学习呢。 没什么 ! 我也很菜的 !
你看看下面的程序:
#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
void Randomnum(void);
pid_t p1,p2,p3,p4;
main(void)
{
int sysgiven=5;
struct stares1{ int s; char r1; } statue1={0,"ABCDEFGHIJ"};
struct stares2{ int s; char r2; } statue2={0,"KLMNOPQRST"};
struct stares3{ int s; char r3; } statue3={0,"UVWXYZabcd"};
struct stares4{ int s; char r4; } statue4={0,"efghijklmn"};
struct stares5{ int s; char r5; } statue5={0,"opqrstuvwx"};
struct pidstatues{
intname;
intrenum;
intgiven;
intnogiven;
}capro; /* define struct over */
/* initial data struct */
capro.name=1; capro.renum =3; capro.given=0; capro.nogiven=0;
capro.name=2; capro.renum =2; capro.given=0; capro.nogiven=0;
capro.name=3; capro.renum =2; capro.given=0; capro.nogiven=0;
capro.name=4; capro.renum =4; capro.given=0; capro.nogiven=0;
Randomnum();
if(p1<0) {
printf(" fork error\n "); exit(0); }
else if( (p1==0) || (p1==1) )
{
if((capro.renum <= sysgiven) && (capro.nogiven<= sysgiven))
{
if((statue1.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue1.r1); statue1.s = 1; }
if((statue2.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue2.r2); statue2.s = 1; }
if((statue3.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue3.r3); statue3.s = 1; }
if((statue4.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue4.r4); statue4.s = 1; }
if((statue5.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue5.r5); statue5.s = 1; }
sysgiven = 5; exit(1); }
else printf(" Dead \n");
}
if(p2<0)
{ printf(" fork fault\n " ); exit(1); }
else if((p2==0) || (p2==1))
{
if((capro.renum <= sysgiven) && (capro.nogiven<= sysgiven))
{
if((statue1.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue1.r1); statue1.s = 1; }
if((statue2.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue2.r2); statue2.s = 1; }
if((statue3.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue3.r3); statue3.s = 1; }
if((statue4.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue4.r4); statue4.s = 1; }
if((statue5.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue5.r5); statue5.s = 1; }
sysgiven = 5; exit(1);
}
else printf(" Dead \n");
}
if( p3<0 ) {
printf(" fork error\n " ); exit(1);}
else if((p3==0) || (p3==1))
{
if((capro.renum <= sysgiven) && (capro.nogiven <= sysgiven))
{
if((statue1.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue1.r1); statue1.s = 1; }
if((statue2.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue2.r2); statue2.s = 1; }
if((statue3.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue3.r3); statue3.s = 1; }
if((statue4.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue4.r4); statue4.s = 1; }
if((statue5.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue5.r5); statue5.s = 1; }
sysgiven = 5; exit(1); }
else printf(" Dead \n");}
if( p4<0 ) {
printf(" fork error\n " ); exit(1); }
else if((p4==0) || (p4==1))
{
if((capro.renum <= sysgiven) && (capro.nogiven <= sysgiven))
{
if((statue1.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue1.r1); statue1.s = 1; }
if((statue2.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue2.r2); statue2.s = 1; }
if((statue3.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue3.r3); statue3.s = 1; }
if((statue4.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue4.r4); statue4.s = 1; }
if((statue5.s==0)&&(capro.given<3)) { capro.given++;
sysgiven--; printf("%s\n",statue5.r5); statue5.s = 1; }
sysgiven = 5; exit(1); }
else printf(" Dead \n");}
}
void Randomnum(void)
{
int i;
i = random();
i = i%4;
switch(i){
case 0 :p1 = fork();
case 1 :p2 = fork();
case 2 :p3 = fork();
case 3 :p4 = fork();
default: printf("fork fault\n"); break;
} 为什么执行到 p2<0 以后 就在没有 进程执行了 ? 我执行了几十便了还是那样 !
你帮忙调试 看看 ! 回复呀 ! 对不起。我也不懂,你还是找别人问吧。
还有就是你的代码没有用缩进格式来写,看起来确实太痛苦了:) 郁闷!缩进的不好,难看,不过这不是你的错。但是最后一行少一个“}”,再有就是没有#include "unistd.h"。其它的我也没有耐心看了。
每一个case分句最好有一个break,可能问题出在这里,不同的编译器有不同的处理方法。
我虽然程序编得不好,但是非常看重编程风格。 最后缺少一个“}”可能是粘贴的问题,不过我不明白你第三个#include为什么后面没有东西。
我也是执行到p2<0之后就没有了,下面是我的执行结果:
# ./test
fork fault
ABCDEFGHIJ
KLMNOPQRST
UVWXYZabcd
fork fault
ABCDEFGHIJ
KLMNOPQRST
UVWXYZabcd 我改了一下,这是不是你所期望的结果呢?
$ ./a.out
fork fault
ABCDEFGHIJ
KLMNOPQRST
UVWXYZabcd
fork fault
ABCDEFGHIJ
KLMNOPQRST
UVWXYZabcd
$ 郁闷!原来"<unistd>"在这里显示不出来!
页:
1
[2]