2017-12-07 10 views
-1

助けてください、私はコンパイルした後、何も表示されない何か間違いがわかりません。そのうちの一つは、乱数、他のは、最初のスタックからのみの数字が含まれていますが含まれています、2つのスタックを作成する必要がある最初のスタック[リスト]私の間違いを理解できません

#include "stdafx.h" 
#include <iostream> 
#include <ctime> 

using namespace std; 

struct stack //our stack 
{ 
    int num; 
    stack* ptr = NULL; 
}; 

void addtostack(int &n, stack* p) //add element to stack 
{ 
    stack* newstack = new stack; 
    newstack->num = n; 
    newstack->ptr = p; 
    p = newstack; 
} 

void showstack(stack* p) //show stack 
{ 
    stack* current = p; 
    while (current->ptr) 
    { 
     cout << current->num << endl; 
     current = current->ptr; 
    } 
} 

int main() 
{ 
    srand(time(NULL)); 
    const int SIZE = 5; 
    stack* first = new stack; 
    int rnd; 
    double average = 0; 
    for (int i = 0; i < SIZE; i++) 
    { 
     rnd = -50 + rand() % 101; 
     addtostack(rnd, first); 
     average += rnd; 
    } 
    average /= SIZE; 
    showstack(first); 
    system("pause > nul"); 
} 
+3

をそして、あなたが経験している問題は何ですか? (エラーメッセージ、動作など) – Steve

+0

ビジュアルスタジオにエラーメッセージが表示されない – Javid

+0

エラーは発生していないということですか? – Steve

答えて

1

ライン内のすべての数値の平均値よりも大きい

p = newstack; 

はあなたが望むことをしません。

変数pのローカルコピーを変更します。 mainのポインタは、それが初期化された唯一のオブジェクトをまだ指しています。

あなたはいくつかの方法、それを解決することができます参照して

  1. パスp。あなたは参照によってnを渡す必要はありません。

    void addtostack(int n, stack*& p) //add element to stack 
    { 
        stack* newstack = new stack; 
        newstack->num = n; 
        newstack->ptr = p; 
        p = newstack; 
    } 
    
  2. 呼び出し元関数への新しいポインタを返します。

    stack* addtostack(int n, stack* p) //add element to stack 
    { 
        stack* newstack = new stack; 
        newstack->num = n; 
        newstack->ptr = p; 
        return newstack; 
    } 
    

    、その後にmain変更:

    for (int i = 0; i < SIZE; i++) 
    { 
        rnd = -50 + rand() % 101; 
        first = addtostack(rnd, first); 
        average += rnd; 
    } 
    
+0

ありがとう、私は理解しています – Javid

関連する問題