无限循环,c逻辑思维
Infinite looping,c logical thinking
我在第一次进入程序时遇到了一个问题,就是我输入的内容是未知的。它会告诉我一个无限循环问题程序关闭。程序不会读取 else
语句。
char cont;
printf("Do u want continue\n");
scanf("%c", &cont);
getchar();
do
{
if (cont == 'y' || cont == 'Y')
{
selection();
}
else if (cont != 'n' || cont != 'N')
{
printf("Program Closing \n");
}
else
{
printf("Invalid Please Re-enter");
getchar();
scanf("%c", &cont);
}
} while (cont != 'n'&& cont != 'N');
让我们从
开始逐行剖析您的代码
scanf("%c", &cont);
这一行将从 stdin 获取一个 char 值并将其放入 cont,cont 是一个 char,所以没问题
getchar();
对此我只想说,为什么?它没有任何用处,请将其删除。
现在进入循环,我们有这个语句
if (cont == 'y' || cont == 'Y')
这一行是正确的,它检查字符是否等于 y
或 Y
else if (cont != 'n' || cont != 'N')
这一行是主要问题,您的语句检查 cont 的值是否不等于 n
或 N
,即如上文所述,如果用户输入值 a
这一行会 return 为真,然后程序结束。要正确检查用户是否想要存在,您可以使用用于 y
的相同 if 语句
if (cont == 'n' || cont == 'N')
如果你用这个替换原来的 if 语句,你的程序应该能按预期工作。请记住,以后 !=
表示不等于,即如果该值是 n
或 N
return 以外的任何值,则为真。如上所示,==
运算符检查是否相等,因此如果 cont 与 'n'
的值相同,则 cont == 'n'
行表示 return 为真
printf("Invalid Please Re-enter");
getchar();
scanf("%c", &cont);
另请注意,请解释为什么您总是输入无用的 getchar()
,这些行实际上什么都不做,您应该删除它们。
我在第一次进入程序时遇到了一个问题,就是我输入的内容是未知的。它会告诉我一个无限循环问题程序关闭。程序不会读取 else
语句。
char cont;
printf("Do u want continue\n");
scanf("%c", &cont);
getchar();
do
{
if (cont == 'y' || cont == 'Y')
{
selection();
}
else if (cont != 'n' || cont != 'N')
{
printf("Program Closing \n");
}
else
{
printf("Invalid Please Re-enter");
getchar();
scanf("%c", &cont);
}
} while (cont != 'n'&& cont != 'N');
让我们从
开始逐行剖析您的代码scanf("%c", &cont);
这一行将从 stdin 获取一个 char 值并将其放入 cont,cont 是一个 char,所以没问题
getchar();
对此我只想说,为什么?它没有任何用处,请将其删除。
现在进入循环,我们有这个语句
if (cont == 'y' || cont == 'Y')
这一行是正确的,它检查字符是否等于 y
或 Y
else if (cont != 'n' || cont != 'N')
这一行是主要问题,您的语句检查 cont 的值是否不等于 n
或 N
,即如上文所述,如果用户输入值 a
这一行会 return 为真,然后程序结束。要正确检查用户是否想要存在,您可以使用用于 y
if (cont == 'n' || cont == 'N')
如果你用这个替换原来的 if 语句,你的程序应该能按预期工作。请记住,以后 !=
表示不等于,即如果该值是 n
或 N
return 以外的任何值,则为真。如上所示,==
运算符检查是否相等,因此如果 cont 与 'n'
cont == 'n'
行表示 return 为真
printf("Invalid Please Re-enter");
getchar();
scanf("%c", &cont);
另请注意,请解释为什么您总是输入无用的 getchar()
,这些行实际上什么都不做,您应该删除它们。