2016-08-03 96 views
-1

我目前正在編寫該書調試藝術。我已經輸入了第一個練習的代碼,我應該接收輸出到終端。當我運行該程序時,什麼都不顯示。但是,當我查看GDB中的變量時,我可以正確看到參數的值。沒有輸出顯示到終端,但值顯示在GDB

主要問題是print_results()函數。它不會打印任何內容。誰能幫忙?我已經在運行Linux的兩臺不同機器(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」打印效果很好。見[demo](http://coliru.stacked-crooked.com/a/0d8885a5cfa02da7) – Mine

回答

1

程序取決於所傳遞的參數!

它完全有效,但你需要傳遞它的參數。

由於在代碼的頂部註釋的使用狀態:

//用法:insert_sort NUM1 NUM2 NUM3 ...,其中NUM是數字到

嘗試它!

+0

哦,我的天啊。我覺得自己像個白癡。我有一個全腦放屁。我知道我應該走開,稍後再回來看看。我只是在運行./a.out,儘管我知道我應該將整數作爲參數傳遞。 無論如何,感謝您的幫助。我只是需要一個推動才能回到正軌。 – JEM