[英]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.