链表输入类型问题

时间:2016-09-29 02:30:25

标签: c++ types

我有这个代码,要求用户输入一个数字,让程序知道我的链表有多大,然后下一个用户输入将是推入链接的数据。我对整数没有任何问题,但无论出于什么原因,一旦我开始使用小数点,例如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,并且使用两者得到相同的结果。

1 个答案:

答案 0 :(得分:0)

scanf_s("%d", &x); 

应该是

scanf_s("%lf", &x);

%d用于读取十进制整数。 %lf用于reading in a long floating point number,即double