正在处理这个任务。不知道如何摆脱while循环,我不能使用比while循环更高级的东西。我试着把int转换成char,但没用。下面是我的代码。任何帮助都将不胜感激。

/* This program has the user input a number. This number is then printed out in degrees F, C and K*/

#include <stdio.h>

#define KEL 273.16
#define CEL1 32
#define CEL2 0.5555

void temperatures(double temp);


int main(void)
{
    double tempF; // Temperature the user inputs

    char userinput; // Quit character the user inputs

    userinput = 'a';

    tempF = 0;

    printf("Enter a temperature in degrees Farenheit or enter q to quit:\n");
    scanf_s("%lf", &tempF);
    //scanf_s("%c", &userinput);

    while ((char)tempF  != 'q')
    {
        temperatures(tempF);
        printf("Enter a temperature in degrees Farenheit or enter q to quit:\n");
        scanf_s("%lf", &tempF);
        //scanf_s("%c", &userinput);

    }

    printf("Goodbye!\n");


    return 0;
}

void temperatures(double temp)
{
    double celsius;
    double kelvins;

    celsius = (temp - CEL1) * CEL2;
    kelvins = celsius + KEL;

    printf("%lf F is %lf degrees C or %lf degrees K.\n", temp, celsius, kelvins);


}

最佳答案

你需要改变你的策略。
读一行文字。
如果该行的第一个字母是“cc>”,则退出。
否则,尝试使用q从行中读取数字。
这里有一个版本的sscanf可以做到这一点。

int main(void)
{
   double tempF; // Temperature the user inputs
   char line[200];

   while ( 1 )
   {
      printf("Enter a temperature in degrees Fahrenheit or enter q to quit:\n");

      // Read a line of text.
      if (fgets(line, sizeof(line), stdin) == NULL )
      {
         break;
      }

      if ( line[0] == 'q' )
      {
         break;
      }

      if ( sscanf(line, "%lf", &tempF) == 1 )
      {
         // Got the temperature
         // Use it.
      }
      else
      {
         // The line does not have a number
         // Deal with the error.
      }
   }

   printf("Goodbye!\n");

   return 0;
}

关于c - 用户输入字母“q”时如何退出while循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39519353/

10-12 16:53