退出C中的while循环

时间:2015-06-10 01:05:18

标签: c

#include <stdio.h>
#define true 1
#define false 0

int main(int argc, char *argv[])
{
    float celsius, fahrenheit;
    while(true) {

    printf("Please input a temperature in Celsius (type 'stop' to stop): " );
    scanf("%f", &celsius);

    fahrenheit = (1.8 * celsius) + 32;
    printf("Temperature in Fahrenheit: %f ", fahrenheit);
    }

    return(0);

}

我试图在C中编写一个将摄氏温度转换为华氏温度的程序。我希望程序继续循环,直到用户输入“停止”。在C中退出while循环的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

由于stop不会转换为浮点数,因此您应该从scanf()测试返回值,因此:

#include <stdio.h>

int main(void)
{
    float celsius, fahrenheit;
    while (1)
   {
        printf("Please input a temperature in Celsius (type 'stop' to stop): ");
        if (scanf("%f", &celsius) != 1)
            break;

        fahrenheit = (1.8 * celsius) + 32;
        printf("Temperature in Fahrenheit: %f\n", fahrenheit);
    }

    return(0);
}

break语句实际上打破了循环。请注意,如果您键入'abracadabra'或其他任何不是浮点值的值,这将停止。使用换行符终止非提示输出。

答案 1 :(得分:1)

创建while循环的最简单方法,如果输入&#34; stop&#34;首先将输入作为字符串读取,然后检查输入是否等于&#34;停止&#34;如果不是,则将其转换为浮点变量。我对您的代码进行了一些更改。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUFFER_SIZE     0x20

int main ( int argc, char **argv )
{
    char buffer [ BUFFER_SIZE ];
    char *exitword = "stop";
    float celsius, fahrenheit;

    while ( 0x01 )
    {
            memset ( buffer, 0x00, BUFFER_SIZE );

            printf("Please input a temperature in Celsius (type '%s' to stop): ", exitword );

            if ( fgets ( buffer, BUFFER_SIZE - 0x01, stdin ) == NULL )
            {
                    fprintf ( stderr, "Unable to read user input!\n" );
                    fprintf ( stderr, "Please try again\n" );
                    continue;
            }

            if ( strncmp ( buffer, exitword, strlen ( exitword )) == 0x00 )
            {
                    printf ( "Good bye!\n" );
                    break;
            }

            if (( celsius = strtof ( buffer, NULL )) == 0 )
            {
                    fprintf ( stderr, "Unable to convert user input to floating point number\n" );
                    fprintf ( stderr, "Please try again\n" );
                    continue;
            }

            fahrenheit = (1.8 * celsius) + 32;
            printf("Temperature in Fahrenheit: %f\n", fahrenheit);
    }

    return EXIT_SUCCESS;
}

答案 2 :(得分:0)

这个程序可以正常使用一些约束。这适用于 整数两位数的celcius 值。一个用&#34; stop&#34;初始化的字符串。采用与用户输入的字符串进行比较。如果用户输入一个两位数的整数,则该字符串将转换为数字并进行进一步的计算

#include <stdio.h>
#include <string.h>
#define true 1





int main(int argc, char *argv[])
{
    int celsius=0;
    float fahrenheit;
    char stop[]="stop";
    char checkForStop[10];
    int i;
    int array[10];

    while(true) 
    {

       printf("Please input a temperature in Celsius (type 'stop' to stop): " );
       gets(checkForStop);

       if(strcmp(stop,checkForStop)==0)
         {
           break;
         }
       else
         {
            for(i=0;i<2;i++)
              {
                array[i]=checkForStop[i]-'0';  // converts character to integer
              }
            celsius = array[0]*10+array[1];
         }  


        fahrenheit = (1.8 * celsius) + 32;`enter code here`
        printf("Temperature in Fahrenheit: %f ", fahrenheit);
    }

    return(0);

}