为什么我的if语句在不应该激活时激活?

时间:2014-10-11 05:51:40

标签: c

我一直在研究这个C程序代码已经有一段时间了,我只是太近了,但是这只是一个小问题,我无法为上帝之爱解决..

我的计划做了什么?

它计算单词,字符和行的数量。

示例输入为:

B'/ P>

B'/ P>

输出

4,2,2

请注意,我输入b然后按回车键然后再次输入b,之后按Enter键并按ctrl-d并出现打印语句。

我的问题:

我到了 4,3,2

我知道问题是什么,因为我的if语句正在激活,但当我在脑子里运行这个程序时,我不明白为什么它应该激活...

我的代码(我希望完成99%)

#include <stdio.h>
#include <string.h>

int main()
{
    int traversal = 1;
    unsigned long int charcount = 0;
    unsigned long int wordcount = 0;
    unsigned long  int linecount = 0;
    int counter = 0;
    char c;
    while ((c = getchar()) != EOF)
    {
        charcount = charcount +1;

        if((c <= 'z' && c >= 'a') || (c <= 'Z' && c >= 'A') || c == '\'')
        {

            if (counter >= 1)
            {
                wordcount++;
                counter = 0;
                printf("counter\n");
            }       
        }
        else
        {
            if (c != ' ' || c != '\n')  //** This should only run if we get NO letter
            {
                counter++;
            }
        }
        if (c == '\n')
        {
            linecount = linecount+1;
            wordcount = wordcount+1;
            traversal = traversal +1;
            printf("%lu\n", wordcount);
        }
        if(c == ' ')
        {
            wordcount = wordcount+1;
        }    
    }
    printf( "%lu %lu %lu\n", charcount, wordcount, linecount );
}

我确信我所做的if语句只激活了那时的c不是换行符(输入)或者它是一个空格...为什么它正在运行..困惑。有人可以帮我解决这个小问题吗?

编辑:

非常感谢sharth,这对我来说真的是一个很糟糕的错误.OR和AND语句是不同的,一旦你看到这两个的真值表你就会明白为什么..我希望这个问题有助于其他人与OR和AND有同样的问题....

1 个答案:

答案 0 :(得分:4)

让我们看看你的条件:

if (c != ' ' || c != '\n')  //** This should only run if we get NO letter

让我们看看三种情况:

  1. 如果c == ' ',则我们(false || true) <{1}}
  2. 如果true,则我们c == '\n' <{1}}
  3. 如果(true || false),则我们truec == 'a'
  4. 你真的想要:

    (true || true)

    这意味着当true既不是空格也不是换行符时,我们将执行条件语句。