C If-Else参数被忽略
我正在编写一个程序,将学生ID存储到5个不同实验室的20台电脑阵列中。我几乎明白了,当程序检测到一个已经被使用的ID时,它应该打印一条语句并重新启动程序,询问学生ID。然而,当我的程序检测到一个被使用的ID时,它会继续询问实验室,然后它会打印语句,然后它会继续要求PC进行预订 签出环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
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);