Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
Autor | Správa |
---|
Registrovaný: 27.03.10 Prihlásený: 19.04.13 Príspevky: 65 Témy: 26 | 26 |
Ahojte,
mam mensi problemik s programom... ma nacitat hodnoty zo suboru a ulozit ich do
Kód: typedef struct { char znacka[200]; char bluetooth[200]; char kamera[200]; char trieda[200]; } ZAZNAM; hadze mi to ale chybu... incompatible types in assigment of char* to char[200]Kód: char *fgetstr(FILE *fp) { char pom[1000], ch, *ret; int i=0; do { ch = fgetc(fp); pom[i] = ch; i++; }while(ch != 0x0a); pom[i-1] = '\0'; ret = (char *)malloc(strlen(pom)+1); strcpy(ret, pom); return ret; }
void Nacitaj(char *Nazov) { int i; FILE *fp; int c; if((fp = fopen(Nazov,"r")) != NULL) { fscanf(fp,"%d\n", &c); printf("%d\n", &c); for(i=0;i<c;i++) { zaznam[i].znacka = fgetstr(fp); zaznam[i].bluetooth = fgetstr(fp); zaznam[i].kamera = fgetstr(fp); zaznam[i].trieda = fgetstr(fp); } fclose(fp); } }
Vie mi niekto poradit?
Dakujem
|
|
Registrovaný: 11.01.09 Prihlásený: 02.12.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
zdeniatqo píše: zaznam[i].znacka = fgetstr(fp);
Vies. co sa tu snazis spravit? zaznam[i].znacka je smernik na prvy prvok pola char znacka[200]. Cize ty sa snazis prepisat smernik inou adresou. S retazcami sa pracuje inak, na kopirovanie pouzi napr funkciu strcpy. Uprav svoj kod takto:
Kód: strcpy( zaznam[i].znacka, fgetstr(fp) ); strcpy( zaznam[i].bluetooth, fgetstr(fp) ); strcpy( zaznam[i].kamera, fgetstr(fp) ); strcpy( zaznam[i].trieda, fgetstr(fp) ); A aby ti nehadzalo warning vo funkcii printf, pouzi pretypovanie z int* na int: Kód: printf( "%d\n", (int) &c );
|
|
Registrovaný: 27.03.10 Prihlásený: 19.04.13 Príspevky: 65 Témy: 26 | 26 |
vdaka, uz to chybu nehadze
|
|
Registrovaný: 27.03.10 Prihlásený: 19.04.13 Príspevky: 65 Témy: 26 | 26 |
mam dalsiu otazocku..... ako nacitat retazec do dvojrozmerneho pola?
skusala som nacitat pomocou
int p_atributy, p_hodnoty; char retazec[p_atributy][p_hodnoty];
ale hadze mi to chybu pri
strcpy( atributy[i][j], fgetstr(fp) );
pravdepodobne mi nesedia typy premennych, skusala som to nejako prerobit, ale stale mi bud hadzalo chybu alebo rovno krachol program..... vie mi niekto poradit?
vopred vdaka
Kód: void Nacitaj(char *Nazov) { extern int pocet; int p_atributy, p_hodnoty; int i, j; FILE *fp; char retazec[p_atributy][p_hodnoty];
if((fp = fopen(Nazov,"r")) != NULL) { if((fp = fopen(Nazov,"r")) != NULL) { fscanf(fp,"%d\n", &pocet); fscanf(fp,"%d\n", (int)&p_atributy); fscanf(fp,"%d\n", (int)&p_hodnoty); for(i=0;i!=p_atributy;i++) {for(j=0;j!=p_hodnoty;j++) { strcpy( atributy[i][j], fgetstr(fp) ); printf( "%s\n", atributy[i][j] ); } }
for(i=0;i!=pocet;i++) { printf( "%d\n", i ); strcpy( zaznam[i].znacka, fgetstr(fp) ); printf( "%s\n", &zaznam[i].znacka ); strcpy( zaznam[i].bluetooth, fgetstr(fp) ); printf( "%s\n", &zaznam[i].bluetooth ); strcpy( zaznam[i].kamera, fgetstr(fp) ); printf( "%s\n", &zaznam[i].kamera ); strcpy( zaznam[i].trieda, fgetstr(fp) ); printf( "%s\n", zaznam[i].trieda ); fscanf(fp,"%s\n", &zaznam[i].pouzite);
} } fclose(fp); } }
|
|
Registrovaný: 11.01.09 Prihlásený: 02.12.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Zaujimalo by ma, ako ukladas retazce do pola retazec, lebo v kode si to neuviedla. Funkcia strcpy totiz ocakava ako parameter typ char*, co atributy[i][j] nie je ( to je typu char ). Z definicie premennej retazec by malo platit toto:
Citácia: char retazec[p_atributy][p_hodnoty];
p_atributy - pocet stringov v poli p_hotnoty - maximalny pocet znakov pola
Potom retazec[0] je smernik na prvy string v poli, retazec[1] na druhy, atd. Priklad:
Kód: strcpy( retazec[i], fgetstr(fp) );
|
|
Registrovaný: 27.03.10 Prihlásený: 19.04.13 Príspevky: 65 Témy: 26 | 26 |
ale ako nacitat retazec do dvojrozmerneho pola???? retazec[i] je predsa jednorozmerne....
|
|
Registrovaný: 11.01.09 Prihlásený: 02.12.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Tak trocha nerozumiem, ako chces ulozit retazec do dvojrozmerneho pola. Vies mi to trocha popisat? Moj hore uvedeny sposob ti ulozi retazec do dvojrozmerneho pola a uviedol som ti aj popis.
|
|
Registrovaný: 27.03.10 Prihlásený: 19.04.13 Príspevky: 65 Témy: 26 | 26 |
potrebujem docielit to aby mi nacitalo retazec zo suboru a ulozilo mi to pomocou dvoch for cyklov do dvojrozmerneho pola.... nieco ako
retazec[0][0]="jan"
retazec[0][1]="peter"
retazec[0][2]="dusan"
retazec[1][0]="milan"
retazec[1][1]="fero"
retazec[1][2]="jozo"
prepac, ze tolko otravujem, ale nie som velmi zbehla v C....
|
|
Registrovaný: 11.01.09 Prihlásený: 02.12.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
To je v poriadku, na to je forum.
Ak chces ukladat do dvojrozmerneho pola retazce, nemozes ho zadefinovat takto:
Kód: char retazec[p_atributy][p_hodnoty]; To je totiz dvojrozmerne pole, ktore uchovava typ char, co je jeden znak, pripadne cislo 0-255. Pole musis definovat takto: Kód: char* retazec[p_atributy][p_hodnoty]; char* je smernik na char, cize je tam adresa, kde sa bude znak ( pociatocny znak tvojho retazca ) nachadzat. A potom tam mozes ukladat retazce ako si uviedla predtym: Kód: retazec[0][0]="jan" retazec[0][1]="peter" retazec[0][2]="dusan" retazec[1][0]="milan" retazec[1][1]="fero" retazec[1][2]="jozo"
// ale radsej by som pouzil strcpy, ako rovno priradit iba cez znak =
|
|
Registrovaný: 27.03.10 Prihlásený: 19.04.13 Príspevky: 65 Témy: 26 | 26 |
dala som tam char* retazec[i][j]; , chybu sice teraz nevyhodi, program spusti a potom krachne s hlaskou :vo vasom programe sa vyskytla chyba (zlyhanie segmentacie)
Kód: #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> int pocet;
typedef struct { char znacka[200]; char bluetooth[200]; char kamera[200]; char trieda[200]; char pouzite[4]; } ZAZNAMY;
ZAZNAMY zaznamy[20]; Kód: void Nacitaj(char *Nazov) { extern int pocet; int i,j, stlpce; char * zaznamy[i][j]; FILE * fp; int d=1; if((fp = fopen(Nazov,"r")) != NULL) {
fscanf(fp,"%d\n", &pocet); printf( "%d\n", pocet ); fscanf(fp,"%d\n", &stlpce); printf( "%d\n", stlpce );
for(i=0;i!=pocet;i++) {for(j=0;j!=stlpce;j++){ printf( "%d\n", d ); strcpy( zaznamy[i][j], fgetstr(fp) ); printf( "%s\n", &zaznamy[i][j] ); strcpy( zaznamy[i][j], fgetstr(fp) ); printf( "%s\n", &zaznamy[i][j] ); strcpy( zaznamy[i][j], fgetstr(fp) ); printf( "%s\n", &zaznamy[i][j] ); strcpy( zaznamy[i][j], fgetstr(fp) ); printf( "%s\n", &zaznamy[i][j] ); d++; } } fclose(fp); } } Kód: int main(int argc, char *argv[]) { int stlpce, i,j; extern int pocet; char * zaznamy[i][j]; char Volba, fname[500]; int numcols=0; FILE *fp;char *Nazov; char c; int d;
printf("\nZadaj nazov suboru z ktoreho sa ma nacitat obsah zoznamu: "); scanf("%s", fname); printf("%s", fname); Nacitaj(fname); }
|
|
Registrovaný: 11.01.09 Prihlásený: 02.12.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Prezrel som kod len narychlo, lebo nestiham, ale pravdepodobne je chyba tu:
Kód: int i,j, stlpce; char * zaznamy[i][j]; Ked deklarujes premennu bez inicializacie ( cize napr int i = 10; ), tak su v nich hodnoty, ake sa v tejto casti pamati nachadzali pred tym - cize to ber tak, ze su tam nahodne hodnoty. Moze tam byt akekolvek cislo v rozmedzi int. To znamena, v case, ked deklarujes, musis mat premenne i a j uz zname. V cistom C musia byt premenne deklarovane hned na zaciatku funkcie, takze premenne i a j nacitaj niekde v maine napr a predaj ich funkcii nacitaj ako parameter, alebo nejako inak to vymysli. Dalsia chyba je, ze nealokujes ziadne miesto pre kazdy prvok zaznamy[i][j] pomocou malloc. Pretoze char* a char nieco[200] je rozdiel. Dalej toto je tiez zle: Kód: printf( "%s\n", &zaznamy[i][j] ); zaznamy[i][j] uz je retazec, takze operator & tam netreba. Cize uprav na: Kód: printf( "%s\n", zaznamy[i][j] );
Mozu tam bytr este nejake chyby, ale teraz to nestiham otestovat.
|
|
Registrovaný: 27.03.10 Prihlásený: 19.04.13 Príspevky: 65 Témy: 26 | 26 |
a co znamena toto?
Kód: extern unsigned _stklen = 50000U; a error Kód: [Linker error] undefined reference to `WinMain@16' ?
|
|
Registrovaný: 11.01.09 Prihlásený: 02.12.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
zdeniatqo píše: a co znamena toto? Kód: extern unsigned _stklen = 50000U; extern je klucove slovo, kotre oznamuje kompileru, ze premenna _stklen sa nachadza v inom objektovom subore (napr v inom .c subore, ked ho skompijes, tak bude objektovy subor .obj ). zdeniatqo píše: [LInker error] undefined reference to `WinMain@16' Ze sa neda najst funkcia WinMain, ktora ma 4 parametre. Tato funkcia sa pouziva vo Win projekte a ma tvar: Kód: int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd );
Ak potrebujes iba obycajnu main funkciu, tak vo svojom vyvojovom prostredi nedavaj vytvarat Win32 project, ale konzolovu aplikaciu alebo nieco podobne.
|
|
Registrovaný: 27.03.10 Prihlásený: 19.04.13 Príspevky: 65 Témy: 26 | 26 |
a znova otazocka
da sa v C-cku spravit grafika? velmi jednoduchy suradnicovy system, body a kruznica.... ????
nasla som nieco taketo,
Kód: /* Sample program to draw a circle*/ #include<graphics.h> #include<conio.h> main() { int gd=DETECT,gm; initgraph(&gd,&gm,""); /* initialization of graphic mode */ circle(150,150,100); getch(); closegraph(); /* Restore orignal screen mode */ } /* End of program */
ale nechce mi to spustit.... vypisuje mi chyby typu DETECT undeclared, initgraph undeclared... co s tym???
vopred dakujem
|
|
Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v HTML, XHTML, XML, CSS | 3 | 512 | 18.10.2013 8:42 Ďuri | | v PHP, ASP | 2 | 382 | 17.07.2014 21:01 majky358 | | v Redakčné systémy | 4 | 520 | 25.02.2007 15:25 Tom@S | | v PHP, ASP | 1 | 404 | 03.06.2010 22:25 Blackshadow | | v PHP, ASP | 1 | 367 | 10.02.2015 15:36 killer | | v Assembler, C, C++, Pascal, Java | 17 | 830 | 18.02.2012 23:06 fubu | | v HTML, XHTML, XML, CSS | 7 | 607 | 28.08.2008 13:19 ridilla | | v JavaScript, VBScript, Ajax | 2 | 544 | 17.09.2015 20:39 FJanči | | v Redakčné systémy | 9 | 535 | 27.01.2007 14:10 Leachim | | v JavaScript, VBScript, Ajax | 2 | 595 | 30.03.2016 15:29 neopagan | | v HTML, XHTML, XML, CSS | 2 | 713 | 01.05.2007 9:24 mokus | | v Assembler, C, C++, Pascal, Java | 3 | 457 | 21.03.2015 12:32 faraon | | v Delphi, Visual Basic | 2 | 670 | 10.09.2010 13:54 jasug | | v Assembler, C, C++, Pascal, Java | 1 | 466 | 26.02.2010 22:51 chrono | | v Sieťové a internetové programy | 0 | 1556 | 23.01.2015 16:06 Stary | | v Operačné systémy Microsoft | 17 | 2319 | 23.03.2009 10:41 FERDA23 |
|