Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » hilfe

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
08.01.2005, 17:47 Uhr
~unsinn
Gast


hallo
brauche hilfe
habe ein programm geschrieben welches ich ausführen kann aber ein blödsinn rauskommt. und komme nicht darauf wo die fehler liegen.habe nur funktion 1 und 2
habe noch eine frage : wieso ist bei der funktion search city der parameter name ein zeiger
bitte um hilfe


C++:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NMAX 20

struct city_s
{
       char name[30];
       char country[5];
       long inhabitants;
};

void clearinputbuffer();
void printcity(struct city_s *c);
long searchcity(struct city_s c[], long len, char *name);



int main(int argc, char *argv[])
{
    struct city_s cities[NMAX]=
    {
        {"Wien",    "A", 1.8e6 },
        {"Graz",    "A", 238e3 },
        {"Berlin",  "D", 3.45e3 },
        {"Zurich",  "Ch", 360e3 },
        {"Kopenhagen", "DK", 1.3e6 }  
    };
    
    long wahl;
    long i;
    char stadt[NMAX];
    
    printf("\t1) print all cities\n");
    printf("\t2) search city\n");
    printf("\t3) find largest city\n\n");
    printf("druecke wahl:      ");
    scanf("%ld", &wahl);
    printf("\n");
    
    switch (wahl)
    {
           case 1:
                for(i=0; i<NMAX; i++)
                printcity(&cities[i]);
                break;
           case 2:
                printf("welche stadt suchen sie:  ");
                scanf("%s", stadt);
                printf("\n");
                i= searchcity(cities, NMAX, stadt);
                if (i== -1)
                   printf("stadt nicht gefunden\n");
                   else
                       printcity(&cities[i]);
                break;
                
    }

  
  system("PAUSE");    
  return 0;
}


void printcity(struct city_s *c)
{
     printf("%20s,%5s,%ld", c->name, c->country, c->inhabitants);
}

long searchcity(struct city_s c[], long len, char *name)
{
     long i;
    
     for (i=0; i<len; i++)
     {
     if (strcmp(c[i].name, name)==0)
        return i;
     }
     return -1;
}




Bearbeitung von Pablo:

VERDAMMT! BENUTZE CPP TAGS SELBST!


Dieser Post wurde am 08.01.2005 um 18:00 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.01.2005, 18:10 Uhr
~unsinn
Gast


es ist aber für mich leserlicher wennst es gelassen hättest wies war
kann die schriftgröße bei dem ändern
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.01.2005, 18:10 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Auf den ersten Blick fällt mir auf, daß Du 20 (=NMAX) Städte ausgeben willst, aber nur 5 definiert hast...
@Zeiger: Du kannst im prinzip auch "char name[]" schreiben, kommt aufs gleiche raus: name ist ein Zeiger auf das erste Element des Arrays. Wenn Du nur "char name" schreibst, wird nur EIN Zeichen übergeben.
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.

Dieser Post wurde am 08.01.2005 um 18:11 Uhr von Bruder Leif editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.01.2005, 18:22 Uhr
~unsinn
Gast


spielt denn das eine rolle wieviel ich ausgebe oder definiere
soviele städte wie es zum ausgeben gibt soviele gibt er aus
wenn ich zb. eine zeichenkette schreibe mit 20 zeichen und hallo welt reinschreibe sind auch nicht alle felder befüllt

mit zeiger ist mir unklar. der zeiger hat den inhalt von einer bestimmten adresse.aber wo ist das & damit man weiß auf welchen inhalt er zeigt
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.01.2005, 18:32 Uhr
mike
Pinguinhüpfer
(Operator)



Zitat von ~unsinn:
hallo
habe ein programm geschrieben welches ich ausführen kann aber ein blödsinn rauskommt.

Was meinst du damit genau?
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
08.01.2005, 18:37 Uhr
~unsinn
Gast


einen fehler habe ich gefunden und zwar habe ich \n vergessen und somit war es unleserlich
aber trotzdem kommt das raus

als erstes das initialisiert

stadt, buchstabe, zahl
, ,0
, ,0
usw.

