我有这个代码,要求用户输入一个数字,让程序知道我的链表有多大,然后下一个用户输入将是推入链接的数据。我对整数没有任何问题,但无论出于什么原因,一旦我开始使用小数点,例如32.22,程序就会停止正常执行并将数字保留在带小数点的数字的左侧,并将相同的数字添加到其余部分的节点。仅供参考,我正在使用Visual Studio Express 2012进行开发。
为了执行良好,分别使用3作为基准数和数字1,2,3,我得到以下输出:
How many numbers?
3
Please enter number
1
List is: 1
Please enter number
2
List is: 2 1
Please enter number
3
List is: 3 2 1
Press any key to continue . . . _
对于糟糕的输出我得到了这个:
How many numbers?
3
Please enter number
1
List is: 1
Please enter number
23.23
List is: 23 1
Please enter number
List is: 23 23 1
Press any key to continue . . . _
这是我的代码:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using std::cout;
using std::cin;
using std::endl;
struct Node
{
double data;
Node* next;
};
struct Node* head; // global variable
void Insert(double x)
{
Node* temp = new Node;
temp->data = x;
temp->next = NULL;
if(head != NULL) temp->next = head;
head = temp;
}
void Print()
{
Node* temp = head;
printf("List is: ");
while(temp != NULL)
{
printf(" %d", temp->data);
temp = temp->next;
}
printf("\n");
}
int main()
{
head = NULL; // empty list
printf("How many numbers?\n");
int n, i;
double x;
scanf_s("%d", &n);
for(i = 0; i < n; i++)
{
printf("Please enter number \n");
scanf_s("%d", &x);
Insert(x);
Print();
}
system("PAUSE");
return 0;
}
有关此的任何提示或建议吗?让我感到困惑的是,代码对于整数非常有用,但是一旦我开始引入小数点,它就会变得疯狂。我已经尝试将用户输入以及我的节点结构中的数据类型转换为类型int和类型double,并且使用两者得到相同的结果。
答案 0 :(得分:0)
scanf_s("%d", &x);
应该是
scanf_s("%lf", &x);
%d
用于读取十进制整数。 %lf
用于reading in a long floating point number,即double
。