2012-02-17 3 views
0

Cプログラミングを少し前に行ってしまいました。私がオンラインで見つけたこの "Cリフレッシャー"のことをやって、このバイナリ検索ツリーの例をある程度ゆるやかに続け、エラーに遭遇しました。コンパイルして実行すると、「エラー:表示を開けません」と表示されます。私はこのコードを学校のあるLinuxサーバーで実行しています。とにかく、コードは次のとおりです。この非常に基本的なCコードでは「エラー:Can not Open Display」が表示されますが、理由はわかりません

#include <stdio.h> 
#include <stdlib.h> 

#define TRUE 1 
#define FALSE 0 

typedef struct Node { 
    int value; 
    struct Node *left; 
    struct Node *right; 
} Node; 

void add (Node *node, int value) 
{ 
    if (value < node->value) { 
    //left side 
    if (node->left == NULL) { 
     Node *newNode = malloc(sizeof(Node)); 
     newNode->value = value; 
     newNode->left = NULL; 
     newNode->right = NULL; 
     node->left = newNode; 
    } else { 
    add(node->left, value); 
    } 
    } else { 
    //right side 
    if (node->right == NULL) { 
     Node *newNode = malloc(sizeof(Node)); 
     newNode->value = value; 
     newNode->left = NULL; 
     newNode->right = NULL; 
     node->right = newNode; 
    } else { 
     add(node->right, value); 
    } 
    } 
} 

int search(Node *node, int value) 
{ 
    if (node == NULL) { 
    return FALSE; 
    } else if (node->value == value) { 
    return TRUE; 
    } else { 
    if (value < node->value) { 
     return search(node->left, value); 
    } else { 
     return search(node->right, value); 
    } 
    } 
} 

int main (int argc, char *argv[]) 
{ 
    Node root; 

    root.value = 23; 
    root.left = NULL; 
    root.right = NULL; 

    add(&root, 5); 
    add(&root, 50); 
    add(&root, 8); 
    add(&root, 2); 
    add(&root, 34); 

    if (search(&root, 23)) { 
    printf("23 lives in the tree.\n"); 
    } else { 
    printf("23 does not live in the tree.\n"); 
    } 

    if (search(&root, 42)) { 
    printf("42 lives in the tree.\n"); 
    } else { 
    printf("42 does not live in the tree.\n"); 
    } 

    return 0; 
} 

コードは長く見えるかもしれませんが、実際はかなり基本的です。私はここに貼り付ける前にコードの一部を切り抜けることができたと思うが、私は問題に不可欠な何かを取り出した場合にすべてを残すことにした。

はまた、私は、私はそれが違いを生むだろうかどうかを確認するためにNode root;前に迅速printf("hi");を置くが、それはまだ私に同じエラーを与えた私のmain方法におけるように、それはノードのこととは何かを持っているかもしれないと思いました。私はこの学校のサーバーの私のアカウントに別のプログラムを持っていて、そのプログラムにはprintfという文があり、うまくいきます。

私はこの問題をグーグルで見つけましたが、この奇妙なLinuxスレッドがすべて出てきて、本当に理解できませんでした。私のコンピュータはWindowsですが、私はemacsというプログラムでこれをすべてコーディングしましたが、PuTTYというプログラムを使って学校のLinuxサーバに接続することができました。

また、gcc -o tree tree.cでコンパイルしました。

申し訳ありませんすべての文章のために、私は可能な限り多くの情報を提供しようとしていました。助けることができる誰にも感謝します!

+0

実際にどのように実行していますか?デバッガで実行しようとしていますか? –

+1

"表示できません"はX11エラーメッセージです。あなたはそのコードの中でXを全く使っていません。実行していると思っていることを実行していますか? – Mat

+0

'env'はDISPLAY変数の下であなたに何を与えますか?デフォルトは ':0.0' – Eregrith

答えて

1

"./tree"や "tree"のように起動していますか?あなたがsshを介してGUIアプリケーションを実行しようとしているようです。あなたがLinuxマシン上にいる場合は、どのアプリケーションが "ssh -XY HOST"で接続しようとしているか調べる。次に、アプリケーションの起動を確認する必要があります。

+1

であるか、' 'tree 'とタイプすると実際に何を実行しようとしているのかを' which tree'と打ちます。 –

+0

本当にありがとうございます!私は 'tree'がLinuxのコマンドか何かであると思っています。私は' tree'を入力していて、プログラムではなくコマンドとして解釈していました。 OMGはこれこそ私が一日中私を悩ませてくれてありがとう、ありがたくありました。すべての進捗状況を止めましたが、 '。/ tree'をタイプするとうまくいきます! – ProgrammingMakesMeQQ

+0

"ssh -XY HOST"を使用している場合の注意点:sshのマンページでは、フラグYが "信頼できるX11転送を有効にしています。さらに、マンページには、「攻撃者がキーストローク監視などの活動を実行できるようになる」などの情報があります。 – Pradyumna

関連する問題