打印出我的链表时,显示的内容不是我的预期。如何获得正确的输出?
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
我认为它是存储值的打印,而不是值本身。 如果这是错的,请纠正我。无论如何我如何获得我想要的预期输出。
答案 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