简体   繁体   English

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

[英]Help with do/while and switch statements in C

Trying to compile a simple switch statement with 5 choices.尝试用 5 个选项编译一个简单的 switch 语句。 1-4 produce calculations and output while #5 exits the program. 1-4 产生计算和 output 而#5 退出程序。 I made a do/while loop so if choice 5 is entered the program will end.我做了一个 do/while 循环,所以如果输入选项 5,程序将结束。 I get an error:我收到一个错误:

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.)

I don't know why it is saying its undeclared, because I declared it in the beginning.我不知道为什么它说它未声明,因为我在一开始就声明了它。 What did I do wrong?我做错了什么? Thanx.谢谢。 Here is my code:这是我的代码:

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

You have declared choice inside your do { } while loop;您已经在do { } while循环中声明了choice this means that it can only be accessed within those two braces.这意味着它只能在这两个大括号内访问。 However, in your while(choice != 5) condition, you reference it again, outside the braces;但是,在您的while(choice != 5)条件中,您在大括号之外再次引用它; this is an error.这是一个错误。 The solution is to move choice up one level, and declare it within the scope for main .解决方案是将choice上移一级,并在 scope 中为main声明它。

Move the declaration of choice outside of the loop.choice声明移到循环之外。 Right before the do .就在do之前。

choice is only scoped inside the loop. choice仅在循环内范围 The while() clause is outside of the loop, so it can't access things that were declared inside the loop's curly braces itself. while()子句位于循环之外,因此它无法访问在循环的花括号内声明的内容。

Just declare choice before the do statement.只需在do语句之前声明choice This is because when you declare it within the do loop, its not visible in the while condition as the scope is local and within the loop only这是因为当您在do循环中声明它时,它在while条件中不可见,因为 scope 是本地的并且仅在循环内

I know it is super late to comment on this.我知道现在评论这个已经太晚了。 However, if anyone runs into this problem in the future and finds this question.但是,如果将来有人遇到这个问题并找到这个问题。 You need to declare variables outside of the brackets.您需要在括号外声明变量。 Here is an example.这是一个例子。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM