首页 > 解决方案 > 如何在 C 语言中比较 char 数组和 char

问题描述

下面的代码有什么问题?
我被困在 do while 循环中。我比较性格错了吗?我也尝试过使用scanf("%c", &answer);但结果相同

char answer[10];

    for (i = 0; i < wish; i++)
    {
        /* ... */
        /* ... */
    
        do
        {
            printf(" Does this item have financing options? [y/n]:");
            scanf("%s", &answer[i]);
        
            if ((answer[i] != 'y' )|| (answer[i] != 'n'))
            { 
                printf("\nERROR: Must be a lowercase 'y' or 'n'");
            }
        } while ((answer[i] != 'y') || (answer[i] != 'n'));

标签: arrayscchar

解决方案


您被困在循环中,因为您继续循环的条件始终为真。
如果您看不清楚,请尝试命名一个既不与“y”不同也不与“n”不同的字母。
以“a”为例,两者都不同。
以“n”为例,它与“n”没有区别,但与“y”不同。
以“y”为例,它与“n”不同,但与“y”没有不同。

所以无论输入什么字母,循环都会继续。

要解决,请使用 Chris 的评论并更改为

((answer[i] != 'y' ) && (answer[i] != 'n'))

这样,除“n”或“y”之外的任何其他字母都将不同于“n”并且不同于“y”并将继续循环,而“y”和“n”都将不同于至少一个两者并结束循环。

一旦你得到了正确的条件,它可能只需要一次,即只在循环中。if至少在显示的代码中,不需要额外的。除了您在此处显示的内容之外,您可能还有需要它的代码。


推荐阅读