所以我有一个奇怪的问题,我无法解决这个问题。我有一个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 *添加了真实代码
答案 0 :(得分:2)
在某些地方,您尝试测试多个值,如下所示:
if (str[0] == 't' || 'd' || 'c')
该代码是合法的,但它没有做你想要的。您需要对每个值进行单独测试,如下所示:
if (str[0] == 't' || str[0] == 'd' || str[0] == 'c')