Kezdőoldal » Számítástechnika » Programozás » Valaki megnézné mit rontottam el?

Valaki megnézné mit rontottam el?

Figyelt kérdés

Van két .txt fájl. Mindegyikben számok vanna egymás alatt. (Az egyikben 10 a másikban 5 szám van egymás alatt.)

Azt szeretném elérni, hogy a program kiírja az azonos tagokat. (Biztos, hogy vannak azonos tagok!)

Valamiért nem működik.


C nyelven volna szükségem a megoldásra. Köszönöm a segítségeteket.



2013. febr. 19. 18:26
 1/8 A kérdező kommentje:

#include<stdio.h>


int main(){


int i, j, a, b;


FILE* BE_A = fopen("a.txt", "r");

FILE* BE_B = fopen("b.txt", "r");


for(i=0;!feof(BE_A);i++){

fscanf(BE_A, "%d\n", &a);

for(j=0;!feof(BE_B);j++){

fscanf(BE_B, "%d\n", &b);

if(a==b){

printf("%d,", a);

}

}

}


close(BE_A);

close(BE_B);

getch();

return 0;

}

2013. febr. 19. 18:27
 2/8 anonim ***** válasza:
Kódot is másolj!
2013. febr. 19. 18:27
Hasznos számodra ez a válasz?
 3/8 A kérdező kommentje:
Itt a kód!
2013. febr. 19. 18:50
 4/8 anonim ***** válasza:
Kemény a ciklusod! :D
2013. febr. 19. 20:02
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:

Én a helyedben tömbökben tárolnám a számokat. Valahogy így:


#include <stdio.h>


int main()

{

int a[10], b[5];

FILE* BE_A, *BE_B;


BE_A = fopen("a.txt", "r");

for(int i=0; i<10; i++)

{

fscanf("%d", &a[i]);

}

fclose(BE_A);


BE_B = fopen("b.txt", "r");

for(int i=0; i<5; i++)

{

fscanf("%d", &b[i]);

}

fclose(BE_B);


for(int i=0; i<5; i++)

{

for(int j=0; j<10; j++)

{

if(a[j]==b[i]){printf("Ez a szam megegyezik: %d\n", a[j]);}

}

}


getchar();

return 0;

}


Persze lehet még finomítani. Pl.: tényleg léteznek a szövegesek? nincs vége a fájlnak? ...

2013. febr. 19. 20:05
Hasznos számodra ez a válasz?
 6/8 A kérdező kommentje:
Köszi működött.
2013. febr. 19. 20:50
 7/8 anonim ***** válasza:
Szívesen. Nem teszteltem, tehát csak úgy beírtam. Örülök, hogy működik. Ha kell valami csak szólj.
2013. febr. 19. 20:54
Hasznos számodra ez a válasz?
 8/8 anonim ***** válasza:

Na, hogy valami hasznos is legyen itt. Az eredeti programodban nagyon durva elvi hibák vannak. Rávilágítanék...

for(i=0;!feof(BE_A);i++){

fscanf(BE_A, "%d\n", &a);

for(j=0;!feof(BE_B);j++){

fscanf(BE_B, "%d\n", &b);

if(a==b){

printf("%d,", a);

}

}

}


Ezt a számlálós ciklust, meg i, j változókat rohadtul nem értem. Mi a fenének pörgeted a számlálókat, ha az égvilágon semmit nem csinálsz velük? Itt nem egy mátrixot jársz be...

Simán while ciklussal kellene, ahol eof a feltétel és a ciklusmagban mindig olvasol.


A másik hatalmas hiba, hogy az BE_A első elemével hasonlítod össze a BE_B összes elemét és ennyi, mivel a B-n egyszer végigmész és ennyi, amiket kiolvastál elvesznek, az A többi elemével már nincs mit összehasonlítani. Ezért kell két tömböt feltölteni és azokat hasonlítgatni.


Ha egyébként van valami előfeltétel a számokra, pl hogy szigorúan monoton rendezettek, akkor ennél szebben, összefuttatással is meg lehet oldani a feladatot.

2013. febr. 19. 21:43
Hasznos számodra ez a válasz?

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

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!