Avatar billede kelo Nybegynder
27. juli 2001 - 09:26 Der er 5 kommentarer og
1 løsning

Lidt programmering råd tak!

Hejsa!

Jeg vil bare lige høre om Labels er god programmering?

jeg har denne kode:

label

While (bla bla)
{
tæller
}

if (a == b)
{
}
elsif (a < b )
{
goto label (har jeg brug for her, da jeg skal tælle igen)
}
Avatar billede mahler Nybegynder
27. juli 2001 - 09:39 #1
Som udgangspunkt ikke. De er ofte mere forvirrende end nyttige. Overvej i sted at ligge tingene ud i sub-funktioner eller ligende og kald funktionen igen, når du har brug for at få gentaget en funktionalitet.

Normalt plejer behovet for labels at tyde på man ikke har fået struktureret sit program ordenligt (der mest af alt tangere \"nødudgange\" (til flowet) i ens program).
Avatar billede xerophyte Nybegynder
27. juli 2001 - 09:40 #2
Jeg går ud fra at det er noget c++/c lignede du har gang i (?)...

Hvis det er tilfældet, så er svaret; nej labels/goto anses som dårlig programmering stil, så prøv om du ikke kan finde en anden måde hvorpå du kan løse dit problem. Hvis du ikke kan det, ja så er du nok nød til at bruge labels :-)

/xerophyte
Avatar billede kelo Nybegynder
27. juli 2001 - 09:52 #3
Jeg smider lige koden her:

sub hej
{
BBOpretBrugere(  Goofy, abcdef, Fedtmule, Goofy );
}

## Parameter $_[0] : IN    Bruger-id
  ## Parameter $_[1] : IN    Password
  ## Parameter $_[2] : IN    fnavn
  ## Parameter $_[3] : IN    enavn
 
 
  my $BrugerID  =  lc($_[0]);
  my $BrugerPWD  =  $_[1];
  my $fnavn      =  $_[2];
  my $enavn      =  $_[3];

  my @data;
  my $maxlines = 499;
  my $taeller = 0;
  my $count =0;       
  my $fil_taeller = 0;

  $email = \"$BrugerID\\@student.aabc.dk\";                 
  open FILE, \"Opret_BB_Brugere_$fil_taeller.txt\";

  while (<FILE> && $count < $maxlines)
  {
    push @data, $_;         
      $count++;   
  }
  close FILE;
  $taeller = $count;
  print $count;
 
  if( $taeller == $maxlines ) 
  {       
      close fil;
    $taeller = 0;
    $fil_taeller = $fil_taeller + 1;
    open(fil,\">>c:\\\\Blackboard\\\\Opret_BB_Brugere_$fil_taeller.txt\") || die \"kan ikke oprettes\";               
   
    #Goto While løkke igen
    #print fil \"$BrugerID:$enavn:$fnavn:$email:$BrugerPWD\\n\";       
  }                           
  elsif ( $taeller < $maxlines )
  {
    open(fil,\">>c:\\\\Blackboard\\\\Opret_BB_Brugere_$fil_taeller.txt\") || die \"kan ikke oprettes\";
    print fil \"$BrugerID:$enavn:$fnavn:$email:$BrugerPWD\\n\";
           
}
  close fil;   

}


##---------------------------------------------------------------------------------
###  MAIN
##---------------------------------------------------------------------------------

hej();

Det jeg skal er vil at få While løkken som tæller i en SUB function så jeg kan kalde den hvergang.

Bær over med mig, er rimlig ny idette fag =))
Avatar billede mahler Nybegynder
27. juli 2001 - 10:15 #4
Her er mit første bud på en omskrivning. Der skal sikkert debugges en smule førend det virker...
---

#!/usr/bin/perl -w
use strict;

BBMakeUser(  \'Goofy\', \'abcdef\', \'Fedtmule\', \'Goofy\' );


# Sub function...
sub BBOpretBrugere {
  my (Bruger-id, Password, fnavn, $enavn) = @_;

  my @data;
  my $maxlines = 499;
  my $count =0;     
  my $filecount = 0;

  $email = \"$BrugerID\\@student.aabc.dk\";               

  # Read existing data...
  open FILE, \"Opret_BB_Brugere_$fil_taeller.txt\";
  while (<FILE> && $count < $maxlines) {
    push @data, $_;       
    $count++; 
  }
  close FILE;

  # Add new data to existing data set...
  push @data, \"$BrugerID:$enavn:$fnavn:$email:$BrugerPWD\\n\";       

  # Split new data into file blocks...
  my @toFile;
  my @data2file;
  while (@data) {
        push @data2file, $_;
        $count++;
        if ($count == $maxlines) {
                push @toFile, +{ count => $filecount, data => \\@data2file);
                @data2file =();
                $filecount++;
                $count =0;
        }
  }
 
  # Write new data to files...
  for my $file (@toFile) {
        open(DATAOUT,\">>c:\\\\Blackboard\\\\Opret_BB_Brugere_\" . $_->{count} . \".txt\") || die \"kan ikke oprettes ($!)\";
        for (@$_->{data}) { print DATAOUT \"$_\" }
        close DATAOUT;
  }
}
Avatar billede thomasledet Nybegynder
27. juli 2001 - 10:52 #5
fnys!!!! GOTO er IKKE din ven! GOTO og alt dets væsen (labels) er djævlens værk!!! Undgå det for alt i hele verden!
Avatar billede kelo Nybegynder
27. juli 2001 - 10:55 #6
Da Mahler kom først med svaret for han pointene, og tak for kode, jeg bruger den til vejledning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester