Da ne davim mnogo i da krenem redom:
Ovo je kod programa:
Code:
#include <stdio.h>
#include <stdlib.h>
void ukljuci(char a, char *s, char d){
/*Funkcija ukljuci sluzi za ukljucivanje novog procitanog znaka u buffer*/
int i;
for (i=1;i<d;i++){
*(s+i-1)=*(s+i);
*(s+i)=a;}
}
void smanji(char *s){
/*Funkcija smanji sluzi za pretvaranje eventualnih velikih slova u niski u mala*/
char i,l;
for(i=0,l=0;i<strlen(s);i++){
l=0;
l=isupper(*(s+i));
if (l) *(s+i)+=32;}
};
void main (int bpar, const char *vpar[]){
/*Argumenti programa su niska karaktera koja se trazi, i fajl u kome se ta niska trazi */
int i,v,r=1;
char c, *rec, *buffer;
FILE *mf;
v=strlen(*vpar[1]);
rec=malloc(v);
rec=vpar[1]; smanji(rec);
buffer=malloc(v);
mf=fopen(vpar[2], "r"); /* C:\Mojfajl.txt */
while((c=fgetc(mf))!=EOF){
ukljuci(c,buffer,v);
smanji(buffer);
r=strcmp(rec, buffer);
if (!r) break;
}
if (!r) printf("U tekstualnom fajlu postoji niska znakova: %s !\n", vpar[1]);
else printf("U tekstualnom fajlu NE postoji niska znakova: %s !\n", vpar[1]);
free(buffer);
fclose(mf);
system("PAUSE");
}
#include <stdio.h>
#include <stdlib.h>
void ukljuci(char a, char *s, char d){
/*Funkcija ukljuci sluzi za ukljucivanje novog procitanog znaka u buffer*/
int i;
for (i=1;i<d;i++){
*(s+i-1)=*(s+i);
*(s+i)=a;}
}
void smanji(char *s){
/*Funkcija smanji sluzi za pretvaranje eventualnih velikih slova u niski u mala*/
char i,l;
for(i=0,l=0;i<strlen(s);i++){
l=0;
l=isupper(*(s+i));
if (l) *(s+i)+=32;}
};
void main (int bpar, const char *vpar[]){
/*Argumenti programa su niska karaktera koja se trazi, i fajl u kome se ta niska trazi */
int i,v,r=1;
char c, *rec, *buffer;
FILE *mf;
v=strlen(*vpar[1]);
rec=malloc(v);
rec=vpar[1]; smanji(rec);
buffer=malloc(v);
mf=fopen(vpar[2], "r"); /* C:\Mojfajl.txt */
while((c=fgetc(mf))!=EOF){
ukljuci(c,buffer,v);
smanji(buffer);
r=strcmp(rec, buffer);
if (!r) break;
}
if (!r) printf("U tekstualnom fajlu postoji niska znakova: %s !\n", vpar[1]);
else printf("U tekstualnom fajlu NE postoji niska znakova: %s !\n", vpar[1]);
free(buffer);
fclose(mf);
system("PAUSE");
}
Kompajler izbacuje sledece warninge:
Code:
27 warning: passing arg 1 of `strlen' makes pointer from integer without a cast
29 warning: assignment discards qualifiers from pointer target type
21 warning: return type of `main' is not `int'
27 warning: passing arg 1 of `strlen' makes pointer from integer without a cast
29 warning: assignment discards qualifiers from pointer target type
21 warning: return type of `main' is not `int'
Sad, prvi warning uopste ne kontam.
Drugi je pretpostavljam da mi ukaze da dodeljujem pointeru podatke koji su odredjenog tipa a nisam stavio konverziju tipa (???)
Treci warning kontam, o tome je vec bilo reci ovde na forumu.
Kada startujem program: proba beograd C:\Mojfajl.txt
izbaci mi poruku "proba.exe has encountered a problem and needs to close..."
Jos jednu stvar bih napomenuo. Posto sam dosta puta, kako bih uvideo gde je problem, ubacivao kod tipa:
Code:
printf("%s", rec); system("PAUSE");
printf("%s", rec); system("PAUSE");
kompajler bi izbacivao meni totalno nebulozne greske tipa: 'v' not defined, first used.... iako jeste definisano, a bez tog koda ne bi bilo nikakvih problema. Ovo mi se desavalo bar 50 puta dok sam pokusavao da trazim greske.
Koristim Bloodshed Dev-C++ v.4.0.
Ako imate bilo kakvih zamerki kako na algoritam, stil ili naravno kod, recite.
Edmondo