尝试编译一个包含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;
}
答案 0 :(得分:8)
您已在choice
循环中声明do { } while
;这意味着它只能在这两个括号内访问。但是,在while(choice != 5)
条件下,您会在大括号外再次引用它;这是一个错误。解决方案是将choice
向上移动一级,并将其声明在main
的范围内。
答案 1 :(得分:3)
将choice
的声明移到循环之外。就在do
之前。
choice
仅限于内部循环。 while()
子句在循环之外,因此它无法访问在循环的花括号内声明的内容。
答案 2 :(得分:2)
只需在choice
声明之前声明do
即可。这是因为当您在do
循环中声明它时,它在while
条件中不可见,因为范围是局部的并且仅在循环内
答案 3 :(得分:1)
我知道对此发表评论已经太迟了。但是,如果将来有人遇到此问题并找到此问题。您需要在方括号之外声明变量。这是一个例子。
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;
}