Stránka: 1 z 1
| [ Príspevkov: 15 ] | |
| Autor | Správa |
|---|
Registrovaný: 17.02.09 Prihlásený: 15.04.26 Príspevky: 454 Témy: 32 | 32 Bydlisko: Bytča(okres... |
Zdravím vedel by mi niekto povedať ako by sa mala zapísať táto časť kódu ? Potrebujem len príjsť nato ako môžem použiť premennú "a" do ktorej uložím hodnotu ktorá vracia funkcia bunky vo funkcií strtod. Lebo keď to porovnám tak mi to vždy vypíše že x je 0. Kód: int min(int argc,char *argv[]){ char *word; char *str; int i = 0; double x; double y=99999; char *a;
a = bunky (argv, i); char *newline = strchr(a, '\n' ); if ( newline ) *newline = 0; while(1){ x = strtod(a, &str); if( x < y){ y = x; printf("%f", y); } } }
char* bunky(char *argv[], int i){ if(strcmp(argv[2], "row")==0){ char *str; char *word; char pole[1024]; int a; double x = strtod(argv[3], &str); while(i < x){
i++; fgets(pole, sizeof(pole), stdin); word = strtok(pole, " "); while(word != NULL){ return word; } } } }
_________________ MB:Asus p5q pro, CPU:Intel q9400 2.67Ghz @ 3.2Ghz Vcore:1.3, GPU:Gigabyte gtx560 830/4008 @ 920/4300 , PSU: EnermaxPRO82 525W , RAM:4GB Kingstone 1066MHz CL5@ 901Mhz CL5, HDD: Western Digital 320GB AAKS , CPU cooler: Scythe Ninja 2
Rev. B, Case: Cooler Master Elite 330 |
|
Registrovaný: 08.03.09 Prihlásený: 17.01.25 Príspevky: 1116 Témy: 88 | 88 Bydlisko: 00100100 | |
Registrovaný: 17.02.09 Prihlásený: 15.04.26 Príspevky: 454 Témy: 32 | 32 Bydlisko: Bytča(okres... |
Môžeš mi troška napovedať kde robím chybu ? napr keď cez fgets načítam riadok kde bude "12345 256" tak potom cez strtok sa mi uloží pointer na 12345. Keď dám to strtod do tej funkcie bunky tak mi to vráti že x je 12345 čož je dobre, ale keď už to chcem spraviť tak že vrátim hodnotu word, vložím ju do premnnej "a" a potom to chcem porovnať cez strtod tak už mi to nejako nejde. Tie parametre v strtod by som mal mať dobre nie?
// Spojený príspevok Sob 15.11.14 23:21
I tried everything. Však aj keď to debugujem a prezerám si hodnoty tak premenná "a" má rovnakú hodnotu ako word lenže to strtod to proste nevezme a vždy hodí 0.
_________________ MB:Asus p5q pro, CPU:Intel q9400 2.67Ghz @ 3.2Ghz Vcore:1.3, GPU:Gigabyte gtx560 830/4008 @ 920/4300 , PSU: EnermaxPRO82 525W , RAM:4GB Kingstone 1066MHz CL5@ 901Mhz CL5, HDD: Western Digital 320GB AAKS , CPU cooler: Scythe Ninja 2
Rev. B, Case: Cooler Master Elite 330 |
|
Registrovaný: 08.03.09 Prihlásený: 17.01.25 Príspevky: 1116 Témy: 88 | 88 Bydlisko: 00100100 |
Ak to a obsahuje retazec co chces tak by to malo ist. Nemoze to byt tym, ze to word je lokalna premenna a ta zanikne na konci funkcie bunky a ty akoby vracias pointer na retazec ktory zanikne? ale to by potom to a neobsahovalo dobru hodnotu ako tvrdis ty.
_________________ Programming is The Best
Hackers Are Not Crackers!!! Hackers build things, crackers break them!
;-) |
|
Registrovaný: 17.02.09 Prihlásený: 15.04.26 Príspevky: 454 Témy: 32 | 32 Bydlisko: Bytča(okres... |
No hej, mňa ešte napdá že by chyba mohla byť v tom že funkcia bunnky mi proste reťazec vrátiť nemôže ? nemám to nejako zle deklarované ? Kód: int min(int argc,char *argv[]){ char *word; char *str; int i = 0; double x; double y=99999; char *a;
a = bunky (argv, i); // Keď dám v debugru display a, tak to "a" má úplne rovnaký tvar ako malo word, word mi už zaniklo. "a" má tvar 0x... "12345" char *newline = strchr(a, '\n' ); if ( newline ) *newline = 0; while(1){ x = strtod(a, &str); // A tu mi to proste nespracuje hodí do x 0, aj do str 0 if( x < y){ y = x; printf("%f", y); } } }
char* bunky(char *argv[], int i){ if(strcmp(argv[2], "row")==0){ char *str; char *word; char pole[1024]; int a; double x = strtod(argv[3], &str); while(i < x){
i++; fgets(pole, sizeof(pole), stdin); // Majme reťazec 12345 6478 698 word = strtok(pole, " "); // Rozdelíme ho na tokeny, a word bude pointer na prvý tzn, 123456. Ak dám pri debugovaní display word tak mi ukáže nejaku 16tkovu adresu a potom "123456" while(word != NULL){ return word; // Vrátim word } } } }
_________________ MB:Asus p5q pro, CPU:Intel q9400 2.67Ghz @ 3.2Ghz Vcore:1.3, GPU:Gigabyte gtx560 830/4008 @ 920/4300 , PSU: EnermaxPRO82 525W , RAM:4GB Kingstone 1066MHz CL5@ 901Mhz CL5, HDD: Western Digital 320GB AAKS , CPU cooler: Scythe Ninja 2
Rev. B, Case: Cooler Master Elite 330 |
|
Registrovaný: 08.03.09 Prihlásený: 17.01.25 Príspevky: 1116 Témy: 88 | 88 Bydlisko: 00100100 |
Skus pouzit strcpy namiesto priameho priradenia, najlepsie este v tej funkcii, takze daj to a ako globalnu premennu a prirad to namiesto vracania alebo ako parameter cez ukazatel.
_________________ Programming is The Best
Hackers Are Not Crackers!!! Hackers build things, crackers break them!
;-) |
|
Registrovaný: 17.02.09 Prihlásený: 15.04.26 Príspevky: 454 Témy: 32 | 32 Bydlisko: Bytča(okres... |
Segmentation fault. Ale ináč rád by som sa globálny premenným vyhol  .
_________________ MB:Asus p5q pro, CPU:Intel q9400 2.67Ghz @ 3.2Ghz Vcore:1.3, GPU:Gigabyte gtx560 830/4008 @ 920/4300 , PSU: EnermaxPRO82 525W , RAM:4GB Kingstone 1066MHz CL5@ 901Mhz CL5, HDD: Western Digital 320GB AAKS , CPU cooler: Scythe Ninja 2
Rev. B, Case: Cooler Master Elite 330 |
|
Registrovaný: 08.03.09 Prihlásený: 17.01.25 Príspevky: 1116 Témy: 88 | 88 Bydlisko: 00100100 |
Ty chces, aby ta funkcia bunky vracala postupne vsetky cisla(vo forme retazcov) zo zadaneho retazca?
_________________ Programming is The Best
Hackers Are Not Crackers!!! Hackers build things, crackers break them!
;-) |
|
Registrovaný: 17.02.09 Prihlásený: 15.04.26 Príspevky: 454 Témy: 32 | 32 Bydlisko: Bytča(okres... |
Ano, ide o to že ja chcem spraviť funkciu ktorá mi bude vracať v podstate tie tokeny, a ja si ich potom v jednotlivých funkciach už spracujem.
_________________ MB:Asus p5q pro, CPU:Intel q9400 2.67Ghz @ 3.2Ghz Vcore:1.3, GPU:Gigabyte gtx560 830/4008 @ 920/4300 , PSU: EnermaxPRO82 525W , RAM:4GB Kingstone 1066MHz CL5@ 901Mhz CL5, HDD: Western Digital 320GB AAKS , CPU cooler: Scythe Ninja 2
Rev. B, Case: Cooler Master Elite 330 |
|
Registrovaný: 08.03.09 Prihlásený: 17.01.25 Príspevky: 1116 Témy: 88 | 88 Bydlisko: 00100100 |
Ten tvoj napad s tymto postupnym vracanim mi pripomina prikaz yield zo C#  , tu je moj napad ako na to bez globalnych premennych. Kód: #include <stdio.h> #include <stdlib.h> #include <string.h>
void bunky(int bol, char * a) { char s[] = "123 456 789 0"; char znaky[] = " "; char * ds; if(bol == 0) ds = strtok(s, znaky); else ds = strtok(NULL, znaky); if(ds != NULL) strcpy(a, ds); else strcpy(a, "error"); }
int main(int argc,char *argv[]){ char a[100]; bunky(0, a); while(strcmp(a, "error") != 0) { double x = strtod(a, NULL); printf("%s\n", a); printf("%f\n", x); bunky(1, a); } }
_________________ Programming is The Best
Hackers Are Not Crackers!!! Hackers build things, crackers break them!
;-) |
|
Registrovaný: 14.03.11 Prihlásený: 08.09.26 Príspevky: 815 Témy: 23 | 23 Bydlisko: Bratislava |
Caliente píše: Môžeš mi troška napovedať kde robím chybu ? napr keď cez fgets načítam riadok kde bude "12345 256" tak potom cez strtok sa mi uloží pointer na 12345. Podľa Frasera Returning a value from a function is a two-step process. First, specify the type of value the function will return, and second, using the return statement, pass a return value of that type: double example() { double a = 8.05; // do some stuff return a; } Returning Handles You need to take care when you return a handle from a function. ■Caution Never return a handle to a variable of local scope to a function, because it will not be a valid handle on exiting the function. Ja som v jednom štádiu paranoje prerábal výstupné premenné na vstupné. A BTW, double y=99999; by som si nedovolil napísať.
|
|
Registrovaný: 17.02.09 Prihlásený: 15.04.26 Príspevky: 454 Témy: 32 | 32 Bydlisko: Bytča(okres... |
To čo postol reDo fungovalo, ale nakoniec som sa trocha zasekol a nedokázal som to prerobiť do podoby do ktorej som potreboval, teraz už je neskoro  . Ak správne chápem to čo si postol tak potom stále nechápem ako to spraviť tak ako chcem.
_________________ MB:Asus p5q pro, CPU:Intel q9400 2.67Ghz @ 3.2Ghz Vcore:1.3, GPU:Gigabyte gtx560 830/4008 @ 920/4300 , PSU: EnermaxPRO82 525W , RAM:4GB Kingstone 1066MHz CL5@ 901Mhz CL5, HDD: Western Digital 320GB AAKS , CPU cooler: Scythe Ninja 2
Rev. B, Case: Cooler Master Elite 330 |
|
Registrovaný: 08.03.09 Prihlásený: 17.01.25 Príspevky: 1116 Témy: 88 | 88 Bydlisko: 00100100 |
Ty si postol odpoved a potom si ju zmazal, skusil som to podla nej prerobit, dalo by sa to len tak, ze by si dodaval ten nacitany retazec ako parameter alebo by si ho niekde drzal ako globalnu premennu pretoze lokalne premenne v tej funkcii zanikaju.
_________________ Programming is The Best
Hackers Are Not Crackers!!! Hackers build things, crackers break them!
;-) |
|
Registrovaný: 14.03.11 Prihlásený: 08.09.26 Príspevky: 815 Témy: 23 | 23 Bydlisko: Bratislava |
Nemusí to byť práve globálna premenná.
|
|
Registrovaný: 08.03.09 Prihlásený: 17.01.25 Príspevky: 1116 Témy: 88 | 88 Bydlisko: 00100100 |
Mohol by si napisat tvoj napad? staticka ?
_________________ Programming is The Best
Hackers Are Not Crackers!!! Hackers build things, crackers break them!
;-) |
|
Stránka: 1 z 1
| [ Príspevkov: 15 ] | |
|