Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我的if语句在不应该激活的情况下激活?_C - Fatal编程技术网

C 为什么我的if语句在不应该激活的情况下激活?

C 为什么我的if语句在不应该激活的情况下激活?,c,C,我已经为这个C程序代码工作了一段时间了,我已经很接近了,但是有一个小问题我不能解决,因为上帝的爱 我的程序做什么 它统计字数、字符数和行数 示例输入如下: b b 输出应该是 4,2,2 请注意,我输入b,然后按enter键,然后再次输入b,然后按enter键并按ctrl-d,此时会出现打印语句 我的问题是: 我越来越 4,3,2 我知道问题是什么,这是因为我的if语句正在激活,但当我在头脑中运行这个程序时,我根本不明白为什么它应该激活 我的代码99%完成,我希望 #include <st

我已经为这个C程序代码工作了一段时间了,我已经很接近了,但是有一个小问题我不能解决,因为上帝的爱

我的程序做什么

它统计字数、字符数和行数

示例输入如下:

b

b

输出应该是

4,2,2

请注意,我输入b,然后按enter键,然后再次输入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 );
}
我确信我当时只激活c的if语句不是newlineenter,或者如果它是一个空格…为什么它在运行。。困惑的有人能帮我解决这个小问题吗

编辑:


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

让我们看看你的条件:

if (c != ' ' || c != '\n')  //** This should only run if we get NO letter
让我们看三个案例:

如果c='',那么我们有假| |真,这是真的 如果c='\n',那么我们有true | | false,这是true 如果c='a',那么我们有true | | true,这是true。 你实际上想要:

if (c != ' ' && c != '\n')

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

使用所有警告和调试信息gcc-Wall-g编译。然后使用调试器gdb;你可以一步一步地运行你的程序,查询变量的值。但是从我自己的想法来看,输入字母b和输入应该会有一个新行。然后,如果我再次输入b并按enter键,这是另一个换行符。if语句怎么会激活>>?@Ray,因为它永远都是真的!看sharth的回答是的你是对的。。。。我不能相信这个简单愚蠢的错误。。我完全把OR语句和AND语句搞混了,然后我才记住了这两个表。。。。非常感谢sharth.char c;应为int c;。EOF可能不是字符。真的需要这样一个规范的答案。这至少是我今天看到的第三个问题,答案在哪里,尽管它们使用的是不同的语言PHP、JS和现在的C。如果我们使用&&语句,这意味着两者都必须是正确的?@Ray:老实说,我没有花太多时间看这个问题。但是代码中的条件总是正确的。这很可能是错的。哦,我的上帝-|-…我真不敢相信我没有意识到,如果一个是真的,另一个是假的,| |可以激活。。这感觉就像是回到MACM 101的旅程谢谢。。我必须再次回顾我的逻辑。刚刚想起OR及其真值表。嗯,是的,当两者都为1时,它应该是&&语句。1它是否激活。