Gå til innhold

C++ problemer når jeg bruker static


Anbefalte innlegg

Skrevet

#include <iostream>
using namespace std;

void lol();
int main(int numberofargs, char* psyz[])
{

cout<<"The password is: ";

lol();
cout<< password;
}


void lol()
{
   static int password=144;
}

Hvorfor blir ikke 144 printet ut ? Skal ikke static gjøre variabelen tilgjengelig utenfor dens function ?

Videoannonse
Annonse
Skrevet (endret)

Nei. static gjør (i denne sammenhengen) at tallet fortsetter å eksistere i funksjonen gjennom hele programmet, i stedet for å bli skapt på nytt hver gang funksjonen kalles.

 

Hvis du skriver:

 

#include <iostream>

int lol();

int main()
{
    std::cout << "The password is: " << lol() << std::endl;
}

int lol()
{
    static int password = 144;
 return password;
}

 

vil programmet gjøre som du forventer.

 

 

(NB: Det er vanlig høflighet (eller konvensjon, om du vil) å kalle argumentene til main() for hhv. argc (argument count) og argv (argument vector).)

 

Edit: Hadde forskjellig returtyper på prototype og definisjon av lol()

Endret av Myubi
Skrevet

I utgangspunktet ikke (du kan gjøre det om du konstruerer en plattform for å takle det, men det sier seg selv at det ikke er spesielt flyttbart...). Vanlig fremgangsmåte er å lagre det til en fil e.l. og lese det inn fra filen neste gang programmet kjøres.

Skrevet

Tja... du kan jo lage et pogram som regenererer seg selv med hardkodede verdier for de variablene du ønsker skal være persistente. Så må programmet erstatte sin egen lagrede originalkode med den nye før det terminerer.

 

Eyh, Myubi, TheGreatDebate er definitivt en av de artigste låtene fra SDIT ;-)

Skrevet
Går det an og lagre data i en variabel som blir der uansett om programmet er avsluttet?

Hva slags data er det du ønsker å lagre, og for hvor lenge?

 

Hvis du kan bruke en int, så kan du bruke returverdien fra main(). Spørsmålet så blir hvorvidt OSet du bruker tar vare på denne verdien, og hvor lenge den i så fall er tilgjengelig.

 

Det ville vel strengt tatt være enklere å lagre verdiene til en fil som du så kan aksessere hver gang du kjører programmet for å hente inn og skrive ut de data du måtte ønske å ta vare på...

Skrevet
Det ville vel strengt tatt være enklere å lagre verdiene til en fil som du så kan aksessere hver gang du kjører programmet for å hente inn og skrive ut de data du måtte ønske å ta vare på...

Joda, men hva slags filer er det mest vanlig å lagre data på da? regner med at det ikke er .txt filer?

Skrevet

en binærfil?

#include <stdio.h>

int savepw(char *filename)
{
 if(!(FILE *fp = fopen(filename, "wb")))
   return 1;

 int val = lol();

 fwrite(&val, sizeof(int), 1, fp);

 fclose(fp);
}

Skrevet
Det ville vel strengt tatt være enklere å lagre verdiene til en fil som du så kan aksessere hver gang du kjører programmet for å hente inn og skrive ut de data du måtte ønske å ta vare på...

Joda, men hva slags filer er det mest vanlig å lagre data på da? regner med at det ikke er .txt filer?

Spørs jo helt på hva slags detaljer du skal lagre.

Er det programinnstillinger, så pleier disse ofte å være lagret i akkurat tekstfiler, ofte med endelsen .ini eller .cfg.

Hva slags endelse du bruker på filene er egentlig helt opp til deg, men det finnes jo en viss etikette. (Ikke bruke .exe på tekstfiler osv.)

Skrevet

Og skrive til slike filer som for eks. ini eller cfg. Er det det samme som og skrive til en .txt fil da eller? Ved å bruke fstream? Eller er det helt egne funksjoner til å skrive til slike filer?

Skrevet (endret)

Dersom du skal gjøre det selv uten å bruke noen andres biblioteker (unntatt std bibliotekter), så lager du gjerne en klasse som bruker fstream osv, ja.

Hva filen heter velger du når du bruker std::fstream::open(NAVN_HER), og da kan NAVN_HER være nesten hva du vil, f.eks. innstillinger.ini, eller innstillinger.bin om du vil.

Endret av Nazgul

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