Zdravim, chcel by som vas poziadat o pomoc pri probleme, ktory sa mi vyskytol ...Je dany subor, ktory obsahuje pismena,len tak random(mala by to byt DNA sekvencia).Ak sa v subore nachadzaju len pismena A/a , C/c, G/g a T/t ,potom to vyhovuje poziadavke a malo by sa vyvtorit dynamicke jednorozmerne pole,do ktoreho obsah suboru prekopirujem. Ak obsahuje aj ine pismena,ako tie, ktore ma (A/a , C/c, G/g a T/t), tak vypise len hlasku,ze "nevyhovuje" a pod....Neviem,kde je chyba, ale pri krokovani programu som zistil,ze to pole nadobuda vseliake nezmyselne hodnoty...uz po vsetkych moznych upravach a moznostiach, ktore ma napadli som sa rozhodol to uz dalej nemrvit a radsej sa obratit o pomoc.vopred dakujem za kazdu radu
char *n() { FILE *fr; int pocet_znakov=0,i=0; char c; char *pole_subor; int pom=0; if( (fr=fopen("DNAsekvencia.txt","r")) == NULL){ printf("Neotvoreny subor "); } while (c=getc(fr) != EOF){ //zistenie poctu znakov v subore,pre alokaciu pamate pocet_znakov++; } rewind(fr); while (c=getc(fr) != EOF){ //zistenie ci vyhovuje,prechadzam subor po znakoch a kontroluje ci vyhovuje if ( (c == ( ('A') || ('a') || ('C') || ('c') || ('G') || ('g') || ('T') || ('t') ))) pom=1; //len pomocna premenna else pom=0; } if(pom==1) { printf("Podarilo sa nacitat pole"); pole_subor= (char*) malloc (pocet_znakov * sizeof(char)); //vytvorenie 1rozm. dynamickeho pola for (i = 0 ; i < pocet_znakov; i++){ // naplnenie pola obsahom v subore pole_subor[i] = (c = getc(fr)); } } else { printf("nepodarilo"); } printf("\n"); return pole_subor; }
Zabudol som,jedna sa o C code....len pre istotu
Len niekolko postrehov:
getc vracia int
Na chybe by som hned vratil NULL a nenechal to "prepadnut" az nakoniec.
"zistenie ci vyhovuje,prechadzam subor po znakoch a kontroluje ci vyhovuje" ten cyklus zistije len ci vyhovuje posledny znak.
a potom cez aky cyklus mam zistovat,ci vsetky znaky suboru vyhovuju??
Chýba Ti tam aj pretočenie na začiatok súboru.
kde by malo ist to pretocenie??a aky by mal byt ten cyklus na prechadzanie suboru po znakoch?lebo toto je jedine,co ma napada...
Pred for (i = 0 ; i < pocet_znakov; i++) a malloc moze aj zlyhat...
Nejak tak, editoval som to priamo tu, takze chyba sa tam iste najde.
Uz vidim ze okolko if bloku chybaju {}
tak ako si napisal to nemoze byt,lebo ak nemylim,tak operator && sposobi to,ze ked bude vyhovovat prve,dalej uz nejde...cize ako najde velke A potom uz dalej nejde...ci sa mylim?
toto je posledne co mam...neviem uz co stym,ak by bol niekto ochotny mi priamo k tomuto povedat,co je zle a ako to napravit,velmi by som to ocenil,nakolko vsetky dalsie funkcie mi stoja na tejto a aj ked ich mam,nemozem ich vyskusat,ci funguju tak ako maju :/
http://paste42.de/6820/