/ 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
#define >ping< ??
Fra : !G!


Dato : 18-01-02 18:23

Jeg skriver et progarm hvori at programmet skal kunne undlade at det der
står mellem ping'er ( ' ).
Den skal kun læse tekset i anf.. " xxx ".

Mit problem hvordan man definere ' :

Jeg har forsøgt mig med #define PING ' ' ' ( hvor der er ophold mellem
pingerne )
/* hvis der ingen ophold er, så vil compileren ikke
godtage det */
Men det gør det ikke mere rigtigt.

Kan nogen forklare mig det??

VH..

!G!




 
 
Soeren Dalby (18-01-2002)
Kommentar
Fra : Soeren Dalby


Dato : 18-01-02 23:07

Da compileren ikke ved om du mener karakteren pling eller om det er en
omkransning af en konstant-definition, benyttes backslash når man mener
karakteren eksplicit.

Så du ska skrive

#define PING ' \' '

Så skulle det fungere


--
Med venlig hilsen / best regards

Soeren Dalby

"!G!" <gugge@email.dk> wrote in message
news:wRY18.1375$Eu2.162809@news010.worldonline.dk...
> Jeg skriver et progarm hvori at programmet skal kunne undlade at det der
> står mellem ping'er ( ' ).
> Den skal kun læse tekset i anf.. " xxx ".
>
> Mit problem hvordan man definere ' :
>
> Jeg har forsøgt mig med #define PING ' ' ' ( hvor der er ophold mellem
> pingerne )
> /* hvis der ingen ophold er, så vil compileren
ikke
> godtage det */
> Men det gør det ikke mere rigtigt.
>
> Kan nogen forklare mig det??
>
> VH..
>
> !G!
>
>
>



R. A. Larsen (19-01-2002)
Kommentar
Fra : R. A. Larsen


Dato : 19-01-02 00:11

"!G!" <gugge@email.dk> wrote:
>
> Jeg skriver et progarm hvori at programmet skal kunne undlade at det der
> står mellem ping'er ( ' ).
> Den skal kun læse tekset i anf.. " xxx ".
>
> Mit problem hvordan man definere ' :

