我不确定如何执行此操作......
double fahrenheit;
fahrenheit = 0;
while (fahrenheit != "q")
我将使用scanf来获取华氏度的值。 华氏是一个双倍,q是一个角色所以显然它并不是真的喜欢它... 有人可以告诉我如何使这个工作吗?
感谢大家尝试并向我解释,但我真的处于学习C的初期阶段,或者只是编程。在我们的书中这是一个简单的练习,我还没有真正学到所有这些东西。 基本上,如果他们输入q,则没有任何反应。如果他们输入除q以外的任何其他内容,则会发生 这里有一个像1 + 1 = 2种简单公式的真正简单的执行吗?
答案 0 :(得分:2)
scanf()
返回0,所以当循环终止时输入q
double fahrenheit;
while(scanf("%lf",&fahrenheit) == 1)
{
// Do your stuff
}
否则
char
fgets()
数组
strcmp()
检查输入是否为q
q
,请使用strtod()
将字符串转换为double并将该值分配给您的变量。答案 1 :(得分:1)
更好的方法是阅读一行文字,并解析它以查看它是q
字母还是可以转换为数字,如下所示
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char line[100];
printf("Enter Temperatur (F) > ");
if (fgets(line, sizeof(line), stdin) != NULL)
{
size_t length;
double fahrenheit;
char *endptr;
/* get the length of the input string */
length = strlen(line);
if (length == 0)
return -1;
if (line[length - 1] == '\n') /* remove the '\n' possibly read by fgets */
line[--length] = '\0';
/* check if the input string equals "q" */
if (strcmp(line, "q") == 0)
return 0;
/* convert the input string to a double */
fahrenheit = strtod(line, &endptr);
/* check if the conversion was successful */
if (*endptr != '\0')
{
printf("invalid input\n");
return -1;
}
printf("value = %f\n", fahrenheit);
}
return 0;
}
如果需要,您可以重试无效输入并处理除"q"
以外的其他命令,这样可以更好地控制输入。
答案 2 :(得分:0)
对于具有最小错误检查的简单解决方案。
将用户输入作为字符串读取
测试是否输入了q
否则转换为double
。
double fahrenheit;
while (1) { // repeat forever
char buffer[100];
fputs("Enter temperature in Fahrenheit:", stdout);
if (fgets(buffer, sizeof buffer, stdin) == NULL) break; // exit on IO error or EOF
if (buffer[0] == 'q') break;
if (sscanf(buffer, "%lf", &fahrenheit) == 1) { // was scan successful?
printf("Success: %f\n", fahrenheit);
} else {
printf("Failed: '%s'\n", buffer);
}
}
强大的解决方案缺少什么:
1)区分由q
或EOF
引起的循环
2)将在“q”,“quit”,“qxyz”上退出循环,但不在“Q”,“q”上退出。
3)输入会像“123 C”那样成功
4)没有学位范围检查,如“-1000”失败
5)不抱怨疯狂的输入&gt; 100 char
s。