2015-09-18 19 views
-2
#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); 
} 

Токовый выход:Как сбросить цикл while во время цикла?

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 и do while loop.

+0

ли у Вас взглянуть на предупреждение компилятор выкладывает? –

+0

Предупреждений нет. – BongMeister

+0

Сделать цикл = 0 во внешнем цикле. – Avinash

ответ

0

Ниже исправленного кода.

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. Вы должны сохранить до gtotal для каждой итерации первого цикла while.
  4. Вы должны использовать% С вместо% S, чтобы получить один символ: scanf("%c", &cont);
+0

Я знаю, что мне нужно использовать% c для одного символа, но по какой-то причине мой код перестанет работать после первого цикла, если я использую% c. Вы случайно знали, почему? (Я использую код) – BongMeister

+0

@BongMeister Я не знаю. Скомпилированный на Debian с gcc i работает хорошо ... – LPs

Смежные вопросы