2017-01-01 151 views
0

下面的代碼應該在鏈表的前面添加一個節點並打印當前元素。但是運行這段代碼會導致運行時錯誤並且程序終止。當詢問有多少個數字時,我輸入一個數字,然後顯示「main.cpp已停止工作」。什麼可能是錯的?在鏈表列表前插入節點

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

struct Node 
{ 

    int data; 
    Node* next; 
}; 
struct Node* head; 
using namespace std; 
void Insert(int x) 
{ 
     Node* temp=new Node(); 
     temp->data=x; 
     temp->next=head; 
     head=temp; 


} 

void Print() 
{ 
    Node* temp1=head; 
    while(temp1!=NULL) 
    { 
     printf("%d\n",temp1->data); 
     temp1=temp1->next; 

    } 
    printf("\n"); 
} 

int main() 
{ 
    head=NULL; 
    printf("how many numbers?\n"); 
    int n,i,x; 
    scanf("%d",n); 
    for(i=0;i<n;i++) 
    { 
     printf("Enter the number: \n"); 
     scanf("%d",x); 
     Insert(x); 
     Print(); 
    } 
    return 0; 

}

+1

尋求調試幫助的問題('**爲​​什麼不是這個代碼工作?**')必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現**的最短代碼** 。沒有**明確問題陳述**的問題對其他讀者沒有用處。請參閱:[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – Biffen

+1

'scanf(「%d」,&n);'請注意&符號 –

+2

在旁註:您應該學會清理 - 刪除您在完成時分配的內存 – Unimportant

回答

2

它甚至不是一個鏈表問題:

int n,i,x; 
scanf("%d",n); 

應該

int n,i,x; 
scanf("%d",&n); 

(還有的是下面的另一個發生)

因爲掃描整數他們需要他們的地址,而不是字符串。

+0

哦謝謝,最近研究指針,並將它們混合:(.. –

+0

順便說一句,忘記我說你的鏈表(現在編輯出來),插入看起來不錯。試圖成爲一個smartass需要更多的測試:) –