2016-02-25 51 views
-1

Q請幫助我這個程序無法正常工作。 不顯示value.this程序是我試圖在c上運行的單鏈表的一個例子。 `不支持SLL的c程序

#include<stdio.h> 
#include<stdlib.h>  //malloc defined 
struct node  
{ 
     int data; 
     struct node *next;  
     }; 
add()  //add function 
    { 
     int value; 
     struct node *n; 
     n=(struct node*)malloc(sizeof(struct node)); //mem allocation 
     printf("enter the value to add\n"); 
     scanf("%d",&value); 
     n->data=value; 
     n->next=NULL; 
     // n=n->next; 
     // n->next=NULL; 
     } 
    delete()  //delete function 
    { 
     // n=n->next; 
      struct node *n; //declaration 
      printf("the node deleted is %d",n->data); 
      free(n); 
      } 

    display()   //display function 
    { 
      struct node *n; 
      while(n!=NULL) 
      { 
      printf("%d",n->data); 
      n=n->next; 

      } 
      }    
int main() 
{ 
    int ch; 
    while(1) 
    { 
      printf("do you want to add node press 1\n"); 

      printf("do you want to delete node press 2\n"); 

      printf("do you want to display node press 3\n"); 

      printf("do you want to exit press 4\n"); 
      scanf("%d",&ch); 
    switch(ch) 
    { 
     case 1:add(); 
       break; 

     case 2:delete(); 
       break; 

     case 3:display(); 
       break; 

     case 4:exit(0); 


     default: printf("wrong choice!!!\n");          

    } 
    } 
    return 0; 
    getch(); 
    } 
please help me this program is not working properly. 

不顯示價值。程序是我試圖在運行C單向鏈表的例子。

+0

局部變量,那麼,*本地*,並且只存在他們在聲明的函數裏面。名爲'變量函數內部N''add'是從一個不同的變量在另一個函數中有相同的名字。 –

+2

它也在我看來,你需要找到一本好的初學者書,所以我建議你看看[The Definitive C Book Guide and List](http://stackoverflow.com/questions/562303/the-definitive-c-書指南和列表)。 –

+0

是的先生我需要更多地關注我的C語言技能,感謝您對本書的推薦 – prajyot

回答

0
#include<stdio.h> 
#include<stdlib.h>  //malloc defined 
struct node  
    { 
     int data; 
     struct node *next;  
     }*n,*p; 

create()  //add function 
    { 
     int value; 

     n=(struct node*)malloc(sizeof(struct node)); //mem allocation 
     printf("enter the value to add\n"); 
     scanf("%d",&value); 
     n->data=value; 
     n->next=NULL; 

     } 
    add() 
    {  
    int value; 
// struct node *p; 
    p=(struct node*)malloc(sizeof(struct node)); 
    printf("enter the value to add next\n"); 
    scanf("%d",&value); 
    n->next=p; 
    p->data=value; 
    p->next=NULL; 

    }  
    delete()  //delete function 
    { 

      printf("the node deleted is %d",p->data); 
      n->next=NULL; 
      free(p); 

      } 

     display()   //display function 
     { 

       while(n!=NULL) 
       { 
       printf("%d\n",n->data); 
       n=n->next; 

      } 
      }    
int main() 
{ 
    int ch; 
    while(1) 
    { 
     printf("do you want to create node press 1\n"); 
     printf("do you want to add node press 2\n"); 
     printf("do you want to delete node press 3\n"); 
     printf("do you want to display node press 4\n"); 
     printf("do you want to exit press 5\n"); 
     scanf("%d",&ch); 
switch(ch) 
{ 
    case 1:create(); 
      break; 

    case 2:add(); 
      break; 

    case 3:delete(); 
      break; 

    case 4:display(); 
      break; 

    case 5:exit(0); 


    default: printf("wrong choice!!!\n");          

} 
} 
return 0; 
getch(); 
} 
0

printf("%d",n->data);不打印,因爲:

struct node *n; // n is not determined. 
while(n != NULL) // undefined behaviour 

n是從另一n即在add()功能不同。你從來沒有將結構傳遞給其他函數,所以它不會做你想做的事情。

+0

一個小問題:局部變量沒有初始化,所以說'n'是'NULL'是錯誤的。 'n'的值是* indeterminate *(並且實際上看起來是隨機的)。使用這些變量除了初始化它們會導致*未定義的行爲*。 –

+0

@JoachimPileborg謝謝:) –

0
  1. 在函數display()中,局部變量'n'只聲明但未定義,所以這裏'n'只是一個通配符。它也發生在函數delete()中。
  2. 這不是實現單個鏈表的正確方法。在add()函數中,你所寫的只是創建一個節點,而不是將一個節點添加到鏈表中。內部函數定義
+0

是的我同意zhaolin chi – prajyot