如果不应该跳过其他声明

时间:2014-06-28 20:25:18

标签: c if-statement

所以我有一个奇怪的问题,我无法解决这个问题。我有一个if ... else if块,当if和else if语句都为false时,它们不执行else语句。

int load(void)
{
    int index = 0;

    // temp string buffer for characters.
    _TCHAR* str = calloc(sizeof(TCHAR), 127);


    // open config file.
    FILE* fp = fopen("config.txt", "r");
    // if file is NULL, return.
    if(fp == NULL)
    {
        fprintf(stderr, "Could not open config.txt\n");
        return 1;
    }

    do
    {
        int c;
        // get characters from the file and put them in the message buffer.
        do
        {
            c = fgetc(fp);
            // if new line found end word.
            if(c == '\n')
            {
                str[index] = '\0';
                break;
            }
            // if EOF return.
            else if(c == EOF)
                return 0;

            // else keep storing characters.
            else
            {
                str[index] = c;
                index++;
            }
        }while(1);

        // time specifier is found.
        if((str[0] == 't' || 'd' || 'c') && (isdigit(str[1]) != 0))
        {
            // if spec. is 't' store the time of day.
            if(str[0] == 't')
            {
                if(StoreTime(str) != 0)
                {
                    fprintf(stderr, "Time of day could not be stored.\n");
                    return 1;
                }
            }
            // if spec. is 'd' store the date.
            else if(str[0] == 'd')
            {
                if(StoreDate(str) != 0)
                {
                    fprintf(stderr, "Date could not be stored.\n");
                    return 1;
                }
            }
            // else spec. is 'c'.
            else
            {
                if(StoreCount(&str[1]) != 0)
                {
                    fprintf(stderr, "Countdown could not be stored.\n");
                    return 1;
                }
            }
        }
        // comment text or new line found.
        else if(str[0] == '*' || '\n')
        {
            // do nothing
        }
        // message found.
        else
        {
            if(StoreText(str) != 0)
            {
                fprintf(stderr, "Text could not be stored.\n");
                return 1;
            }
        }

            index = 0;
    }while(1);

fclose(fp);
return 0;

}

我在其中有一些if语句,主要是函数返回检查,但如果我现在不是完全晕眩,那么这不应该影响最外面的语句。但是这段代码仍然会跳过else语句。

当我使用GDB运行它时,它获取我想要的值,它不会触发第一个if语句或else if语句。然后它只是跳到“不管做什么”的部分。所以我不知道发生了什么。

EDIT *添加了真实代码

1 个答案:

答案 0 :(得分:2)

在某些地方,您尝试测试多个值,如下所示:

if (str[0] == 't' || 'd' || 'c')

该代码是合法的,但它没有做你想要的。您需要对每个值进行单独测试,如下所示:

if (str[0] == 't' || str[0] == 'd' || str[0] == 'c')