Informatică, întrebare adresată de trymon2795, 8 ani în urmă

De ce imi spune codeblocks ca e o bucla infinita?
c = fgetc(fin);
while(c != '\n'){
while(c != '+'){
if(c != '#')
s = s*10 + (c-'A');
c = fgetc(fin);
}
s2 += s;
s = 0;
c = fgetc(fin);
}

Răspunsuri la întrebare

Răspuns de originpointsapproval
0

Răspuns:

Aceasta bucla este destinata sa parcurga caracterele dintr-un fisier, pana cand gaseste un caracter '+'. Atunci, bucla interna trebuie sa se opreasca, iar bucla externa sa continui sa parcurga fisierul. Din pacate, bucla externa nu are nicio conditie de oprire, astfel incat va continua sa ruleze fara sa se opreasca vreodata.

Pentru a rezolva aceasta problema, trebuie sa adaugati o conditie de oprire pentru bucla externa. De exemplu, puteti verifica daca s-a ajuns la sfarsitul fisierului folosind functia feof():

c = fgetc(fin);

while(!feof(fin) && c != '\n'){

 while(c != '+'){

   if(c != '#')

     s = s*10 + (c-'A');

   c = fgetc(fin);

 }

 s2 += s;

 s = 0;

 c = fgetc(fin);

}

In acest fel, bucla se va opri atunci cand se ajunge la sfarsitul fisierului sau cand se gaseste un caracter '\n'.

Alte întrebări interesante