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

问题描述:

我一直在研究这个C程序代码一段时间了,我只是很接近,但这只是一个小问题,我无法解决上帝的爱..为什么我的if语句不应该被激活?

我的程序是做什么的?

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

示例输入是这样的:

b

b

输出应

4,2,2

注意,我进入B,然后按enter键,然后再次输入b,然后按Enter和pr ess 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); 
} 

我敢肯定,如果该stateme nt我在那时只激活c不是换行符(输入),或者它是空格...为什么它运行..困惑。有人可以帮我解决这个小问题吗?

编辑:

非常感谢沙尔斯,这是真正对我part..OR和和陈述都不同,一旦你看到真相表,这两个你会看到为什么..我一个贫穷的错误希望这个问题可以帮助谁具有相同的问题,因为我与OR和等人....

+0

使用所有警告和调试信息('gcc -Wall -g')进行编译。然后**使用调试器**('gdb');您将能够一步一步地运行程序并查询变量的值。 – 2014-10-11 05:54:13

+0

但是从我自己的想法输入字母“b”并输入应该换行。然后,如果我再次输入b并按下输入键,则它是另一个换行符。 if语句如何激活>。>? – Ray 2014-10-11 05:56:55

+0

@射线,因为它会**总是**是真实的!看到sharth的回答 – 2014-10-11 05:58:51

让我们来看看刚刚您的条件:

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

让我们来看看三种情况:

  1. 如果c == ' ',那么我们有(false || true)这是true
  2. 如果c == '\n',那么我们有(true || false)这是true
  3. 如果c == 'a',那么我们有(true || true)这是true

你真的想:

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

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

+5

真的需要这样的规范的答案。这至少是我今天看到的第三个问题,尽管它们使用不同的语言(PHP,JS和现在的C)。 – Barmar 2014-10-11 05:57:08

+0

如果我们使用&&语句,这意味着两者都必须正确吗? – Ray 2014-10-11 05:57:35

+0

@ Ray:老实说我没有花很多时间看这个。但是你的代码中的条件是__always true__。这很可能是错误的。 – 2014-10-11 05:58:51