tdb*_*dbr 1 c floating-point integer
练习30
编写一个程序,读取以十进制扩展名开发的浮点值
记住数据控制
这是没有关于整数类型的消息的新消息.
#include <stdio.h>
#include <math.h>
int main(){
double x; //the argument of f(x)
printf("Program demands x");
printf("\nand writes the rounded value\n");
printf("Author: xXx\n\n");
//loading data
printf("Write x in float type in decimal extension "); // after many tries, program is not rounding the value
if (scanf("%lf",&x)!=1 || getchar()!='\n'){
printf("Wrong data.\n");
printf("\nEnd of program.\n");
return 0;
}
double round( double x );
printf( "Rounded value is = %lf\n", x);
printf("\nEnd of program.\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*nan 12
我建议如下:
val,例如。val放入一个 int 变量中truncated,例如。val和truncated是否相等。该函数可能如下所示:
bool isInteger(double val)
{
int truncated = (int)val;
return (val == truncated);
}
Run Code Online (Sandbox Code Playgroud)
您可能需要添加一些完整性检查,以防val超出可以存储在int.
请注意,我假设您想使用数学家对整数的定义。例如,此代码将"0.0"视为指定整数。
把事情简单化:
将输入作为字符串读入缓冲区 fgets(buffer, BUFFER_SIZE, stdin);
使用sscanf尝试读取整数:
int i, r, n;
r = sscanf(buffer, "%d%n", &i, &n);
if(r == 1 && n == strlen(buffer)) {
// is integer
}
Run Code Online (Sandbox Code Playgroud)
这里的额外长度检查是为了确保评估所有字符,并且12.3不接受数字等12.
如果上一步失败,请尝试读取浮点数:
double dbl;
r = sscanf(buffer, "%lf", &dbl);
if(r == 1) {
// is double
}
Run Code Online (Sandbox Code Playgroud)