在C中使用boolean compare的问题

时间:2014-02-17 01:40:33

标签: c

我正在尝试检查“y”或“n”,如果输入超出范围,则继续要求用户重新输入他们的回复。

我现在有什么:

do{
   printf("Press 'y' to go again or 'n' to quit: ");
   scanf("%s", goAgain);
   result = strncmp(goAgain, yes, 1);
   result2 = strncmp(goAgain, no, 1);
   printf("%d %d\n", result, result2);

}while(result != 0 || result2 != 0);

我知道这不高效,我在调试时一直在尝试随机的东西。在此设置中,yes和no都是char *变量。是包含“y”而不包含“n”

最后一个printf的输出结果为0,结果为11。自从我使用OR以来,这应该已经退出了。我做了一些显然很愚蠢的事情,或者是我缺少一些C的怪癖(也是......这是我编写的第一个C程序所以请解释一下C的具体建议)

由于

编辑:谢谢你的回复....这是我应该抓住的一个相当愚蠢的错误。现在,有更好的方法吗?我目前的方式感觉非常笨重,而且我没有看到任何方法让它变得更加笨重(除了直接将strncmp移动到while语句中)

3 个答案:

答案 0 :(得分:2)

如果result为0且result2为11,则

result != 0 || result2 != 0
0 != 0 || 11 != 0
false || true
true

表示while循环将继续循环。

答案 1 :(得分:1)

strncmp(str1,str2,num)函数返回一个整数值,表示字符串之间的关系:

  • 零值表示两个字符串中比较的字符形成相同的字符串。
  • 大于零的值表示不匹配的第一个字符在str1中的值大于在str2中的值;小于零的值表示相反。

答案 2 :(得分:0)

char goAgain;
while(1){
    printf("hello\n");
    do{
        printf("\nPress 'y' to go again or 'n' to quit: ");
    }while(scanf(" %c", &goAgain) == 1 && goAgain != 'y' && goAgain != 'n');

    if(goAgain == 'n')//there is no need to check for 'y'
        break;
}