如何在 while 循环中重置 do while 循环?

How to reset do while loop within while loop?

#include <stdio.h>

int main()
{

int comp,loop=1,tcomp=0;
char cont;
char name[50];
float donate=0,total,gtotal;

printf("\nGot representative? [Y to continue]: ");
scanf("%s", &cont);

while(cont=='y'){
    printf("\nRepresentative name : ");
    scanf("%s", &name);
    printf("How many companies? : ");
    scanf("%d", &comp);
    tcomp+=comp;
    do{
        printf("Enter amount of donation : ");
        scanf("%f", &donate); loop++;
        total+=donate;}
        while(loop<=comp);
    printf("%s : %.2f\n", name, total);

    printf("\nGot representative? [Y to continue]: ");
    scanf("%s", &cont);}


    printf("\nTotal Representative : %d", tcomp);
    gtotal+=total;
    printf("\nTotal Donations : %.2f\n", gtotal);
}

当前输出:

Got representative? [Y to continue]: y

Representative name : ABC

How many companies? : 3

Enter amount of donation : 1

Enter amount of donation : 2

Enter amount of donation : 3

ABC : 6.00

Got representative? [Y to continue]: y

Representative name : ZXC

How many companies? : 3

Enter amount of donation : 1

ZXC : 7.00

正如您在这里看到的,第二个循环没有重置,它正在对第一个循环的数字求和。我该如何纠正这个问题?我如何使循环每次都重新开始? p/s : 我被专门要求使用 while 并执行 while 循环。

在您更正后的代码下方。

int main()
{

    int comp,loop=1,tcomp=0;
    char cont;
    char name[50];
    float donate=0,total=0,gtotal=0;

    printf("\nGot representative? [Y to continue]: ");
    scanf("%c", &cont);

    while(cont=='y')
    {
        printf("\nRepresentative name : ");
        scanf("%s", name);
        printf("How many companies? : ");
        scanf("%d", &comp);
        tcomp+=comp;
        loop=0;
        total=0;
        do
        {
            printf("Enter amount of donation : ");
            scanf("%f", &donate); loop++;
            total+=donate;
        }
        while(loop<comp);

        printf("%s : %.2f\n", name, total);

        printf("\nGot representative? [Y to continue]: ");
        scanf("%c", &cont);
        gtotal+=total;
    }


    printf("\nTotal Representative : %d", tcomp);
    printf("\nTotal Donations : %.2f\n", gtotal);

    return 0;
}

如您所见:

  1. 您必须在每个询问金额的循环之前重置 loop 变量。
  2. 您必须在该循环之前重置 total
  3. 您必须为第一个 while 循环的每次迭代保存到 gtotal
  4. 您必须使用 %c 而不是 %s 来获取单个字符:scanf("%c", &cont);