循环而双不相等的字符?

时间:2015-01-22 13:01:51

标签: c double character

我不确定如何执行此操作......

double fahrenheit;

fahrenheit = 0;

while (fahrenheit != "q")

我将使用scanf来获取华氏度的值。 华氏是一个双倍,q是一个角色所以显然它并不是真的喜欢它... 有人可以告诉我如何使这个工作吗?


感谢大家尝试并向我解释,但我真的处于学习C的初期阶段,或者只是编程。在我们的书中这是一个简单的练习,我还没有真正学到所有这些东西。 基本上,如果他们输入q,则没有任何反应。如果他们输入除q以外的任何其他内容,则会发生 这里有一个像1 + 1 = 2种简单公式的真正简单的执行吗?

3 个答案:

答案 0 :(得分:2)

传递字符时,如下所示的

scanf()返回0,所以当循环终止时输入q

double fahrenheit;
while(scanf("%lf",&fahrenheit) == 1)
{
 // Do your stuff
}

否则

  1. 使用char
  2. 将输入读入fgets()数组
  3. 使用strcmp()检查输入是否为q
  4. 如果输入不是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)区分由qEOF引起的循环 2)将在“q”,“quit”,“qxyz”上退出循环,但不在“Q”,“q”上退出。
3)输入会像“123 C”那样成功 4)没有学位范围检查,如“-1000”失败 5)不抱怨疯狂的输入&gt; 100 char s。