2014-10-11 117 views
-4

我一直在研究這個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

回答

4

讓我們來看看剛剛您的條件:

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

相關問題