我有一个类似的结构:
struct Node
{
char itemName[256];
int idNumber;
float price;
struct Node * next;
}; typedef struct Node node
我正在尝试将用户输入从控制台扫描到节点的price元素中,如下所示:
new_node = malloc(sizeof(node));
scanf("%d", &(new_node->idNumber));
scanf("%f", &(new_node->price));
我试图用以下内容打印声明:
printf("%f", new_node->price);
我有一些其他方法使用此值执行计算,并且它们不输出正确的值。所以我开始尝试打印存储在该价格元素中的内容..如果我输入类似32.40的内容,它将只打印0.40。我错过了什么吗?
答案 0 :(得分:0)
您的输入数据看起来与您的scanf
电话“未对齐”。看起来特别可疑的部分是阅读书名:它是一个字符串,所以很有可能ID
号被scanf
消耗,同时还有书的正确标题。
一旦发生这种情况,使用%d
32.40
消费32
消费ID
,将.40
留在缓冲区中。当%f
出现时,它会将此输入作为正确的浮点数而不会触发错误。
要解决此问题,您可以为标题引入一个特殊的终止字符,例如;
,并将其作为标记放入输入中。这样您就可以使用%255[^;]
阅读标题来阅读标题,在到达输入的ID
部分之前停止。