/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Array til variabel...
Fra : pingpong


Dato : 26-10-02 11:10

Ok, jeg er ved at lave et program hvor jeg læser ind fra en fil til et
array...
Jeg læser med getc ind i et array...
Jeg mangler en metode hvorfra jeg kan tage tal(chars) og sætte dem sammen
til et int.

Eksempel:
[0 | 1 | 2 | 3 ]
[= | 3 | 4 | 8]
Figuren viser et array[4] hvor de indlæste værdier fra getc er '=348'
Spørgsmålet er så: Hvordan får jeg læst de 3, 4 og 8 fra arrayet om til en
integer 348 som jeg kan tilskrive en variabel?
Det er standart C og ikke C++ :c)







 
 
Bertel Lund Hansen (26-10-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 26-10-02 11:22

pingpong skrev:

>Figuren viser et array[4] hvor de indlæste værdier fra getc er '=348'
>Spørgsmålet er så: Hvordan får jeg læst de 3, 4 og 8 fra arrayet om til en
>integer 348 som jeg kan tilskrive en variabel?

enum { CIFRE=3 }

int n, tal=0;
for (n=0; n<CIFRE; ++n) tal = tal*10+array[n];

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Morten F. Hansen (26-10-2002)
Kommentar
Fra : Morten F. Hansen


Dato : 26-10-02 12:09

"pingpong" <ajmagard@hotmail.com> wrote:
> Ok, jeg er ved at lave et program hvor jeg læser ind fra en fil til et
> array...
> Jeg læser med getc ind i et array...
> Jeg mangler en metode hvorfra jeg kan tage tal(chars) og sætte dem sammen
> til et int.

Prøv engang at kigge på fscanf().. Den kan læse tal fra en fil, og smide
dem direkte ind i variabler. Kan være det løser dit problem bedre end
metoden med arrays. F.eks. noget ala følgende:

FILE *stream;
int i;
int num_fields_read;

// Open file
stream = fopen("myfile.txt", "rb");
if (stream == NULL)
{
// Handle error
}

// Read an int from the file
num_fields_read = fscanf(stream, "%d", i);
if (num_fields_read != 1)
{
// Handle error
}

// Close file
fclose(stream);



Thomas Lykkeberg (26-10-2002)
Kommentar
Fra : Thomas Lykkeberg


Dato : 26-10-02 12:50

On Sat, 26 Oct 2002 12:10:23 +0200, "pingpong" <ajmagard@hotmail.com>
wrote:

>Eksempel:
>[0 | 1 | 2 | 3 ]
>[= | 3 | 4 | 8]
>Figuren viser et array[4] hvor de indlæste værdier fra getc er '=348'
>Spørgsmålet er så: Hvordan får jeg læst de 3, 4 og 8 fra arrayet om til en
>integer 348 som jeg kan tilskrive en variabel?
>Det er standart C og ikke C++ :c)
Jeg ved ikke om jeg forstår dit spørgsmål, men jeg vil da prøve
alligevel:

unsigned char indata[4] = { '=','3','4','8' };

int value;

value = (indata[1] - '0') * 100;
value = value + ((indata[2] - '0') * 10);
value = value + (indate[3] - '0');

Så skulle "value" indeholde værdien 348.

Er det sådan noget du er ude efter? så kunne du bruge:

sscanf(&indata[0],"=%d",&value);

Dette vil også virke.

/Thomas

Byrial Jensen (27-10-2002)
Kommentar
Fra : Byrial Jensen


Dato : 27-10-02 09:08

pingpong <ajmagard@hotmail.com> skrev:
> Ok, jeg er ved at lave et program hvor jeg læser ind fra en fil til et
> array...
> Jeg læser med getc ind i et array...
> Jeg mangler en metode hvorfra jeg kan tage tal(chars) og sætte dem sammen
> til et int.

Foruden de nævnte metoder (at tage ét ciffer ad gangen i en løkke
(husk at trække '0' fra hvert ciffer ved den løsning, Bertel) og
scanf) er der også standardfunktionerne:

atoi: Omsæt streng til int
atol: Omsæt streng til long
atoll: Omsæt streng til long long
strtol: Omsæt streng i et vilkårlig talsystem til long med bedre
mulighed for fejlhåndtering end i ovenstående funktioner
strtoul: Som strtol bortset at der omsættes til unsigned long

--
Skal musik- og edb-industrien have ret til fratage forbrugerne deres
rettigheder i henhold til Ophavsretloven, begrænse konkurrencen og
fremme monopoldannelse ved hjælp af tekniske midler? Sig nej! Nu!
Støt underskriftsindsamlingen på http://www.digitalforbruger.dk

pingpong (27-10-2002)
Kommentar
Fra : pingpong


Dato : 27-10-02 09:29

Tak for svarene, jeg håbede lidt at der var en 'lettere' måde at gøre det
på, uden at skulle omregne hvert ciffer i forhold til dets position, men det
virker, og det er jo helt fint så :c)

