double_q_CPUTime;
double temp;
printf("Please enter q: CPU Time: ");
scanf("%lf", &temp);
if(input_validator('a',temp) == 'T') {
q_CPUTime = temp;
}
else {
printf("Invalid input");
}
我无法解决如何处理上述代码的错误。我基本上想
我希望循环直到用户输入有效的双精度。
我已经尝试了很多方法,最重要的是我最好的尝试。我无法想出实现这一目标的方法。
每次我尝试过,即使用户输入一个字符串,它也只会将一些奇怪的数字保存到双精度值中,导致我后来在程序中的计算中断或甚至C崩溃。
对我上一篇关于这个主题的非常含糊的帖子表示抱歉。
(我已经看过检查输入的每个字符,但后来又将问题转移到了双字符中)
答案 0 :(得分:1)
只需检查scanf的返回值即可检测错误。
#include <stdio.h>
int main(int argc, char const* argv[])
{
double input = 0.0;
// scanf() returns the number of correctly read input items
//In our case that's 1
if (scanf("%lf", &input) == 1) {
printf("%f", input);
} else {
printf("input error");
}
return 0;
}
答案 1 :(得分:1)
你应该使用strtod;它检查双溢出/下溢,如:
#include <errno.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
double d;
char *e,s[100];
fgets(s,100,stdin); if( s[strlen(s)-1]=='\n' ) s[strlen(s)-1]=0;
errno=0;
d=strtod(s,&e);
if( *e || errno==EINVAL || errno==ERANGE )
puts("error");
else
printf("d=%f\n",d);
答案 2 :(得分:0)
在“请输入...”printf之后废弃所有内容。从用户读入一个字符串。使用strtod将其转换为double并检查它是否是有效的双字符串。