使用goto语句进行循环

时间:2016-01-24 13:06:13

标签: c goto temperature

#include <stdio.h>

int main() {

    char choice;
    float x,y;

    start:
    printf("[c] Converts Celsius -> Fahrenheit\n[f] Converts Fahrenheit -> Celsius\n\n\n");
    printf("Enter Choice: ");
    scanf("%c",&choice);
    if (choice!='c' || choice!='f' || choice!='x') {
            printf("Wrong Choice: Try Again!");
            goto start;

        } if (choice!=x)
          printf("Input Value: ");
          scanf("%f",&x);
                if (choice =='c')
                    y = 1.8 * x + 32
                else
                    y = (x-32) * (5/9)
          printf("Result: %.2f",y);
          exit:

    return 0;
}

我的导师发布了这个,但是当我尝试它时,它有错误,需要帮助来解决它。

2 个答案:

答案 0 :(得分:2)

此代码存在一些问题:

  1. 使用STintersect代替goto循环不是实现这一目标的方法。
  2. 您的第二个whileif)缺少大括号。这样,只有第一个语句执行,如果为true。其余的始终执行。
  3. 您在计算后遗漏了分号if (choice != x)
  4. 第一个;中的布尔逻辑不正确。
  5. 在您的第二个if中,您要与变量进行比较,而不是固定值。
  6. 您的华氏度到摄氏度算术不正确。
  7. 希望这些提示对您有所帮助。我不会发布正确的代码,这取决于你还在学习; - )。

答案 1 :(得分:0)

首先,您应该忘记C中有goto语句。

包含goto语句的所有程序,我看到包含一些IBM的源代码,其中包含许多与goto语句相关的错误。

goto语句使程序难以阅读,更难以维护和修改。

使用goto语句与traffic violatins相同。:)

取代此代码段

start:
printf("[c] Converts Celsius -> Fahrenheit\n[f] Converts Fahrenheit -> Celsius\n\n\n");
printf("Enter Choice: ");
scanf("%c",&choice);
if (choice!='c' || choice!='f' || choice!='x') {
        printf("Wrong Choice: Try Again!");
        goto start;

    }

至少在if语句

中有无效条件
if (choice!='c' || choice!='f' || choice!='x') 

而不是有效

if (choice!='c' && choice!='f' && choice!='x') 

你可以写例如

enum { Celsius = 'c', Fahrenheit = 'f', Exit = 'x' };
char choice;
int valid_input;

do
{
    printf( "[c] Converts Celsius -> Fahrenheit\n"
            "[f] Converts Fahrenheit -> Celsius\n"
            "[x] Exit\n\n" );

    printf( "Enter Choice: " );

    if ( scanf( "%c ", &choice ) != 1 ) choice = Exit;

    valid_input = choice == Celsius || choice == Fahrenheit || choice == Exit;

    if ( !valid_input ) puts( "Wrong Choice: Try Again!\n" );
} while ( !valid_input );

您的程序包含许多错误。列举它们的内容我将展示如何 该程序可以写成

#include <stdio.h>

int main( void )
{    
    enum { Celsius = 'c', Fahrenheit = 'f', Exit = 'x' };
    char choice;
    int valid_input;

    do
    {
        printf( "[c] Converts Celsius -> Fahrenheit\n"
                "[f] Converts Fahrenheit -> Celsius\n"
                "[x] Exit\n\n" );

        printf( "Enter Choice: " );

        if ( scanf( "%c ", &choice ) != 1 ) choice = Exit;

        valid_input = choice == Celsius || choice == Fahrenheit || choice == Exit;

        if ( !valid_input ) puts( "Wrong Choice: Try Again!\n" );
    } while ( !valid_input );


    switch( choice )
    {
        float x, y;

        case Celsius: case Fahrenheit:
            printf( "Input Value: " );
            if ( scanf( "%f", &x ) == 1 )
            {                
                if ( choice == Celsius )
                    y = 1.8 * x + 32;
                else
                    y = ( x - 32 ) * ( 5.0f / 9.0f );
                printf( "Result: %.2f\n", y );
            }                
        case Exit:
            puts( "Bye!" );
            break;
    }

    return 0;
}            

如果要按顺序输入

c 20 x

然后输出看起来像

[c] Converts Celsius -> Fahrenheit
[f] Converts Fahrenheit -> Celsius
[x] Exit

Enter Choice: c
Input Value: 20
Result: 68.00
Bye!