Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C If-Else参数被忽略_C_If Statement_Struct_Codeblocks - Fatal编程技术网

C If-Else参数被忽略

C If-Else参数被忽略,c,if-statement,struct,codeblocks,C,If Statement,Struct,Codeblocks,我正在编写一个程序,将学生ID存储到5个不同实验室的20台电脑阵列中。我几乎明白了,当程序检测到一个已经被使用的ID时,它应该打印一条语句并重新启动程序,询问学生ID。然而,当我的程序检测到一个被使用的ID时,它会继续询问实验室,然后它会打印语句,然后它会继续要求PC进行预订 签出环 for(r=0;r<20;r++) { if(sId!=l1->pc[r] || sId!=l2->pc[r] || sId!=l3->pc[r] || sId!=l

我正在编写一个程序,将学生ID存储到5个不同实验室的20台电脑阵列中。我几乎明白了,当程序检测到一个已经被使用的ID时,它应该打印一条语句并重新启动程序,询问学生ID。然而,当我的程序检测到一个被使用的ID时,它会继续询问实验室,然后它会打印语句,然后它会继续要求PC进行预订

签出环

for(r=0;r<20;r++)
    {
        if(sId!=l1->pc[r] || sId!=l2->pc[r] || sId!=l3->pc[r] || sId!=l4->pc[r] || sId!=l5->pc[r])
        {
            printf("The Student ID '%i' has not made any booking\n", sId);
            return;
        }
    }
主要

功能:

void check_in(Openlab *l1, Openlab *l2, Openlab *l3, Openlab *l4, Openlab *l5)
{
    int sId,r,lab,comp;

    printf("Please enter your Student ID: ");
    scanf("%i", &sId);

    for(r=0;r<20;r++)
    {
        if(sId!=l1->pc[r] && sId!=l2->pc[r] && sId!=l3->pc[r] && sId!=l4->pc[r] && sId!=l5->pc[r])
        {
            while(lab!=l1->lId && lab!=l2->lId && lab!=l3->lId && lab!=l4->lId && lab!=l5->lId)
            {
                printf("Choose a Open Lab [101,201,301,401,501]: ");
                scanf("%i", &lab);
            }
        }

        else
        {
            printf("The Student ID '%i' has already been used to book a PC!\n", sId);
            break;
        }
    }

    if(l1->vunit!=0 && l2->vunit!=0 && l3->vunit!=0 && l4->vunit!=0 && l5->vunit!=0)
    {
        while(comp>19)
        {
            printf("Choose a PC [0-19]: ");
            scanf("%i", &comp);
        }
    }

    else
    {
        printf("\nNo vacant PC left Open Lab %i!\n\n", lab);
    }

    if(lab==l1->lId)
    {
        //printf("Booking for %i - Lab %i | PC %i ",sId,lab,comp);
        if(l1->vunit!=0)
        {
            l1->vunit--;
            l1->pc[comp] = sId;
        }
    }
    else if(lab==l2->lId)
    {
        //printf("Booking for %i - Lab %i | PC %i ",sId,lab,comp);
        l2->vunit--;
        l2->pc[comp] = sId;
    }
    else if(lab==l3->lId)
    {
        //printf("Booking for %i - Lab %i | PC %i ",sId,lab,comp);
        l3->vunit--;
        l3->pc[comp] = sId;
    }
    else if(lab==l4->lId)
    {
        //printf("Booking for %i - Lab %i | PC %i ",sId,lab,comp);
        l4->vunit--;
        l4->pc[comp] = sId;
    }
    else if(lab==l5->lId)
    {
        //printf("Booking for %i - Lab %i | PC %i ",sId,lab,comp);
        l5->vunit--;
        l5->pc[comp] = sId;
    }
}
退房:

void check_out(Openlab *l1, Openlab *l2, Openlab *l3, Openlab *l4, Openlab *l5)
{
    int sId,r;

    printf("Please Enter your Student ID: ");
    scanf("%i", &sId);

    for(r=0;r<20;r++)
    {
        if(sId==l1->pc[r])
        {
            l1->pc[r] = 0;
            l1->vunit++;
            printf("Removed");
            //return;
        }
        else if(sId==l2->pc[r])
        {
            l2->pc[r] = 0;
            l2->vunit++;
            printf("Removed");
            //return;
        }
        else if(sId==l3->pc[r])
        {
            l3->pc[r] = 0;
            l3->vunit++;
            printf("Removed");
            //return;
        }
        else if(sId==l4->pc[r])
        {
            l4->pc[r] = 0;
            l4->vunit++;
            printf("Removed");
            //return;
        }
        else if(sId==l5->pc[r])
        {
            l5->pc[r] = 0;
            l5->vunit++;
            printf("Removed");
            //return;
        }
    }
}

你的逻辑完全颠倒了。你现在得到它的方式是,它在所有20个插槽中循环,检查所有5个实验室,看看是否有学生已经被分配到其中一个。如果不是,那么你问他们在哪个实验室,然后继续检查。您应该等到循环完成后再询问实验室的情况

你应该让它检查学生是否被分配了,而不是你已经得到了什么,如果他们被分配了,打印出错误消息并从函数返回,因为没有必要继续

for(r=0;r<20;r++)
{
    if(sId==l1->pc[r] || sId==l2->pc[r] || sId==l3->pc[r] || sId==l4->pc[r] || sId==l5->pc[r])
    {
        printf("The Student ID '%i' has already been used to book a PC!\n", sId);
        return;
    }
}

在这种情况下,最好使用switch语句这一行的含义是什么:lab2.pc[20]?顺便说一下,这是一种未定义的行为。在主函数中,while循环在初始化之前使用选项。未初始化的局部变量的值是不确定的,并且看起来是随机的。您可能想阅读以下内容:基于@Someprogrammerdude的观察,您可能希望有一个do-while循环,因为它总是第一次进入循环,然后它将使用条件来查看是否应该再次循环。我明白了。谢谢你的帮助,我现在拿到了。所以我必须小心for循环。再次感谢。也很抱歉回复太晚。我似乎对签出功能有问题。我已经编辑了上面的代码,如果你有时间一定要看一看。谢谢。我看不出有什么问题。最好开始一个新问题,因为你的新问题与原来的问题无关。
void check_out(Openlab *l1, Openlab *l2, Openlab *l3, Openlab *l4, Openlab *l5)
{
    int sId,r;

    printf("Please Enter your Student ID: ");
    scanf("%i", &sId);

    for(r=0;r<20;r++)
    {
        if(sId==l1->pc[r])
        {
            l1->pc[r] = 0;
            l1->vunit++;
            printf("Removed");
            //return;
        }
        else if(sId==l2->pc[r])
        {
            l2->pc[r] = 0;
            l2->vunit++;
            printf("Removed");
            //return;
        }
        else if(sId==l3->pc[r])
        {
            l3->pc[r] = 0;
            l3->vunit++;
            printf("Removed");
            //return;
        }
        else if(sId==l4->pc[r])
        {
            l4->pc[r] = 0;
            l4->vunit++;
            printf("Removed");
            //return;
        }
        else if(sId==l5->pc[r])
        {
            l5->pc[r] = 0;
            l5->vunit++;
            printf("Removed");
            //return;
        }
    }
}
for(r=0;r<20;r++)
{
    if(sId==l1->pc[r] || sId==l2->pc[r] || sId==l3->pc[r] || sId==l4->pc[r] || sId==l5->pc[r])
    {
        printf("The Student ID '%i' has already been used to book a PC!\n", sId);
        return;
    }
}
do
{
    printf("Choose a Open Lab [101,201,301,401,501]:\n");
    scanf("%i", &lab);
}
while(lab!=l1->lId && lab!=l2->lId && lab!=l3->lId && lab!=l4->lId && lab!=l5->lId);