Gå til innhold

struct i c, med konstant variabel


Anbefalte innlegg

Hei, hvorfor fungerer ikke dette:

 

const int max=100;
struct personer {

char navn[max];
char etternavn[max];

} person1;

 

når dette fungerer:

 

struct personer {

char navn[100];
char etternavn[100];

} person1;

 

Bruker Visual studio 10 som compiler, dette er loggen:

 

1>------ Build started: Project: test10, Configuration: Debug Win32 ------

1>Build started 14.11.2010 01:41:14.

1>InitializeBuildStatus:

1> Creating "Debug\test10.unsuccessfulbuild" because "AlwaysCreate" was specified.

1>ClCompile:

1> test.c

1>c:\users\steffan\documents\visual studio 2010\projects\test10\test10\test.c(29): error C2057: expected constant expression

1>c:\users\steffan\documents\visual studio 2010\projects\test10\test10\test.c(30): error C2057: expected constant expression

1>c:\users\steffan\documents\visual studio 2010\projects\test10\test10\test.c(30): error C2229: struct 'personer' has an illegal zero-sized array

1>

1>Build FAILED.

1>

1>Time Elapsed 00:00:00.35

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

 

Å her er hele koden:

 

#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0

////////////////////////Huske liste:
////////////////////////1. getchar(); må puttes bak/under alle scanf("",); funksjoner hvis du skal pause med getchar seinere. Eller bruk system(PAUSE);
////////////////////////2. system(PAUSE); printer "Press any key to continue...", derfor skal det ikke brukes
////////////////////////3. %s bruker ikke '&' i scanf("",); funksjoner
////////////////////////4. %s bruker '&' i printf("",); istedenfor
////////////////////////5. NULL er allerede definert som 0 i stdio.h
////////////////////////6. Struct må sammen med variabel set


int main()
{

//const int max=100;

//variables - Obs! Kan ikke lage eget ' rom ' (rom-navn:) før variabler deklareres.

char filnavn[14]="ny.txt"; //path til fil som skal åpnes


   const int max=100;
struct personer {

char navn[max];
char etternavn[max];

} person1;

FILE *fil; //Pointer av type FILE, lager pointeren 'fil'
fil=fopen(filnavn, "w"); /*Peker pointeren på en fil med bruk av fopen  Funksjonen: [ FILE*fopen(char*filename, char*mode)  ----  åpner fila
                         modes=
						 w (overwrite/create new),
						 a (legger til tekst bakerst i en fil),
						 r (leser en fil),
						 r+ (leser og skriver en fil) ]*/

velkomst:

printf("Dette programmet vil lage filen '%s'",&filnavn);

check_existens:

if (fil==0)
{ goto no_existens; } else { goto exists; }

exists:

printf("\n\nFilen er åpnet");

goto add_person;

no_existens:

printf("\n\nFilen kunne ikke åpnes");

goto end;

add_person:

scanf("%s",&person1.navn);
scanf("%s",&person1.etternavn);
getchar();

goto write;

write:

fprintf( fil, "Navn: %s\nEtternavn: %s",&person1.navn, &person1.etternavn);
fclose(fil); //lukker fila

goto end;

end:

   printf("\n\nPress any key to exit");

getchar(); //Venter på press any key

return 0;

}

Endret av steffanhalv
Lenke til kommentar
Videoannonse
Annonse

Hei, hvorfor fungerer ikke dette:

 

const int max=100;
struct personer {

char navn[max];
char etternavn[max];

} person1;

 

Fordi at, paradoksalt nok, er ikke en const int en constant expression.

 

Hvis en array i C (vel, C90) er deklarert med en størrelse, så må denne størrelsen være en constant expression. En variabel (enda den representerer en verdi som ikke skal endres, altså en const) er ikke en constant expression. Derfor klager kompilatoren.

 

I C99 kan du bruke VLA-er. Evt. kan du bruke en #define, slik foreslått alt.

  • Liker 1
Lenke til kommentar

Hårek:

Nei, er ikke fra darkbasic, så bare noen andre gjorde det og syntes det virket veldig oversiktlig. Hvorfor burde jeg ikke bruke det på den måten, og hvordan burde det brukes? Er det bedre med classer som gjør forskjellige ting og kalle på det isteden kansje? #define var ikke så dumt å bruke nei.

 

zotbar1234:

Takk for svar, da forstår jeg litt mer hvorfor det ikke fungerer. Dumt at arrayer må være konstant, har brukt gamemaker i flere år hvor jeg kunne ha arrays med variable verdier.

 

Men vet forresten noen om et grafisk bibliotek for C jeg kan laste ned gratis? Kipt, men jeg må holde meg til c og ikke c++ pga. skolen. Å jeg ser liten nytte i å lage programmer jeg ikke kan fremstille grafisk. Det er ikke noe gøy heller, mye morsommere når det er grafikk inn i bildet.

Endret av steffanhalv
Lenke til kommentar

"Go To Statement Considered Harmful"

http://www.u.arizona.edu/~rubinson/copyright_violations/Go_To_Considered_Harmful.html

Skrevet av Edsger W. Dijkstra i 1968.

Så ikke noe nytt at at "goto" er upopulært.

http://en.wikipedia.org/wiki/Considered_harmful

 

Du har overbrukt "goto" i koden din,kunne og burde vært skrevet uten "goto".

De språk som har "goto" er det et vektøy som alt annet,

det og skjønne hva som er så ille med "goto" er en god start.

 

The goto statement itself can be just as graceful.

Just because some people misuse it doesn't make it evil.

It's a tool like everything else.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...