/ 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
Spørgsmål vedr. funktioner, og return, new~
Fra : Shade


Dato : 15-05-02 17:32

Jeg har skrevet en funktion til at sammenligne to c-strings,
jeg er så bare ikke sikker på hvordan jeg sørg for at min
funktion bool Compare() rent faktisk får de to c-strings ind
nemlig DiskWord[] og UserWord[], jeg har skrevet en funktion til at
indlaese
hver enkelt c-string men hvordan bruger jeg så min egen Compare()
bagefter?
Og hvordan kan jeg videre i programmet bruge min return? Så at
programmet
er klar over at de to c-strings ikke er ens?
Håber lige der er en der giver en newbie lidt hjælpm så jeg rent
faktisk kan
bruge mine funktioner, da jeg ikke helt har styr på det med
funktioner. Og deres syntax.

Mvh Rasmus

//funktion til at sammenligne to c-strings
bool Compare(char DiskWord[], char UserWord[])
   {
   bool TruthValue = false;
   int lUserWord, lDiskWord;
   //finder her længde af bruger password
   //samt længde af disk password
   lUserWord = strlen(UserWord);
   lDiskWord = strlen(DiskWord);
   
   //sammenligner her de to bestemte længder
   if(lUserWord == lDiskWord)
      {
      //sammenligner her hvert enkelt element
      //i de to arrays der har sammen længde
      for(int j=0; j<lDiskWord; j++)
         if(UserWord[j] != DiskWord[j])
            {
            TruthValue = false;
            break;
            }
         else
            {
            TruthValue = true;
            break;
            }
      }
      return TruthValue;
   }
//**********************************************

 
 
Klaus Petersen (15-05-2002)
Kommentar
Fra : Klaus Petersen


Dato : 15-05-02 18:17

Jeg ville nok lave den nogenlunde på denne her måde:

bool Compare (char *DiskWord, char *UserWord) {
/* tjek om de har samme længde ... */
if (strlen (DiskWord) == strlen (UserWord)) {
for (int i=0; i<strlen (DiskWord); i++) {
if (DiskWord [i] != UserWork [i]) {
/* vi fandt 2 forskellige tegn - strengene er _ikke_ ens */
return false;
}
}; /* vi har gennemgået alle tegn, og de er alle ens. Returnér sand */
return true;
};
/* .. det har de ikke - så er de ihvert fald _ikke_ ens */
return false;
};

Der bliver funktionen kaldt med 2 pointer til strenge - der er ingen grund
til at sende hele strengen med ind i funktionen.

"Shade" <shade@my.sanguinus.com> wrote in message
news:b3661755.0205150831.111e75d4@posting.google.com...
> Jeg har skrevet en funktion til at sammenligne to c-strings,
> jeg er så bare ikke sikker på hvordan jeg sørg for at min
> funktion bool Compare() rent faktisk får de to c-strings ind
> nemlig DiskWord[] og UserWord[], jeg har skrevet en funktion til at
> indlaese
> hver enkelt c-string men hvordan bruger jeg så min egen Compare()
> bagefter?
> Og hvordan kan jeg videre i programmet bruge min return? Så at
> programmet
> er klar over at de to c-strings ikke er ens?
> Håber lige der er en der giver en newbie lidt hjælpm så jeg rent
> faktisk kan
> bruge mine funktioner, da jeg ikke helt har styr på det med
> funktioner. Og deres syntax.
>
> Mvh Rasmus
>
> //funktion til at sammenligne to c-strings
> bool Compare(char DiskWord[], char UserWord[])
> {
> bool TruthValue = false;
> int lUserWord, lDiskWord;
> //finder her længde af bruger password
> //samt længde af disk password
> lUserWord = strlen(UserWord);
> lDiskWord = strlen(DiskWord);
>
> //sammenligner her de to bestemte længder
> if(lUserWord == lDiskWord)
> {
> //sammenligner her hvert enkelt element
> //i de to arrays der har sammen længde
> for(int j=0; j<lDiskWord; j++)
> if(UserWord[j] != DiskWord[j])
> {
> TruthValue = false;
> break;
> }
> else
> {
> TruthValue = true;
> break;
> }
> }
> return TruthValue;
> }
> //**********************************************



Benny Andersen (15-05-2002)
Kommentar
Fra : Benny Andersen


Dato : 15-05-02 19:44

On 15 May 2002 09:31:54 -0700, Shade <shade@my.sanguinus.com> wrote:
> Håber lige der er en der giver en newbie lidt hjælpm så jeg rent
> faktisk kan
> bruge mine funktioner, da jeg ikke helt har styr på det med
> funktioner. Og deres syntax.

Nej, ikke ud over at anbefale læsning og kodning.
(men c++ er måske en slapper, fra mere trælse eksamensstudier

Registerende, at Peter Makholms svar til dig, på samme spørgsmål d. 16/4
i d.e.p ikke har båret frugt, tvivler jeg lidt på nytten.

Jeg tillader mig dette ufaglige svar, fordi jeg ærgres når elegante
svar ikke forsøges forstået. Jeg skal gerne uddybe koden i omtalte svar.
På det interesse niveau (low level c), du beskæftiger dig, skulle du
måske hellere læse K&R end accelerated C++. Kan sikkert lånes på biblioteket.

-- Benny

Bertel Lund Hansen (15-05-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 15-05-02 23:22

Shade skrev:

>Jeg har skrevet en funktion til at sammenligne to c-strings,

Der er et par logiske fejl i. Den grundlæggende tankegang er o.k.

>   //sammenligner her de to bestemte længder
>   if(lUserWord == lDiskWord)

Du kan forenkle programmet ved at teste modsat:

   if(lUserWord != lDiskWord) return false;

Så forlades rutinen med det vuns, og false returneres.

>      //sammenligner her hvert enkelt element
>      //i de to arrays der har sammen længde
>      for(int j=0; j<lDiskWord; j++)
>         if(UserWord[j] != DiskWord[j])
>            {
>            TruthValue = false;
>            break;
>            }
>         else
>            {
>            TruthValue = true;
>            break;
>            }
>      }
>      return TruthValue;
>   }

Det går galt fordi du kun når at sammenligne ét eneste tegn. Det
er fint når du har fundet falsk - der er ingen grund til at gå
videre. Brug "return false" og blæs på både TruthValue og break.

Du skal ikke teste med else. Løkken får kun lov at terminere hvis
alle tegn er ens.

Og nu kan du måske se at du slet ikke får brug for TruthValue. Du
skal bare returnere true til sidst.

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

Bertel Lund Hansen (16-05-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 16-05-02 06:10

Shade skrev:

>Og hvordan kan jeg videre i programmet bruge min return?

Jeg glemte det spørgsmål.

int main () {
   ...
   ... input af UserWord ...
   ... input af DiskWord ...

   if Compare(UserWord, DiskWord) {
      lukOpForAlleSluser();
   }
   else {
      derErLukketForDetVarmeVand();
   }

   return 0;
}

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.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