无限循环,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')

这一行是正确的,它检查字符是否等于 yY

else if (cont  != 'n' || cont  != 'N')

这一行是主要问题,您的语句检查 cont 的值是否不等于 nN,即如上文所述,如果用户输入值 a 这一行会 return 为真,然后程序结束。要正确检查用户是否想要存在,您可以使用用于 y

的相同 if 语句
if (cont == 'n' || cont  == 'N')

如果你用这个替换原来的 if 语句,你的程序应该能按预期工作。请记住,以后 != 表示不等于,即如果该值是 nN return 以外的任何值,则为真。如上所示,== 运算符检查是否相等,因此如果 cont 与 'n'

的值相同,则 cont == 'n' 行表示 return 为真
printf("Invalid Please Re-enter");
getchar();
scanf("%c", &cont);

另请注意,请解释为什么您总是输入无用的 getchar(),这些行实际上什么都不做,您应该删除它们。