为什么我的链接列表包含错误的数据?

时间:2015-02-14 23:49:15

标签: c string linked-list output character-arrays

打印出我的链表时,显示的内容不是我的预期。如何获得正确的输出?

struct node{ 
    int data; 
    struct node *next; 
};

struct node *newNode(int data){ 
    struct node *new_node=(struct node *) malloc(sizeof(struct node)); 
    new_node->data=data; 
    new_node->next=NULL; 
    return new_node; 
} 

void push(struct node*** head, int data){ 
    struct node* new_node=newNode(data); 
    new_node->next=(**head); 
    (**head)=new_node; 
} 

void create(struct node **number, char num[]){ 
    int x=0; 
    while(x<strlen(num)){ 
        int d=(int)(num[x]); 
        push(&number, d); 
        x++; 
   } 
}

void printList(struct node *number){ 
    while(number!=NULL){ 
       printf("%d", number->data); 
       number=number->next; 
    } 
    printf("\n"); 
} 

int main (void){ 
    struct node *first; 
    char num1[10]; 
    scanf("%s", num1); 
    create(&first, num1); 
    printList(first); 
    return 0; 
}

实施例

Input          : 1
Expected Output: 1
Actual Output  : 49

Input          : 12345
Expected Output: 12345
Actual Output  : 5352515049

我认为它是存储值的打印,而不是值本身。 如果这是错的,请纠正我。无论如何我如何获得我想要的预期输出。

2 个答案:

答案 0 :(得分:0)

问题是你正在读取ascii值,然后尝试打印整数,因为你需要存储整数而不是ascii值所需要的只是一个简单的数学运算,即减去数字的ascii值{ {1}},所以要将数字的ascii值转换为它所需要的整数值

'0'

这里我修复了你的代码,因为你将值附加到列表的头部而不是它的尾部

integer = ascii - '0';

答案 1 :(得分:0)

你有一个链接列表,它以相反的顺序结束,这就是你的第二个例子以相反的顺序出现的原因。如果您打印链接列表如下:

printf("%d ", number->data);

有空格,会更清楚发生什么,输出是ASCII值

53 52 51 50 49

但是您也会将字符值与数值混淆。如果你纠正了这个,

printf("%c ", number->data);

您将以相反的顺序获得原始输入字符。

5 4 3 2 1