2016-08-03 28 views
-1

私は現在、「The Art of Debugging」の書籍で作業しています。私はこの最初の練習のためのコードを入力しました、そして、私は端末に出力を受け取るべきです。プログラムを実行すると、何も表示されません。しかし、GDBの変数を見ると、パラメータの値を正しく見ることができます。端末に出力は表示されませんが、値はGDBに表示されます

主な関心事はprint_results()です。スクリーンには何も印刷されません。誰も助けることができますか?私は、Linuxを実行する2つの異なるマシン(DebianとLubuntu)でこれを試しました。

ここでコードは次のとおりです。事前に

// insertion sort, several errors 
// usage: insert_sort num1 num2 num3 ..., where the num are the numbers to 
// be sorted 
#include <stdio.h> 
#include <stdlib.h> 

int x[10], // input array 
    y[10], // workspace array 
    num_inputs, // length of input array 
    num_y = 0; // current number of elements in y 

void get_args(int ac, char **av) 
{ int i; 

    num_inputs = ac - 1; 
    for (i = 0; i < num_inputs; i++) 
     x[i] = atoi(av[i+1]); 
} 

void scoot_over(int jj) 
{ int k; 

    for (k = num_y; k > jj; k--) 
     y[k] = y[k-1]; 
} 

void insert(int new_y) 
{ int j; 

    if (num_y == 0) { // y empty so far, easy case 
     y[0] = new_y; 
     return; 
    } 
    // need to insert just before the first y 
    // element that new_y is less than 
    for (j = 0; j < num_y; j++) { 
     if (new_y < y[j]) { 
     // shift y[j], y[j+1],... rightward 
     // before inserting new_y 
     scoot_over(j); 
     y[j] = new_y; 
     return; 
     } 
    } 
    // one more case: new_y > all existing y elements 
    y[num_y] = new_y; 
} 

void process_data() 
{ 
    for (num_y = 0; num_y < num_inputs; num_y++) 
     // insert new y in the proper place 
     // among y[0],...,y[num_y-1] 
     insert(x[num_y]); 
} 

void print_results() 
{ 
    int i; 
    for(i=0; i < num_inputs; i++) 
     printf("%d\n", y[i]); 
} 

int main(int argc, char ** argv) 
{ get_args(argc,argv); 
    process_data(); 
    print_results(); 
} 

おかげで、 ジェシー

+1

どのようにプログラムを実行しますか?ソートして印刷するにはパラメータが必要なので、 " 1 2 3 4"で実行すると、結果がうまく印刷されます。 [デモ](http://coliru.stacked-crooked.com/a/0d8885a5cfa02da7)を参照してください – Mine

答えて

1

は、プログラムが渡される引数に依存します!

これは完全に機能しますが、引数を渡す必要があります。符号状態の上部にあるコメントでの使用として

//使用:insert_sort num1をnum2のNUM3 ...、numは

しようとする数であり、それ!

+0

ああ私の良さ。私は馬鹿のように感じる。私は完全な脳のおならを持っていた。私はちょうど歩いて行かなければならないことを知っていて、後でそれを見て後で戻った。私はパラメータとして整数を渡すことになっていたことは知っていましたが、./a.outを実行していました。 とにかく、ありがとうございます。私はトラックに戻るためにプッシュが必要でした。 – JEM

関連する問題