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:
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'.