und wenn ich 2 drücke zeigts immer dass es die stadt nicht gibt obwohl es vorhanden ist
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
08.01.2005, 18:57 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

es ist aber für mich leserlicher wennst es gelassen hättest wies war


für uns aber nicht
und wir sollen ja deine frage beantworten

habs mal ein wenig verbessert... auf jeden fall solltest du ne variable mitführen die angibt wieviele städte aktuell denn wirklich in deinem array gespeichert sind.... wenn du dann noch den spass mit stadt hinzufügen und löschen als menüpunkte hinzunimmst kannst du überlegen das mit ner liste oder nen dynamsichen array zu basteln (malloc und free angucken..)


C++:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NMAX 20

struct city_s
{
       char name[30];
       char country[5];
       long inhabitants;
};

void clearinputbuffer();
void printcity(struct city_s *c);
void printcitys(struct city_s *c,int n);
long searchcity(struct city_s c[], long len, char *name);



int main(int argc, char *argv[])
{
    struct city_s cities[NMAX]=
    {
        {"Wien",    "A", 1.8e6 },
        {"Graz",    "A", 238e3 },
        {"Berlin",  "D", 3.45e3 },
        {"Zurich",  "Ch", 360e3 },
        {"Kopenhagen", "DK", 1.3e6 }  
    };
    
    long wahl;
    long i,anzahl=5;
    char stadt[NMAX];
    
    for(wahl=1;wahl;){

        printf("\t1) print all cities\n");
        printf("\t2) search city\n");
        printf("\t3) find largest city\n");
        printf("\t0) Quit\n\n");
        printf("Druecke Wahl:      ");
        scanf("%ld", &wahl);
        printf("\n");
    
        switch (wahl)
        {
               case 1:
                    printcitys(cities,anzahl);
                    break;
               case 2: //das hier würd ich auch jeden fall noch in eine eigene funktion packen und nicht alles in main ballern...
                    printf("welche stadt suchen sie:  ");
                    scanf("%s", stadt);
                    printf("\n");
                    i= searchcity(cities, anzahl, stadt);
                    if (i== -1)
                       printf("stadt nicht gefunden\n");
                       else
                           printcity(&cities[i]);
                    break;
                
        }
    }

}

void printcity(struct city_s *c){
    printf("%s\t%s\t%ld\n", c->name, c->country, c->inhabitants);
}

void printcitys(struct city_s *c,int n){
    for(++n; --n; ++c)
        printcity(c);
}

long searchcity(struct city_s *c, long len, char *name){
    return len?!strcmp((c+len-1)->name,name)?len-1:searchcity(c,len-1,name):-1;
}



--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
08.01.2005, 19:04 Uhr
mike
Pinguinhüpfer
(Operator)



C++:
long searchcity(struct city_s *c, long len, char *name){
return len?!strcmp((c+len-1)->name,name)?len-1:searchcity(c,len-1,name):-1;
}



--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
08.01.2005, 19:06 Uhr
~unsinn
Gast


@windalf
danke dass du dir das angeschaut hast.

ich habe eine angabe mit den jeweiligen parametern und funktionen bekommen da habe ich bisschen was verstanden

aber deine neuen schritte sind mir bisschen zuviel

und was mir auch noch bisschen probleme bereitet ist im ganzen programm "*" und "&"

die zeiger auf was sie zeigen und wo welche adresse eingefügt wird
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
08.01.2005, 19:12 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


das * heisst einfach dereferenzieren... also wenn du z.b. ein array hast das abc heisst bekommst du mit *abc das erste element... (also so also ob du abc[0] verwendest...)

wenn du abc incrementierst zeigt abc automatisch aufs nächste elemente also ++abc heisst das du nun aufs zweite element zeigst und entsprechend mit *abc dann auf das zweite element zugriff hast... (also so als hättest du zuvor abc nicht incrementiert und abc[1] aufgerufen) ...

naja kannst du ja machen wie du willst... auf jeden fall sollest du eine variable anzahl mitführen die angbit wieviele städte nun wirklich in deinem array sind (und nicht nur wie viele ins array reinpassen...)

@mike
schöner einzeiler
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 08.01.2005 um 19:12 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: