Valaki megnézné mit rontottam el?
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.
#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;
}





É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? ...










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.
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!