C - načítanie do pola

Sekcia o programovaní, programovacích jazykoch...
Používateľov profilový obrázok
Bird
Používateľ
Používateľ
Príspevky: 2025
Dátum registrácie: So 15. Aug, 2009, 22:39
Bydlisko: TO

C - načítanie do pola

Príspevok od používateľa Bird »

Zdravím chalani.
mam problém s načítanim čísiel do troch rôznych polí. nerobí to tak ako by to malo
tu je zdrojovy subor a vysledok
https://www.dropbox.com/s/qymvflnkwcccwqg/polia.jpg
vidite že v prvom stlpci mam dobre len dve posledne čisla v druhom stlpci mam zle prve dve čisla. posledny stlpec je dobre.
tú šestku načítavam ako velkosť pola.

a zdrojovy kod
Spoiler: ukázať
#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *vstup;
int x=0,i=0;
int pole1[x];
int pole2[x];
int pole3[x];


vstup = fopen("vstup.in","r");
fscanf (vstup, "%d", &x); /*načitanie velkosti pola zo súboru*/

for(i=0; i < x; i++) {
fscanf(vstup,"%d", &pole1);
fscanf(vstup,"%d", &pole2);
fscanf(vstup,"%d", &pole3);
};

fclose(vstup);
return 0;
}


musí to byť nejaká primitívna chyba ale potrebujem pomoc, nemožem na to prísť :D s Cčkom robím znova po pol roku :D
Ďakujem
MacBook Pro 13 (2016) + iPhone 12 mini
PS5 Slim
Používateľov profilový obrázok
materik
Používateľ
Používateľ
Príspevky: 2323
Dátum registrácie: Št 10. Apr, 2008, 14:00
Bydlisko: Prešov

Re: C - načítanie do pola

Príspevok od používateľa materik »

probelm je v tom, ze polia mas staticky alokovane na nulu (int x = 0), a tak potom vpisujes na
rozne miesta v pamati... cize ty si musis pole alokovat az potom, ako ziskas jeho rozmer.
Spoiler: ukázať
int main()
{
FILE *vstup;
int x=0,i=0;

vstup = fopen("vstup.in","r");
fscanf (vstup, "%d", &x); /*naèitanie velkosti pola zo súboru*/

int *pole1 = (int*)malloc(sizeof(int) * x);
int *pole2 = (int*)malloc(sizeof(int) * x);
int *pole3 = (int*)malloc(sizeof(int) * x);
//dalej pokracuj ako to mas uz nakodene
PC -> Topping DX7 Pro+ -> Meze 109 PRO / Microlab B77
Používateľov profilový obrázok
Bird
Používateľ
Používateľ
Príspevky: 2025
Dátum registrácie: So 15. Aug, 2009, 22:39
Bydlisko: TO

Re: C - načítanie do pola

Príspevok od používateľa Bird »

použil som tvoj postup ale vysledok je rovnaký...

a pokial sa nemýlim tak to sú pointery, tie nemám naštudované bohužial :/ bez nich by to nešlo ?

//
materik napísal:cize ty si musis pole alokovat az potom, ako ziskas jeho rozmer.
skusil som aj toto a tiež nič
Spoiler: ukázať
int main()
{
FILE *vstup;
int x=0,i=0;

vstup = fopen("vstup.in","r");
fscanf (vstup, "%d", &x);

int pole1[x];
int pole2[x];
int pole3[x];

for(i=0; i < x; i++) {
fscanf(vstup,"%d", &pole1);
fscanf(vstup,"%d", &pole2);
fscanf(vstup,"%d", &pole3);
};
MacBook Pro 13 (2016) + iPhone 12 mini
PS5 Slim
Používateľov profilový obrázok
materik
Používateľ
Používateľ
Príspevky: 2323
Dátum registrácie: Št 10. Apr, 2008, 14:00
Bydlisko: Prešov

Re: C - načítanie do pola

Príspevok od používateľa materik »

moj zdrojak
Spoiler: ukázať
#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *vstup;
int x=0,i=0;

vstup = fopen("vstup.in","r");
fscanf (vstup, "%d", &x); /*naèitanie velkosti pola zo súboru*/

int *pole1 = (int*)malloc(sizeof(int) * x);
int *pole2 = (int*)malloc(sizeof(int) * x);
int *pole3 = (int*)malloc(sizeof(int) * x);

for(i=0; i < x; i++) {
fscanf(vstup,"%d", &pole1);
fscanf(vstup,"%d", &pole2);
fscanf(vstup,"%d", &pole3);
};

for(i=0; i < x; i++) {
printf("Pr1 %d - ", pole1);
printf("Pr2 %d - ", pole2);
printf("Pr3 %d \n", pole3);
};

getchar();
fclose(vstup);
return 0;
}

a screen
http://www.upnito.sk/0/kyke35trym3ejk7n ... pugp67.PNG

ono, je pravda ze ten vstupny subor som si vytvoril z textaka, podla toho co som videl na screen-e
a tam mi to zbehlo ako si chcel. Netusim ale co to ma byt za subor a nepamatam si presne, ako funguje
fscanf, cize za spravnost nerucim... :-) Kuknem na to vecer, ked mi zvysi cas
Ale ta tvoja "dynamicka alokacia" pola je zla, bez smernikov to nejde ;)
PC -> Topping DX7 Pro+ -> Meze 109 PRO / Microlab B77
Používateľov profilový obrázok
XMilanX
Nový používateľ
Nový používateľ
Príspevky: 153
Dátum registrácie: So 17. Nov, 2007, 08:00
Bydlisko: Senec

Re: C - načítanie do pola

Príspevok od používateľa XMilanX »

S c len zacinam ale prve co som si vsimol je tiez ohladne toho x v poli namiesto deklaracie velkosti pola.
Používateľov profilový obrázok
Bird
Používateľ
Používateľ
Príspevky: 2025
Dátum registrácie: So 15. Aug, 2009, 22:39
Bydlisko: TO

Re: C - načítanie do pola

Príspevok od používateľa Bird »

aha už mi to ide. keď som to skúšal druhý krát tak som použil zlý vstupný súbor a myslel som že to zas nejde.
teraz keď som už použil dobrý vstup tak mi to ide.
Ďakujem za pomoc ;)

inak potom mi to išlo aj bez použitia smerníkov, akurát polia musím zadefinovať až potom ako do premennej načítam rozsah pola, možno je to zlý spôsob ale vyzerá že funguje :)
MacBook Pro 13 (2016) + iPhone 12 mini
PS5 Slim
Používateľov profilový obrázok
materik
Používateľ
Používateľ
Príspevky: 2323
Dátum registrácie: Št 10. Apr, 2008, 14:00
Bydlisko: Prešov

Re: C - načítanie do pola

Príspevok od používateľa materik »

no s C som nerobil uz dost dlho, ale ak si dobre pamatam, tak ak zistujes velkost pola za behu programu
(co je pripad tvojho programu) tak sa dynamickej alokacii nevyhnes. To s tym pole1[x] ti moze zbehnut
ale stale tam moze dochadzat k nespravnemu zapisu do pamate.
Zislo by sa, kebyze to niekto potvrdi... :D A smernikov sa neboj, to je zaklad C-ecka ;)
PC -> Topping DX7 Pro+ -> Meze 109 PRO / Microlab B77
Používateľov profilový obrázok
pEpinko
Používateľ
Používateľ
Príspevky: 850
Dátum registrácie: Po 19. Máj, 2008, 09:31
Bydlisko: BA/NR

Re: C - načítanie do pola

Príspevok od používateľa pEpinko »

Alokacia v style int pole[x] je spravna a funguje, ale iba od c99. Vela implementacii, to ale podporovalo aj predtym, to uz ale nebol standard, cize to nemusi robit vsade to co by sme cakali.

http://stackoverflow.com/questions/1204 ... y-in-stack
Používateľov profilový obrázok
Bird
Používateľ
Používateľ
Príspevky: 2025
Dátum registrácie: So 15. Aug, 2009, 22:39
Bydlisko: TO

Re: C - načítanie do pola

Príspevok od používateľa Bird »

vďaka za dobré správy pEpinko :D
materik napísal:A smernikov sa neboj, to je zaklad C-ecka
no veru. mal by som sa do toho pustiť konečne :D
MacBook Pro 13 (2016) + iPhone 12 mini
PS5 Slim
Používateľov profilový obrázok
Bird
Používateľ
Používateľ
Príspevky: 2025
Dátum registrácie: So 15. Aug, 2009, 22:39
Bydlisko: TO

Re: C - načítanie do pola

Príspevok od používateľa Bird »

ludia nazdar,
počujte, menila sa nejako syntax jazyka ?

lebo ten kod co mam nazaciatku mi fungoval dva roky dozadu,
a teraz mi hadze chybu, že sa neda deklarovat pole tým spôsobom.

predtym mi bez problemov išlo, keď som dal veľkosť pola ako premennú, a neskôr som jej cez scanf priradil hodnotu.
viem to urobiť cez malloc, a potom to ide, ale zaujimalo ma, že prečo sa to už nedá takto:
int x = 0;
scanf("%d", &x);
int pole1[x];
MacBook Pro 13 (2016) + iPhone 12 mini
PS5 Slim

Návrat na "Programovanie"