Miért nem megy?
Na ez van Írj programot, amely parancssori agrumentumok segítségével két a programoddal azonos könyvtárban lévő szöveges fájl nevét, valamint egy sztringet kap meg. Az első argumentumban megadott fájlban az angol abc betűit tartalmazó szavak vannak egymás alatt. A második argumentumban megadott fájl üres. A programod másolja át az első argumnetumban megadott fájlból azokat a szavakat a második argumentumban megadott fájlba, amelyek tartalmazzák a harmadik argumentumként megkapott sztringet.
A szavakat tartalmazó fájlban minden sorban egy szó szerepel. Nem fordulhat elő olyan, hogy csak egy újsor karakter van megadva egy sorban. A program elindításánál azt feltételezzük, hogy a felhasználó megadja mind a három argumentumot, amelyek létező fájlok nevei, és a sztring is minimum 1 karakter hosszú. Tehát nem kell olyan kivételt kezelni, hogy valamelyik argumentum hiányzik. Na itt a program de sehogy sem jó #include<stdio.h>
#include<stdlib.h>
#include<string.h>
int kereso(char *s1, char *s2);
char tolower(char x);
int my_strlen(char *s);
int main(int argc, char *argv[])
{FILE *f,*f2;
char szo[0];
f=fopen(argv[1],"r");
f2=fopen(argv[2],"w");
if(argc<=3) printf("A programnak 3 bemenet kell!\n");
return -1;
while(!feof(f))
{
fscanf(f,"%s\n",szo);
if(kereso(szo,argv[3]))
{fprintf(f2,"%s\n",szo);
printf("%s\n",szo);
}
fclose(f);
fclose(f2);
system("PAUSE");
return 0;
}
int my_strlen(char *s)
{
int szamlalo=0;
while(s[szamlalo]!='\0')
{szamlalo++;}
return szamlalo;
}
char tolower(char x)
{ int i;
for(i=0;i<26;i++)
{if(x==(65+i)) return (65+i)+32;}
return x;
}
int kereso(char*s1, char*s2)
{
int hossz1,hossz2,b,k;
b=0;
hossz1=my_strlen(s1);
hossz2=my_strlen(s2);
if(hossz2>hossz1) return 0;
for(k=0;k<hossz1-(hossz2-1);++k)
{ if(tolower(s1[k])==tolower(s2[0])){
b++;
while(b)
{if(b==hossz2)
return 1;
if(tolower(s1[k+b])==tolower(s2[k]))
b++;
else{b=0; break;
}
}
}
}
system("PAUSE");
return 0;
}
}
A gond az hogy nem azt csinálja amit kellene neki :S ,s már szerintetek mit rontottam el???





char szo[0];
Ez a sor már durva. Nem írt rá warningot a fordító?










Ha egyáltalán while(!feof(f)) ciklushoz érne a vezérlés akkor is max 1x fut le mert a cikluson belül feltétel nélkül benne van a return 0;
Az int kereso(char*s1, char*s2)-n belül nem értem minek a system("PAUSE"); A tolower az is rettenetes módon van megírva, mellesleg a fordító "sikít" hogy már van ilyen nevű beépített függvény. Ami egyébként ugyanezt a célt szolgálja.
"if(argc<=3) printf("A programnak 3 bemenet kell!\n");
return -1; " itt a return -1 egyébként -1-et nem is szoktak visszaadni main-ből +1-et inkább. Ez már kapásból megakadályozza hogy egyáltalán elinduljon a keresés.
Leellenőrzöd hogy van e 3 paraméter a feladat azt kéri hogy nem kell, ha már ellenőrzöd akkor ezt még a fájlok megnyitása előtt illene.
Abba nem mélyedtem bele hogy a kereso fgv egyáltalán mennyire jó.





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!