"Byrial Jensen" <bjensen@nospam.dk> wrote in message
news:slrnarm1kv.12b.bjensen@ask.ask...
> pingpong <ajmagard@hotmail.com> skrev:
> > Ok, jeg er ved at lave et program hvor jeg læser ind fra en fil til et
> > array...
> > Jeg læser med getc ind i et array...
> > Jeg mangler en metode hvorfra jeg kan tage tal(chars) og sætte dem
sammen
> > til et int.
>
> Foruden de nævnte metoder (at tage ét ciffer ad gangen i en løkke
> (husk at trække '0' fra hvert ciffer ved den løsning, Bertel) og
> scanf) er der også standardfunktionerne:
>
> atoi: Omsæt streng til int
> atol: Omsæt streng til long
> atoll: Omsæt streng til long long
> strtol: Omsæt streng i et vilkårlig talsystem til long med bedre
> mulighed for fejlhåndtering end i ovenstående funktioner
> strtoul: Som strtol bortset at der omsættes til unsigned long
>
> --
> Skal musik- og edb-industrien have ret til fratage forbrugerne deres
> rettigheder i henhold til Ophavsretloven, begrænse konkurrencen og
> fremme monopoldannelse ved hjælp af tekniske midler? Sig nej! Nu!
> Støt underskriftsindsamlingen på http://www.digitalforbruger.dk



Thomas Lykkeberg (27-10-2002)
Kommentar
Fra : Thomas Lykkeberg


Dato : 27-10-02 10:15

On Sun, 27 Oct 2002 09:29:17 +0100, "pingpong" <ajmagard@hotmail.com>
wrote:

>Tak for svarene, jeg håbede lidt at der var en 'lettere' måde at gøre det
>på, uden at skulle omregne hvert ciffer i forhold til dets position, men det
>virker, og det er jo helt fint så :c)
Ikke for at være fræk, men hvordan i alverden havde du ellers tænkt
det det skulle kunne lade sig gøre. Hvis man kigger på den analytiske
definition på 10 talt systemet, så kan man jo ikke gøre så meget andet
end at kigge på hvert ciffer for sig. Det er vel sagtens også det som
sker inde i vores hjerner. Metoden er jo den samme for 2, 8 og 16 tals
systemerne.

Jeg vil uden at kende formatet på din datafil, gætte på at fscanf()
kan bruges meget nemt.

/Thomas

pingpong (27-10-2002)
Kommentar
Fra : pingpong


Dato : 27-10-02 11:32

Jeg mente bare om der var en funktion i forevejen til at læse tal ud fra et
array og selv bestemme hvor de hører til i variablen... som f.eks. at hvis
der er 3 tal vil den første være 100'delen, den 2. 10'erdelen og den 3.
enerdelen...

"Thomas Lykkeberg" <thomasDOTlykkeberg@privatDOTdk> wrote in message
news:hbbnruga544j3b15u35cufi7lt55c98n71@4ax.com...
> On Sun, 27 Oct 2002 09:29:17 +0100, "pingpong" <ajmagard@hotmail.com>
> wrote:
>
> >Tak for svarene, jeg håbede lidt at der var en 'lettere' måde at gøre det
> >på, uden at skulle omregne hvert ciffer i forhold til dets position, men
det
> >virker, og det er jo helt fint så :c)
> Ikke for at være fræk, men hvordan i alverden havde du ellers tænkt
> det det skulle kunne lade sig gøre. Hvis man kigger på den analytiske
> definition på 10 talt systemet, så kan man jo ikke gøre så meget andet
> end at kigge på hvert ciffer for sig. Det er vel sagtens også det som
> sker inde i vores hjerner. Metoden er jo den samme for 2, 8 og 16 tals
> systemerne.
>
> Jeg vil uden at kende formatet på din datafil, gætte på at fscanf()
> kan bruges meget nemt.
>
> /Thomas



Byrial Jensen (27-10-2002)
Kommentar
Fra : Byrial Jensen


Dato : 27-10-02 12:16

pingpong <ajmagard@hotmail.com> skrev:
> Jeg mente bare om der var en funktion i forevejen til at læse tal ud fra et
> array og selv bestemme hvor de hører til i variablen... som f.eks. at hvis
> der er 3 tal vil den første være 100'delen, den 2. 10'erdelen og den 3.
> enerdelen...

Som du har fået at vide nu flere gange, findes der standardfunktioner
til dette. Thomas har sikkert ret når han skriver:

> "Thomas Lykkeberg" <thomasDOTlykkeberg@privatDOTdk> wrote in message
>> Jeg vil uden at kende formatet på din datafil, gætte på at fscanf()
>> kan bruges meget nemt.

Derforuden er der atoi(), strtol() m.fl. som sikkert også kan bruges.

--
Skal musik- og edb-industrien have ret til fratage forbrugerne deres
rettigheder i henhold til Ophavsretloven, begrænse konkurrencen og
fremme monopoldannelse ved hjælp af tekniske midler? Sig nej! Nu!
Støt underskriftsindsamlingen på http://www.digitalforbruger.dk

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste