C 如何修复while条件,使其不执行dopart不停止

C 如何修复while条件,使其不执行dopart不停止,c,do-while,C,Do While,问题是,即使输入了介于1和8之间的数字,程序也会继续询问高度。我也很难理解为什么在while循环之后需要重述int height,但这是一个次要问题 { do { int height = get_int("Height: \n"); } while ('h'>8 || 'h'<1); int height; printf ("Stored: %d\n", height); } 我希望它向用户显示输入的数字,但它不会通过输入请求,尽管wh

问题是,即使输入了介于1和8之间的数字,程序也会继续询问高度。我也很难理解为什么在while循环之后需要重述int height,但这是一个次要问题

{
   do
   {
    int height = get_int("Height: \n");
   }
   while ('h'>8 || 'h'<1);

  int height;

  printf ("Stored: %d\n", height);
}
我希望它向用户显示输入的数字,但它不会通过输入请求,尽管while函数中存在条件

测试是一个常量表达式,'h'>8始终为真,'h''h'是一个常量。在中,它将始终具有104的整数值。所以“h'>8”永远是真的

至于你的第二个问题。do while循环内部定义的高度变量位于不同的范围内。在每次迭代开始时创建一个新高度,并在每次迭代结束时销毁

在循环之前定义高度将使其可以在循环内部和之后访问

int height = 0;
do {
    height = get_int("Height: \n");
} while (height > 8 || height < 1);
printf("Stored: %d\n", height);

请查看C以了解更多详细信息。

您应该在外部声明变量int high。像这样

问题是,即使输入了介于1和8之间的数字,程序也会继续询问高度。我也很难理解为什么在while循环之后需要重述int height,但这是一个次要问题

{
   do
   {
    int height = get_int("Height: \n");
   }
   while ('h'>8 || 'h'<1);

  int height;

  printf ("Stored: %d\n", height);
}
{

内部高度; 做

{

高度=获得正确的高度:\n

}

在您的情况下,当'h'>8 | |'h':

while ('h'>8 || 'h'<1)
在循环内部声明高度意味着它在循环外部(包括循环条件)不再存在。稍后定义的高度与此变量不同

将高度定义移到循环之外,并在比较中使用高度:

int height;
do
{
    height = get_int("Height: \n");
} while (height>8 || height<1);

printf ("Stored: %d\n", height);

您在while中的测试永远不会更改并且始终为真,编译器将“h”引用为字符,并将其转换为ASCII代码,即104,该代码始终大于8。此代码中的while对于编译器来说总是像while 104>8 | | 104<>。此外,您不必重述int height;,height变量是我已经宣布了

您可以更改代码,例如:

{

do {
   int height = get_int("Height : \n");
} while ( height > 8 || height < 1);

printf ("Stored: %d\n", height);

}


“h”是一个整数常量,通常大于8。将“h”更改为高度而不使用引号。该条件是重言式的。将单引号替换为零,将h替换为高度。非常感谢。您关于在循环外声明它的说明也非常有用。@Nahom很高兴我能帮上忙。如果您觉得有用,请随意。
{

do {
   int height = get_int("Height : \n");
} while ( height > 8 || height < 1);

printf ("Stored: %d\n", height);

}