我该如何调试这个基本的OR程序?

时间:2016-12-27 09:13:51

标签: c

我是C编程的初学者。

我写了一个程序由于其“OR”而无法正常运行。功能。这是一个有效的代码片段:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char* englishTest = 'yup';

    if ( (englishTest == 'yup') || (englishTest == 'yep') || (englishTest == 'yas') || (englishTest == 'yah') )
    {
        printf("You may pass \n");
    }
    else
    {
        printf("You shall not pass \n");
    }
    return 0;
}

1 个答案:

答案 0 :(得分:2)

这应该是C,而不是脚本语言。

此代码中存在两个问题:

char englishTest = 'yup';

englishTest声明为char,其中C是整数类型。它只能容纳一个字符,但您尝试在其中存储三个字符。

你的意思是:

char englishTest[] = "yup";

请注意表示array (of chars)的方括号。可以在括号之间选择指定数组大小。此处未指定,编译器使用可以保存用于initialization"yup")的字符串的最小值。此最小值为43中有"yup"个字符,但C stringsthe NULL character ('\0')终止。

代码中的第二个问题是字符串的比较。字符串不是C中的基本类型。它们是字符数组。使用comparison operators直接比较两个字符串不会产生您期望的结果。它比较了存储两个字符串的内存中的地址,而不是它们的字符。

C标准库提供了几个比较两个字符串的函数。最直截了当的string comparison functionstrcmp()。如果两个字符串相同则返回0,如果第一个字符串位于dictionary order中的第二个字符串之前,则返回负值,否则返回负值。

您的比较代码应该是(注意C字符串用双引号""括起来):

if (strcmp(englishTest, "yup") == 0 || strcmp(englishTest, "yep") == 0 ||
    strcmp(englishTest, "yas") == 0 || strcmp(englishTest, "yah") == 0)


附: OR运算符(||)不会破坏任何内容。