[ Príspevkov: 14 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.03.10
Prihlásený: 19.04.13
Príspevky: 65
Témy: 26 | 26
NapísalOffline : 03.03.2011 17:04 | C - problem v kode

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? :oops:

Dakujem :D


Offline

Skúsený užívateľ
Skúsený užívateľ
C - problem v kode

Registrovaný: 11.01.09
Prihlásený: 08.05.24
Príspevky: 1385
Témy: 9 | 9
Bydlisko: Hrinova
NapísalOffline : 03.03.2011 20:49 | C - problem v kode

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 );


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.03.10
Prihlásený: 19.04.13
Príspevky: 65
Témy: 26 | 26
Napísal autor témyOffline : 03.03.2011 21:25 | C - problem v kode

vdaka, uz to chybu nehadze ;)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.03.10
Prihlásený: 19.04.13
Príspevky: 65
Témy: 26 | 26
Napísal autor témyOffline : 09.03.2011 15:36 | C - problem v kode

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 :D

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);
     }
     
}


Offline

Skúsený užívateľ
Skúsený užívateľ
C - problem v kode

Registrovaný: 11.01.09
Prihlásený: 08.05.24
Príspevky: 1385
Témy: 9 | 9
Bydlisko: Hrinova
NapísalOffline : 09.03.2011 17:49 | C - problem v kode

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) );


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.03.10
Prihlásený: 19.04.13
Príspevky: 65
Témy: 26 | 26
Napísal autor témyOffline : 17.03.2011 15:34 | C - problem v kode

ale ako nacitat retazec do dvojrozmerneho pola???? retazec[i] je predsa jednorozmerne....


Offline

Skúsený užívateľ
Skúsený užívateľ
C - problem v kode

Registrovaný: 11.01.09
Prihlásený: 08.05.24
Príspevky: 1385
Témy: 9 | 9
Bydlisko: Hrinova
NapísalOffline : 17.03.2011 15:45 | C - problem v kode

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.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.03.10
Prihlásený: 19.04.13
Príspevky: 65
Témy: 26 | 26
Napísal autor témyOffline : 17.03.2011 16:21 | C - problem v kode

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....


Offline

Skúsený užívateľ
Skúsený užívateľ
C - problem v kode

Registrovaný: 11.01.09
Prihlásený: 08.05.24
Príspevky: 1385
Témy: 9 | 9
Bydlisko: Hrinova
NapísalOffline : 17.03.2011 17:29 | C - problem v kode

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 =


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.03.10
Prihlásený: 19.04.13
Príspevky: 65
Témy: 26 | 26
Napísal autor témyOffline : 17.03.2011 18:38 | C - problem v kode

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);
}



Offline

Skúsený užívateľ
Skúsený užívateľ
C - problem v kode

Registrovaný: 11.01.09
Prihlásený: 08.05.24
Príspevky: 1385
Témy: 9 | 9
Bydlisko: Hrinova
NapísalOffline : 18.03.2011 9:50 | C - problem v kode

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.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.03.10
Prihlásený: 19.04.13
Príspevky: 65
Témy: 26 | 26
Napísal autor témyOffline : 19.03.2011 11:48 | C - problem v kode

a co znamena toto?

Kód:
extern unsigned _stklen = 50000U;


a error

Kód:
[Linker error] undefined reference to `WinMain@16'
?


Offline

Skúsený užívateľ
Skúsený užívateľ
C - problem v kode

Registrovaný: 11.01.09
Prihlásený: 08.05.24
Príspevky: 1385
Témy: 9 | 9
Bydlisko: Hrinova
NapísalOffline : 19.03.2011 13:03 | C - problem v kode

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.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.03.10
Prihlásený: 19.04.13
Príspevky: 65
Témy: 26 | 26
Napísal autor témyOffline : 23.03.2011 18:28 | C - problem v kode

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 ;)


 [ Príspevkov: 14 ] 


C - problem v kode



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Zobrazenie webu v IE - problem v CSS kode?

v HTML, XHTML, XML, CSS

3

477

18.10.2013 8:42

Ďuri

V tomto fóre nie sú ďalšie neprečítané témy.

Chyba v kode ?

v PHP, ASP

1

386

03.06.2010 22:25

Blackshadow

V tomto fóre nie sú ďalšie neprečítané témy.

chybicka v kode

v Redakčné systémy

4

501

25.02.2007 15:25

Tom@S

V tomto fóre nie sú ďalšie neprečítané témy.

Chyba v kode

v PHP, ASP

2

355

17.07.2014 21:01

majky358

V tomto fóre nie sú ďalšie neprečítané témy.

Skript v kóde nefunguje

v JavaScript, VBScript, Ajax

2

513

17.09.2015 20:39

FJanči

V tomto fóre nie sú ďalšie neprečítané témy.

premenne v kode PHP

v PHP, ASP

1

341

10.02.2015 15:36

killer

V tomto fóre nie sú ďalšie neprečítané témy.

Pascal - chyba v kode

v Assembler, C, C++, Pascal, Java

17

790

18.02.2012 23:06

fubu

V tomto fóre nie sú ďalšie neprečítané témy.

JRidilla.net - V kode

v HTML, XHTML, XML, CSS

7

590

28.08.2008 13:19

ridilla

V tomto fóre nie sú ďalšie neprečítané témy.

Asi chyba v kode

v Redakčné systémy

9

504

27.01.2007 14:10

Leachim

V tomto fóre nie sú ďalšie neprečítané témy.

vyhladanie slova v zdrojovom kode

v JavaScript, VBScript, Ajax

2

565

30.03.2016 15:29

neopagan

V tomto fóre nie sú ďalšie neprečítané témy.

Co je zle v tomto kode ?

v HTML, XHTML, XML, CSS

2

690

01.05.2007 9:24

mokus

V tomto fóre nie sú ďalšie neprečítané témy.

Co je zle v tomto kode

v Assembler, C, C++, Pascal, Java

3

424

21.03.2015 12:32

faraon

V tomto fóre nie sú ďalšie neprečítané témy.

Textový súbor v kóde UTF-16LE

v Delphi, Visual Basic

2

645

10.09.2010 13:54

jasug

V tomto fóre nie sú ďalšie neprečítané témy.

[C++] Pomoc s upravou chyby v kode

v Assembler, C, C++, Pascal, Java

1

436

26.02.2010 22:51

chrono

V tomto fóre nie sú ďalšie neprečítané témy.

M Firefox problém so sťahovaním a GCH problém s updatom

v Sieťové a internetové programy

0

1373

23.01.2015 16:06

Stary

V tomto fóre nie sú ďalšie neprečítané témy.

Problém so zobrazovaním www stránok, problém užívateľa

v Operačné systémy Microsoft

17

2147

23.03.2009 10:41

FERDA23



© 2005 - 2024 PCforum, edited by JanoF