当用户输入字母时,如何退出while循环" q" - C编程

时间:2016-09-15 19:55:50

标签: c while-loop

处理此作业。不知道如何摆脱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);


}

3 个答案:

答案 0 :(得分:4)

您需要改变策略。

  1. 阅读一行文字。
  2. 如果该行的第一个字母为q,则退出。
  3. 否则,请尝试使用sscanf
  4. 读取该行中的数字

    这是main的版本。

    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;
    }
    

答案 1 :(得分:1)

您应该将输入读作字符串(scanning a string)并将其转换为atof),而不是使用strcmp将输入字符串与退出命令进行比较。 您也可以使用isdigit检查输入(不要尝试转换非数字的任何内容)

答案 2 :(得分:0)

您可以使用

阅读字符
char c;
while (c != 'q') {
    scanf("%c", &c);
    //parse command
}