Kezdőoldal » Számítástechnika » Programozás » Mi a hiba ebben a programban? C++

Mi a hiba ebben a programban? C++

Figyelt kérdés

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!



2021. jan. 3. 19:05
 1/6 anonim ***** válasza:
Csak addig összegezz, amíg van a tömbben adat, és szerintem a típuskonverzió sem történik meg automatikusan char-ból int-be.
2021. jan. 3. 19:14
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:

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.

2021. jan. 3. 20:14
Hasznos számodra ez a válasz?
 3/6 A kérdező kommentje:

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

2021. jan. 3. 20:24
 4/6 anonim ***** válasza:
100%

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.

2021. jan. 3. 20:52
Hasznos számodra ez a válasz?
 5/6 A kérdező kommentje:
Köszönöm. Igazatok van. Ment a zöld mindenkinek, aki végigszenvedte a hülyeségeimet.
2021. jan. 3. 22:16
 6/6 anonim ***** válasza:

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;

}

2021. jan. 4. 02:37
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!