Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit Visibilität von einer Variablen

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 <
000
02.05.2005, 23:42 Uhr
Scottsman



Hallo ich habe ein problem, dass meine main prozedur die Variable nicht von der Funktion übernimmt!(obschon ich die Variable global deklariert habe!) Ich hoffe dass einer mir weiterhelfen kann!

danke

Hier noch mein Quellcode:


C++:
#include <iostream>

using namespace std;

struct stack_elem
{
  char elem;
  stack_elem *prev;
};

stack_elem *S;

char top(stack_elem *S)
{
  return S->elem;
}

void pop(stack_elem *S)
{
  stack_elem *ptemp = S;
  S = ptemp->prev;
  delete ptemp;
}

void push(stack_elem *S, char x)
{
  stack_elem *pstack_elem = new stack_elem;
  pstack_elem->elem = x;
  if (S == NULL)
    {
      cout << "null" << endl;
      S = pstack_elem;
      S->prev = NULL;
    }
  else
    {
      cout << "not null" << endl;
      pstack_elem->prev = S;
      S = pstack_elem;
    }
  cout << top(S)  << " " << pstack_elem << " " << S  << " " <<  S->prev << endl;
}

void setS(stack_elem *S)
{
  S = NULL;
}

int main()
{
  setS(S);
  char input[10];
  cout << "Geben sie einen String zeichenweise ein:  ";
  cin >> input;
  while (input[0] != '0')
    {
      push(S,input[0]);
      cout << S << endl;
      //      top(S);
      cout << "Geben Sie das nächste Zeichen ein: ";
      cin >> input;
    }
  while (S != NULL && S->prev != NULL)
    {
      cout << top(S);
      pop(S);
    }
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.05.2005, 09:46 Uhr
Th



Was soll denn die SetS-Funktion bewirken?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.05.2005, 09:57 Uhr
ao

(Operator)


Die Frage ist nicht Windows-spezifisch. Damit darfst du auch ins ANSI-Board.
-> Schubs
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.05.2005, 11:56 Uhr
doppler



Du hast in push eine lokale Kopie des Pointers S, änderst also diese lokale Kopie. Versuche mal, eine Referenz auf den Pointer zu übergeben.

C++:
void push(stack_elem *&S, char x) {
//...
}


Das selbe natürlich bei den anderen Funktionen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.05.2005, 12:19 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ok so gehts nun:


C++:
#include <iostream>

using namespace std;

struct stack_elem
{
  char elem;
  stack_elem *prev;
};

char top(stack_elem **S)
{
  return (*S)->elem;
}

void pop(stack_elem **S)
{
  stack_elem *ptemp = *S;
  *S = ptemp->prev;
  delete ptemp;
}

void push(stack_elem **S, char x)
{
  stack_elem *pstack_elem = new stack_elem;
  pstack_elem->elem = x;
  pstack_elem->prev = NULL;
  if (*S == NULL)
  {
    cout << "null" << endl;
    *S = pstack_elem;
    (*S)->prev = NULL;
  }
  else
  {
    cout << "not null" << endl;
    pstack_elem->prev = *S;
    *S = pstack_elem;
  }
  cout << top(S)  << " " << pstack_elem << " " << *S  << " " <<  (*S)->prev << endl;
}

void setS(stack_elem **S)
{
  *S = NULL;
}

int main()
{
  stack_elem *S;
  setS(&S);
  char input[10];
  cout << "Geben sie einen String zeichenweise ein:  ";
  cin >> input;
  while (input[0] != '0')
  {
    push(&S,input[0]);
    cout << S << endl;
    cout << "Geben Sie das nchste Zeichen ein: ";
    cin >> input;
  }
  while (S != NULL)
  {
    cout << top(&S);
    pop(&S);
  }
}



Das Problem ist das gewesen, das er einen nullpointer nicht zurückbekommt, wodurchs immer null blieb. Außerdem hat er das erste glied verschluckt, wegen dieser doppelt gemoppelten S->prev != NULL Abfrage in der untersten Schleife.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.05.2005, 13:24 Uhr
~Scottsman
Gast


Vielen vielen dank für die schnelle antwort!

mfg Scottsman

P.S.: Die SetS funktion war von einem vorherigen test! :-)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: