2014-11-25 20 views
1

我正在閱讀一本名爲C Programming Language 2nd Edition的書。它教導一個稱爲字符計數的程序。但根據輸出它不會。它只是採取字符,什麼也不做。 這是第一個版本:C中的行計數器

#include <stdio.h> 
#include <stdlib.h> 

main() { 
    int c, nl; 

    nl = 0; 
    while ((c = getchar()) != EOF) 
     if (c == '/n') 
      ++nl; 
    printf("%d\n", nl); 
} 

所以,當我型我一句,然後按Ctrl+Z滿足EOF它給了我零:

I am a good person 
CTRL+Z 
0 

Press any key to return 

它應該計算行和作爲一個初學者我可以不明白。

+8

使用' '\ n'',而不是''/ n''。 – Powerswitch 2014-11-25 15:02:02

+2

即使有'\ n'這個程序也不算數字,正在計算**行** – NetVipeC 2014-11-25 15:03:42

+0

只是一個附註,K&R是一本很好的書,但它已經過時了,並且不符合現代C標準。 'main()'應該是'int main()' – toddlermenot 2014-11-25 15:04:41

回答

2

雖然直接的問題是用'\n'替換'/n'的簡單情況。 轉義n爲這是反斜線做什麼),你的代碼編譯和運行的事實換行符是由於C99標準:

6.4.4.4p10:「一個整數字符常量的值包含多個字符(例如'ab')或包含字符或不映射到單字節執行字符的轉義序列,是實現定義的。

'/n'字符數組由斜槓和信n的。

一旦你修復了這個問題,你就需要修改字符數,而不僅僅是換行符。

+0

感謝它工作正常,我把/ n而不是\ n。所以我改變它,它的工作 – 2014-11-26 02:42:17

2

顯然,執行應該只計算換行符的數量,而不是在if(c=='\n')條件中實現的總字符數。該程序在您的輸入中返回0,因爲它不包含換行符。

0

可能是程序要知道,如果下一個字符不是線('\n')的末端,所以你將需要:

#include <stdio.h> 
#include <stdlib.h> 

main() { 
    int c, nl; 

    nl = 0; 
    while ((c = getchar()) != EOF) 
     if (c != '\n') 
      ++nl; 
    printf("%d\n", nl); 
} 

這將算字符數,但也有其他轉義字符,如'\t',所以我不太確定程序應該做什麼,但我認爲在你的書中,你會發現一些更多的說明,澄清該部分

計數數的行簡單地將'/ n'更改爲'\ n',因爲您現在可能知道

+0

它應該計算行數。 – mch 2014-11-25 15:06:49

+0

@mch我也很困惑,因爲他說「那裏教了一個名爲字符計數的程序」 – 2014-11-25 15:07:49

0

它看起來好像你缺少一套{}括號:

#include <stdio.h> 
#include <stdlib.h> 

main() 
{ 
    int c, nl; 

    nl = 0; 
    while((c = getchar()) != EOF) 
    { // <- This starts the block to be repeated 
     if (c == '\n') 
     { // <- This is just to keep the code 'safe' ... 
      ++nl; 
     } // <- ... as is this 
    } // <- This ends the block to be repeated 
    printf("The number of New Line characters entered was %d\n", nl); 
} 
+1

這不是一個問題在這裏,兩組括號不是必要的功能。 – mch 2014-11-25 15:14:13

+0

將C轉換爲LISP ...? (迷失在愚蠢的括號裏) – CiaPan 2014-11-25 15:18:10