Her er et kort testprogram, som viser fire forskellige måder at definere
ping-tegnet ( ' ):

#include <stdio.h>
/* bogstav */
#define PING1 '\''
/* oktal */
#define PING2 047
/* hex */
#define PING3 0x27
/* decimal */
#define PING4 39

int main(void) {
printf("PING1 = \"%c\"\n", PING1);
printf("PING2 = \"%c\"\n", PING2);
printf("PING3 = \"%c\"\n", PING3);
printf("PING4 = \"%c\"\n", PING4);
return 0;
}

Husk at i C er der næsten ingen forskelle mellem typerne char og int. Det
kan du bl.a. se på definitionen af putchar():

putchar is a macro that outputs a character on stdout
Declaration: int putchar(int c);

Det betyder samtidigt, at i C du kan skifte mellem at bruge selve tegnet
og tegnets nummer i ASCII-tabellen uden at programmet kan se nogen
forskel.

Det giver dig måske nok til at komme videre.

MVH, René
--
Using Virtual Access
http://www.vamail.com


!G! (19-01-2002)
Kommentar
Fra : !G!


Dato : 19-01-02 00:35

Tak for svar ..

Men det er fordi, jeg prøver at skrive en tilstandsmakskine det læser en
fil. Teksten mellem " " skal vises, men
al tekst mellem ' ' skal ikke vises med.
Det er et lille problem.

Min kode er følgende:
!G!

-------------------------------------------klip
#include <stdio.h>
#include <conio.h>

typedef int action;

#define ANFTEGN ' " ' /* der er ophold mellem, for at gør det synligt
her, men ikke i c filen */
#define A_PRINT 7
#define A_NONE 8
#define ST_UDENFOR 15
#define ST_INDTEGN 16
#define ST_PING_INDTEGN 20
#define ST_PING_UDENFOR 21
#define PING ' \ ' ' /* der er ophold mellem, for at gør det
synligt her, men ikke i c filen */


action anftegn(char event)
{
static int state = ST_PING_UDENFOR;
switch (state)
{
case ST_PING_UDENFOR:
if (event == PING)
{
state = ST_PING_INDTEGN;
return A_NONE;
}
break;
case ST_PING_INDTEGN:
if (event == PING)
{
state = ST_UDENFOR;
}
return A_NONE;
}
switch (state)
{
case ST_UDENFOR:
if (event == ANFTEGN)
{
state = ST_INDTEGN;
return A_NONE;
}
break;
case ST_INDTEGN:
if (event == ANFTEGN)
{
state = ST_UDENFOR;
}
return A_PRINT;
}
return A_NONE;
}
int main ()
{
int ch;
FILE *f;
f = fopen("tilst.c", "r"); /* læser sin egen C fil. - skal
kunne bruges på andre C filer til fx. versionsstyring */
clrscr();
if (f==NULL)
{
printf ("Filen findes ikke");
getch();
return 0;
}
clrscr();
while ((ch = fgetc(f)) !=EOF)
{
switch (anftegn(ch))
{
case A_PRINT:
putchar (ch);
break;
case A_NONE:
break;
}
}
fclose(f);
getch();
return 0;
}
------------------------------------------------------klip





Anders Melchiorsen (19-01-2002)
Kommentar
Fra : Anders Melchiorsen


Dato : 19-01-02 01:18

R. A. Larsen <r_larsen@image.dk> skrev:

> Det betyder samtidigt, at i C du kan skifte mellem at bruge selve
> tegnet og tegnets nummer i ASCII-tabellen uden at programmet kan se
> nogen forskel.

Det er vist en påstand som kun holder mens programmet kører på en
ASCII-baseret platform.


Anders.

--
Øen i søen har kun en barber.
Til gengæld så klipper han alt hvad han ser.
Han klipper sin fætter, sin hund og sit får.
Han klipper billetter når færgerne går.
Han klipper sin plæne, sin hæk og sit hegn,
men selv er han skaldet som Roskildevej'n.

R. A. Larsen (19-01-2002)
Kommentar
Fra : R. A. Larsen


Dato : 19-01-02 10:50

"!G!" <gugge@email.dk> wrote:
>
> Tak for svar ..
>
> Men det er fordi, jeg prøver at skrive en tilstandsmakskine det læser en
> fil. Teksten mellem " " skal vises, men
> al tekst mellem ' ' skal ikke vises med.
> Det er et lille problem.

[al koden klippet væk]

Dit store problem ligger (som du nok kan regne ud) i funktionen anftegn().
Jeg kan se at du bruger fire states, men i din beskrivelse har du kun
tre??? Din kode er faktisk næsten umulig at finde ud af uden at lave et
diagram.

Jeg vil give dig en fremgangsmåde, som du kan bruge når du laver
tilstandsmaskiner:

Lav en tabel med hvert state. For hvert state opskriver du: de events du
vil reagere på, hvilket event du så skal skifte til og hvilken action du
vil returnere. Jeg er begyndt på den nedenfor ("*" under Event betyder "alt
andet"):

States: ST_UDENFOR, ST_INDTEGN ( " ), ST_PING_INDTEGN ( " ' )

GlState Event NytState Action
-----------------------------------------
ST_UDENFOR PING ST_UDENFOR A_NONE
ST_UDENFOR ANFTEGN ST_INDTEGN A_NONE
ST_UDENFOR * ST_UDENFOR A_NONE

Ud fra ovenstående tre linjer kan jeg se to ting:
1. jeg skal kun skifte state, hvis Event er ANFTEGN, og
2. Action er altid A_NONE.

Jeg ville så skrive dem således:

switch(state)
{
case ST_UDENFOR:
switch(event)
{
case ANFTEGN: /* " */
state = ST_INDTEGN;
return A_NONE;

default: /* alt andet */
return A_NONE;
}

Kan du se, hvor simpelt det hele bliver?

Jeg kunne godt fortsætte med de andre states, men det gider jeg ikke. Jeg
håber dog, at du har fået så mange oplysninger, at du nemt kan fortsætte
selv.

MVH, René
--
Using Virtual Access
http://www.vamail.com


!G! (20-01-2002)
Kommentar
Fra : !G!


Dato : 20-01-02 17:56

Jeg vil lige sige tak til dig.
Jeg kunne godt brge noget af det du skrev, og det gav mig åbenvart i anden
måde at se tingene på. Så nu har jeg fået lavet tilstandsmaskinen til at
virker perfekt.
Så tak for hjælp, det var kanon.

Forsat go' søndag.

!G!


----------------------------------------------------------------------------
klip
"R. A. Larsen" <r_larsen@image.dk> skrev i en meddelelse
news:VA.0000014d.0005b899@r_larsen...
> "!G!" <gugge@email.dk> wrote:
> >
> > Tak for svar ..
> >
> > Men det er fordi, jeg prøver at skrive en tilstandsmakskine det læser en
> > fil. Teksten mellem " " skal vises, men
> > al tekst mellem ' ' skal ikke vises med.
> > Det er et lille problem.
>
> [al koden klippet væk]
>
> Dit store problem ligger (som du nok kan regne ud) i funktionen anftegn().
> Jeg kan se at du bruger fire states, men i din beskrivelse har du kun
> tre??? Din kode er faktisk næsten umulig at finde ud af uden at lave et
> diagram.
>
> Jeg vil give dig en fremgangsmåde, som du kan bruge når du laver
> tilstandsmaskiner:
>
> Lav en tabel med hvert state. For hvert state opskriver du: de events du
> vil reagere på, hvilket event du så skal skifte til og hvilken action du
> vil returnere. Jeg er begyndt på den nedenfor ("*" under Event betyder
"alt
> andet"):
>
> States: ST_UDENFOR, ST_INDTEGN ( " ), ST_PING_INDTEGN ( " ' )
>
> GlState Event NytState Action
> -----------------------------------------
> ST_UDENFOR PING ST_UDENFOR A_NONE
> ST_UDENFOR ANFTEGN ST_INDTEGN A_NONE
> ST_UDENFOR * ST_UDENFOR A_NONE
>
> Ud fra ovenstående tre linjer kan jeg se to ting:
> 1. jeg skal kun skifte state, hvis Event er ANFTEGN, og
> 2. Action er altid A_NONE.
>
> Jeg ville så skrive dem således:
>
> switch(state)
> {
> case ST_UDENFOR:
> switch(event)
> {
> case ANFTEGN: /* " */
> state = ST_INDTEGN;
> return A_NONE;
>
> default: /* alt andet */
> return A_NONE;
> }
>
> Kan du se, hvor simpelt det hele bliver?
>
> Jeg kunne godt fortsætte med de andre states, men det gider jeg ikke. Jeg
> håber dog, at du har fået så mange oplysninger, at du nemt kan fortsætte
> selv.
>
> MVH, René
> --
> Using Virtual Access
> http://www.vamail.com
>



R. A. Larsen (21-01-2002)
Kommentar
Fra : R. A. Larsen


Dato : 21-01-02 19:44

"!G!" <gugge@email.dk> wrote:
>
> Jeg vil lige sige tak til dig.
> Jeg kunne godt brge noget af det du skrev, og det gav mig åbenvart i anden
> måde at se tingene på. Så nu har jeg fået lavet tilstandsmaskinen til at
> virker perfekt.
> Så tak for hjælp, det var kanon.

For at lave tilstandsmaskiner skal man ind i en helt speciel tankegang.

Hvad ville du sige til at lave et helt program som en tilstandsmaskine? Det har
jeg gjort en gang <GYS>.

Det var nødvendigt, da programmet skulle køre på en DS725 håndterminal, hvor
programmet skulle ligge i en bestemt funktion, og denne funktion derfor blokerede
for alt andet, *inklusiv* læsning fra tastaturet. Det fungerede som en slags
multitasking, ligesom i Windows 3.1.

Jeg siger dig, det var et mareridt.

MVH, René
--
Using Virtual Access
http://www.vamail.com


Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste