Mi a hiba ebben a programban? C++
Az lenne a feladat, hogy egy adott fájlból számokat olvasson be egy tömbbe, kiírja azokat a képernyőre és kiszámolja az összegüket is. Az első két rész talán rendben is van, de az utolsó részfeladat eredményeként mindig egy négyjegyű negatív számot ad ki, miközben a valós összegnek 173-nak kéne lennie.
Itt van maga a program:
int main()
{
FILE *fp;
char str[30];
fp=fopen("Aszamok30.txt", "r");
while(!feof (fp)) {
if (fgets(str, 30, fp))
printf("%s", str);
}
fclose(fp);
int sum=0;
for (int i = 0; i < 30; i++)
{ sum += str[i];
}
cout <<sum<< endl;
return 0;
}
Valaki esetleg megtudná mondani, hogy mit rontottam el? Rosszul adom meg magát a tömböt? Próbáltam javítgatni, de nem túl sok sikerrel. :(
A válaszokat előre is köszönöm!
Az utolsó for-ciklus marhára nem a számok összegét számolja ki, hanem az utolsó beolvasott szám karaktereinek az összegét, de azt is hibásan, mivel nem ellenőrzöd, meddig van a tömb feltöltve.
Ráadásul az feof helyett is az fgets visszatérési értékét kellene kilépési feltételként megadni, mivel az feof hibás beolvasásra nem válik igazzá; még ráadásabbul az fgets-sel nem is lehet együtt használni.
Nagyon szépen köszi a gyors választ! Megpróbáltam kijavítani, de még mindig egy négyjegyű számot ad ki:
int main()
{
FILE *fp;
char str[30];
fp=fopen("Aszamok30.txt", "r");
while(!feof (fp)) {
if (fgets(str, 30, fp))
printf("%s", str);
}
fclose(fp);
int sum=0;
for (int i = 0; i <29; i++)
{ char str= 'a';
int a = str;
sum += str;
}
cout << endl;
cout <<sum<< endl;
return 0;
}
Nem tudom, hogy jó helyre írtam-e a típuskonverziót, vagy hogy tömbnél így kell-e még nagyon-nagyon kezdő vagyok. :(
Az a tanácsom, hogy térj vissza egyszerűbb feladatokhoz egyelőre. Az az érzésem, hogy még ha részletesen meg is értetném veled, hogy ezzel a programmal mi a gond, akkor sem tudnál önállóan további ilyeneket elkészíteni.
A fenti hibák egyikét sem javítottad ki. A módosításodból az tűnik ki, hogy gőzöd sincs, mit csinál a saját programod.
A for ciklusodba a beolvasott szám stringnek a karaktereit adod össze szupán, plusz az esetleges memória szemetet. Először a stringet kéne inté konvertálni, amire elég lehet az std::stoi ezesetben.
Feltételezve hogy a számok új sorba vannak a fájlban ez a kód akár elségséges is lehet.
#include <string>
int main() {
FILE *fp;
char str[30];
fp = fopen("Aszamok30.txt", "r");
int sum = 0;
while (fgets(str, sizeof(str), fp)) {
printf("%s", str);
sum += std::stoi(str);
}
printf("\n%d", sum);
fclose(fp);
return 0;
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!