【发布时间】:2011-11-17 19:41:46
【问题描述】:
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");
}
我不知道如何处理上述代码的错误。我基本上想
- 提示用户输入
- 验证用户输入以查看是否仅包含 1、2、3、4、5、6、7、8、9 或 .基本上是为了确保它是双重的
- 如果是双精度值,我想将 temp 中的保存值转换为 q_CPUTIME
- 如果不是双精度,则向用户显示一条错误消息,提示“输入无效”
我希望这个循环直到用户输入一个有效的双精度。
我已经尝试了很多方法,顶部的代码是我最好的尝试。我只是想不出一种方法来实现它。
每次我尝试过,即使用户输入一个字符串,它也会将一些奇怪的数字保存到 double 中,导致我稍后在程序中的计算中断甚至 C 崩溃。
对我上一篇关于这个主题的非常模糊的帖子表示歉意。
(我检查了输入的每个字符,但在将其转换为双精度时遇到了问题)
【问题讨论】:
-
你为什么要比较 input_validator 返回的 'T'?您是否使用“T”作为布尔真值的替代?
-
是的,因为 c 没有布尔值,我认为这是最好的方法......
-
您将
'0'排除在您的数字列表之外。你也忽略了科学记数法:1.2e34。但是您不能仅通过查看它包含的字符来验证表示双精度的字符串。"123.456"有效;"12.34.56"不是。strtod()为您处理这一切;无需重新发明轮子。 -
@user983969:“c 没有布尔值”过于简单化了。您应该阅读comp.lang.c FAQ 的第 9 节。
标签: c string error-handling double