2012-11-10 90 views
1
while(getline (&line, &line_size, f) != -1){} 

我正在使用此函數來讀取行行。但是我想知道什麼時候我正在讀空白行。有人可以幫忙嗎?c getline跳空行

+1

根據函數getline)是否'('或不返回尾部換行符,你可以檢查這行是0或1個字符長。 – 2012-11-10 21:59:06

+2

定義「空白」?它是指任何只包含空白或完全空白的東西嗎? – Rookie

回答

3

從而H2CO3已經提到的,你可以使用線路長度此:

while (getline (&line, &line_size, f) != -1) { 

    if (strlen(line) == 1) { 
     printf("H2CO3 spotted a blank line\n"); 
    } 

    /* or alternatively */ 
    if ('\n' == line[0]) { 
     printf("Ed Heal also spotted the blank line\n"); 
    } 

    .. 
} 
+0

它的工作,謝謝:) – nhenrique

+0

@nhenrique很高興聽到它。你應該感謝H2CO3。你也可以將其中一個答案標記爲已接受,這樣它就不會成爲一個未解決的問題。 – none

+1

爲什麼不是'\ n'== line [0])並保存在函數調用中。 –

0

您需要定義空白行。

此外,因爲「getline函數從流中讀取整行,直到幷包括下一個換行符。」

我不認爲

strlen(line) == 1 

是便攜式的,因爲贏/ DOS和Unix使用EOL不同的約定。另外,在EOL字符完成之前EOF可能發生。所以真的,你需要定義一個功能,可能像

int is_blank_line(char *line, int line_size) 
{ 
    return line_size == 0 || is_eol(line) 
} 

其中is_eol是爲你所在的平臺定義的。在這裏,您可以在空格放可在一個空行,等等

所以,你會得到這樣的:

int is_eol(char *line) 
{ 
... 
    return result; 
} 
... 
int is_blank_line(char *line, int line_size) 
{ 
    return line_size == 0 || is_eol(line) 
} 
... 
while (getline (&line, &line_size, f) != -1) { 
    if (is_blank_line(line, line_size)) { 
     printf("blank line spotted\n"); 
    } 
... 
} 
+2

'if(line [strspn(line ,「\ t \ v \ r \ n」)] =='\ 0')// line is blank' works fine。 (\ v爲舊時代的緣故,雖然我幾十年沒見過。) –