我有一个功能readin()可以读取许多人的姓名及其相应的电话数字并返回输入的名称数。字符“#”用于指示用户输入的结束。
int readin(Employee *emp)
{
int i=0,j;
do { // loop statements to be executed no matter what
printf("Enter name:\n");
scanf("%s",emp->name); // stores name inside structure array
j = (strcmp(emp->name,"#") != 0); // returns 1 if name not equals to #
} while(j);{ // while name is not equals to # , execute code below and loop back 'do'
printf("Enter tel:\n");
scanf("%s",emp->telno);
emp++;
i++;
}
return i;
}
预期结果应该是:
Enter name:
John
Enter tel:
12345678
Enter name:
#
获得的结果:
Enter name:
John
Enter name:
#
Enter tel:
当j = 1时,while循环不会运行,但会循环回到do部分,而不是完全退出循环。当j = 0时,出于某种原因执行while循环中的代码。请指教。
您知道这是工作时的样子
do{
state1;
}
while(statement);
rest of code;
如果陈述为真,它会转到状态部分,然后再次执行,当语句错误时,它将转到代码的其余部分。
在您的情况下,当string!='#'时,您将始终进入do while()循环,并且当语句错误或j==0
您将退出do while循环
我推荐这个:
int readin(Employee* emp)
{
int i = 0, j = 1;
while(j)
{
printf("Enter name:\n");
scanf("%s", &emp->name);
j = (strcmp(emp->name, "#") != 0);
// returns 1 if name not equals to #
if (!j)
break;
printf("Enter tel:\n");
scanf("%s", &emp->telno);
emp++;
i++;
}
return i;
}