帮助do / while和switch语句在C中

问题描述 投票:3回答:4

尝试用5个选择编译一个简单的switch语句。 1-4产生计算并输出,而#5退出程序。我做了一个do / while循环,所以如果输入了选择5,程序将结束。我收到一个错误:

4_19.c: In function ‘main’:
4_19.c:95: error: ‘choice’ undeclared (first use in this function)
4_19.c:95: error: (Each undeclared identifier is reported only once
4_19.c:95: error: for each function it appears in.)

我不知道为什么要说它未声明,因为我在一开始就声明了它。我做错什么了?谢谢这是我的代码:

    /* C++ book. 4_19 The speed of sound in gases. 
Create a menu to choose between 4 gases. User then enters number of seconds
it took to travel to destination. The program will calculate how far the source was (from speed that is unique to gas density). Validate input of seconds from 0 to 30 seconds only. 
*/

#include <stdio.h>
int main(void)
{
    do
    {
        // Declare variables
        int choice;
        float speed, seconds = 0, distance;

        //Display program details and menu choice
        printf("\n");
        printf("Choose a gas that you would like to analyze.\n");
        printf("Medium                              Speed(m/s)\n");
        printf("1.Carbon Dioxide                    258.0\n");
        printf("2.Air                               331.5\n");
        printf("3.Helium                            972.0\n");
        printf("4.Hydrogen                          1270.0\n");
        printf("5.Quit Program");
        printf("Enter a choice 1-5: ");
        scanf("%i",&choice);
        while (choice < 1 || choice > 5)        // Validate choice input. 
        {   
            printf("You entered an invalid number. Choose 1,2,3, or 4 only.\n");
            printf("Enter a choice 1-5: ");
            scanf("%i",&choice);
        }

        // Switch statements to execute different choices
        switch(choice)
        {
            case 1:     // Carbon Dioxide
                printf("Enter number of seconds, from 0 to 30, that the sound traveled in carbon dioxide: ");
                scanf("%f", &seconds);
                while (seconds < 0 || seconds > 30)      // Validate time entered
                {
                    printf("The range of input for seconds is only from 0 to 30 seconds.\n");
                    printf("Please enter a valid number for number of seconds: ");
                    scanf("%f", &seconds);
                }
                speed = 258.0;
                distance = speed * seconds;
                printf("The distance from the source of the sound is %.2f meters in carbon dioxide.\n", distance);
                break;

            case 2:     // Air
                printf("Enter number of seconds, from 0 to 30, that the sound traveled in air: ");
                scanf("%f", &seconds);
                while (seconds < 0 || seconds > 30)      // Validate time entered
                {
                    printf("The range of input for seconds is only from 0 to 30 seconds.\n");
                    printf("Please enter a valid number for number of seconds: ");
                    scanf("%f", &seconds);
                }
                speed = 331.5;
                distance = speed * seconds;
                printf("The distance from the source of the sound is %.2f meters in air.\n", distance);
                break;

            case 3:     // Helium
                printf("Enter number of seconds, from 0 to 30, that the sound traveled in helium: ");
                scanf("%f", &seconds);
                while (seconds < 0 || seconds > 30)      // Validate time entered
                {
                    printf("The range of input for seconds is only from 0 to 30 seconds.\n");
                    printf("Please enter a valid number for number of seconds: ");
                    scanf("%f", &seconds);
                }
                speed = 972.0;
                distance = speed * seconds;
                printf("The distance from the source of the sound is %.2f meters in helium.\n", distance);
                break;

            case 4:     // Hydrogen
                printf("Enter number of seconds, from 0 to 30, that the sound traveled in hydrogen: ");
                scanf("%f", &seconds);
                while (seconds < 0 || seconds > 30)      // Validate time entered
                {
                    printf("The range of input for seconds is only from 0 to 30 seconds.\n");
                    printf("Please enter a valid number for number of seconds: ");
                    scanf("%f", &seconds);
                }
                speed = 1270.0;
                distance = speed * seconds;
                printf("The distance from the source of the sound is %.2f meters in hydrogen.\n", distance);
                break;

            case 5:
                printf("End of Program\n");
                break;
        }
    } while (choice != 5);

    return 0;
}
c switch-statement do-while
4个回答
8
投票

您已经在choice循环中声明了do { } while;这意味着只能在这两个括号内访问它。但是,在您的while(choice != 5)条件下,您在大括号之外再次引用了它;这是一个错误。解决方案是将choice上移一个级别,并在main的范围内声明它。


3
投票

choice的声明移到循环外。 do之前。

choice仅在循环[范围内。 while()子句不在循环内,因此它无法访问在循环花括号内声明的内容。


2
投票
只需在choice语句之前声明do。这是因为当您在do循环中声明它时,它在while条件中不可见,因为作用域是局部的并且仅在循环中]

0
投票
我知道对此发表评论已经太迟了。但是,如果将来有人遇到此问题并找到此问题。这是一个do-while循环的示例。样本:

int main() { char choice; // Variables defined outside loop. With in the scope of main. double a, x, res; do { cout << "Enter a: "; cin >> a; cout << "Enter x: "; cin >> x; res = 5.00 * tanh(a, x) + 4.00 * cos(a, x); cout << "F = " << res << endl; cout << "Would you like to continue? "; cin >> choice; } while (choice == 'Y' || choice == 'y'); return 0; }

© www.soinside.com 2019 - 2024. All rights reserved.