将 double 转换为 int 时出错
Error in converting double to int
我有一个代码有 2 个双精度数作为输入,然后我想将它转换为 2 个整数。我认为这要么是取消引用的问题,要么是我的转换语法已关闭。提前致谢
#include <stdio.h>
int main()
{
double * int1;
double * int2;
printf("Put in two numbers:");
scanf("%lf", int1);
scanf("%lf", int2);
int a = (int) (int1);
int b = (int) (int2);
printf("%d\n%d", a, b);
}
更改台词
scanf("%lf", int1);
scanf("%lf", int2);
到
scanf("%lf", &int1); //Use '&'
scanf("%lf", &int2);
不要为此使用指针变量。
It still says error: cast from pointer to integer of different size
你没有施放 "double to int"...你正在施放 "double* to int."
改变
int a = (int) (int1);
/* ^^^^ this is a pointer */
至
int a = (int) (*int1);
/* ^^^^^ this is a double */
您的程序应该是什么样子:
#include <stdio.h>
int main( void )
{
double value1;
double value2;
printf("Put in two numbers:");
scanf("%lf", &value1);
scanf("%lf", &value2);
int a = value1;
int b = value2;
printf("a=%d b=%d\n", a, b);
}
传递给scanf
的参数需要是适当变量的地址。所以你需要声明变量,例如double value1
然后将该变量的地址传递给 scanf
,例如scanf(..., &value1);
。
C 语言支持 double
到 int
的隐式转换,因此您根本不需要转换。隐式转换将截断数字。如果您希望数字四舍五入到最接近的 int
,那么您将需要使用 round
函数。
据我所知,您可以通过两种方式实现这一点,一种是使用堆上的指针和动态内存,另一种是使用自动值。
动态分配内存的指针
#include <stdio.h>
#include <stdlib.h>
int main()
{
double * int1 = malloc(sizeof(double));
double * int2 = malloc(sizeof(double));
printf("Put in two numbers:");
scanf("%lf", int1);
scanf("%lf", int2);
int a = (int) *int1;
int b = (int) *int2;
printf("%d\n%d", a, b);
free(int1);
free(int2);
}
在系统堆栈上分配的自动值
#include <stdio.h>
int main()
{
double int1;
double int2;
printf("Put in two numbers:");
scanf("%lf", &int1);
scanf("%lf", &int2);
int a = (int) int1;
int b = (int) int2;
printf("%d\n%d", a, b);
}
注意:我在您的示例中使用指针的方式看到的一个问题是没有它们指向的内存,我相信 scanf 不会为指针分配内存。
我有一个代码有 2 个双精度数作为输入,然后我想将它转换为 2 个整数。我认为这要么是取消引用的问题,要么是我的转换语法已关闭。提前致谢
#include <stdio.h>
int main()
{
double * int1;
double * int2;
printf("Put in two numbers:");
scanf("%lf", int1);
scanf("%lf", int2);
int a = (int) (int1);
int b = (int) (int2);
printf("%d\n%d", a, b);
}
更改台词
scanf("%lf", int1);
scanf("%lf", int2);
到
scanf("%lf", &int1); //Use '&'
scanf("%lf", &int2);
不要为此使用指针变量。
It still says error: cast from pointer to integer of different size
你没有施放 "double to int"...你正在施放 "double* to int."
改变
int a = (int) (int1);
/* ^^^^ this is a pointer */
至
int a = (int) (*int1);
/* ^^^^^ this is a double */
您的程序应该是什么样子:
#include <stdio.h>
int main( void )
{
double value1;
double value2;
printf("Put in two numbers:");
scanf("%lf", &value1);
scanf("%lf", &value2);
int a = value1;
int b = value2;
printf("a=%d b=%d\n", a, b);
}
传递给scanf
的参数需要是适当变量的地址。所以你需要声明变量,例如double value1
然后将该变量的地址传递给 scanf
,例如scanf(..., &value1);
。
C 语言支持 double
到 int
的隐式转换,因此您根本不需要转换。隐式转换将截断数字。如果您希望数字四舍五入到最接近的 int
,那么您将需要使用 round
函数。
据我所知,您可以通过两种方式实现这一点,一种是使用堆上的指针和动态内存,另一种是使用自动值。
动态分配内存的指针
#include <stdio.h>
#include <stdlib.h>
int main()
{
double * int1 = malloc(sizeof(double));
double * int2 = malloc(sizeof(double));
printf("Put in two numbers:");
scanf("%lf", int1);
scanf("%lf", int2);
int a = (int) *int1;
int b = (int) *int2;
printf("%d\n%d", a, b);
free(int1);
free(int2);
}
在系统堆栈上分配的自动值
#include <stdio.h>
int main()
{
double int1;
double int2;
printf("Put in two numbers:");
scanf("%lf", &int1);
scanf("%lf", &int2);
int a = (int) int1;
int b = (int) int2;
printf("%d\n%d", a, b);
}
注意:我在您的示例中使用指针的方式看到的一个问题是没有它们指向的内存,我相信 scanf 不会为指针分配内存。