2011-08-23 179 views
0

嘗試打印該列表向後C:打印鏈表向後

用戶輸入10個字符,程序打印出在原始順序10個字符,然後以相反的順序。

感謝你們我想通了這個問題,爲什麼它不會在常規順序打印,現在我有一些麻煩它以相反的順序打印..

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

#define strsize 30 

typedef struct member 
{ 
    int number; 
    char fname[strsize]; 
    struct member *next; 
} RECORD; 

RECORD* insert (RECORD *it); 
RECORD* print(RECORD *it, int j); 

int main (void) 
{ 
    int i; 
    double result; 
    RECORD *head, *p; 
    head=NULL; 
    result=10; 

    for (i=1; i<=result; i++) 
     head=insert (head); 
    print (head, result); 

    return 0; 

} 

RECORD* insert (RECORD *it) 
{ 

    RECORD *cur, *q; 
    int num; 
    char junk; 
    char first[strsize]; 
    printf("Enter a character:"); 
    scanf("%s", &first); 

    cur=(RECORD *) malloc(sizeof(RECORD)); 

    strcpy(cur->fname, first); 
    cur->next=NULL; 

    if (it==NULL) 
     it=cur; 
    else 
    { 
     q=it; 
     while (q->next!=NULL) 
      q=q->next; 
     q->next=cur; 
    } 

    return (it); 
} 

RECORD* print(RECORD *it, int j) 
{ 
    RECORD *cur; 
    cur=it; 
    int i; 
    for(i=1;i<=j;i++) 
    { 
     printf("%s \n", cur->fname); 
     cur=cur->next; 

     //my solution for printing it backwards.. 

     void print(node *it) 
     { 
      if(it!=NULL) 
      { 
       print(it->next); 
       printf("%s-->",it->number); 
      } 
     } 

     return; 
    } 
} 
+3

工作,這將是有用的,如果你能具體包括問題是什麼。換句話說,而不是說「我無法得到它以相反的順序打印」,認爲解釋究竟是怎麼了。例如:「這只是打印第2個字符」,或「我試圖扭轉鏈表,但我得到的字符按隨機順序」。 –

+0

那究竟有什麼問題呢?你的'print()'函數對我來說看起來很好。 –

+2

「tsil deknil」如何? –

回答

2

你有幾個「東西」的名稱去print

  • 原型:RECORD* print(RECORD *it, int j);
  • 一個電話,裏面mainprint (head, result);
  • 函數定義:RECORD* print(RECORD *it, int j) {
  • 嵌套函數定義:void print(node *it) {

前三個是一致的,但最後一個是完全錯誤的。

另外
標準C不允許嵌套函數。
類型node沒有定義。
你仍然需要在你的縮進:)

+0

哈哈再次感謝:) – Erica

+0

我將如何繞過該嵌套功能? – Erica

+0

首先給它一個不同的名字;然後將其移出(剪切/粘貼)封閉函數。如果需要調整的代碼,你準備好了更多的樂趣:) – pmg