do循环执行不正确

问题描述 投票:0回答:1

我有一个功能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循环中的代码。请指教。

c do-while
1个回答
1
投票

您知道这是工作时的样子

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.