为什么getline()只返回1而不是返回不读的字符

时间:2018-12-02 21:03:23

标签: c getline

这是我。我不明白为什么这个getline()返回1而不是不返回读取的字符。

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

int main(int argc, char *argv[])
{

FILE *fp;
if (argc!=3)
{
    printf("improper number of input\n");
    exit(1);
}

size_t len=0;
ssize_t read;
char *line=NULL;
fp=fopen(argv[1],"r");
if (fp==NULL)
{
    printf("file is empty\n");
    exit(EXIT_FAILURE);
}



while (read=getline(&line, &len, fp)!=-1)
{
    printf("retrieved line length %zu \n",read );
    //printf("%s\n",line );
}
fclose(fp);
free(line);
}

这是我的输出。

retrieved line length 1 

我使用了http://man7.org/linux/man-pages/man3/getline.3.html

所述的getline()

我的文件包含以下文本:

  

孟加拉国的官方语言和事实上的国家语言是现代标准孟加拉语(孟加拉语文学)。[6] [7] [8] [9]它是该国的通用语言,孟加拉国98%的人说流利的孟加拉语(包括方言)是他们的母语。[10] [11]在印度,孟加拉语是西孟加拉邦,特里普拉邦和阿萨姆邦巴拉克谷地的官方语言。阿萨姆邦雅鲁藏布江谷的不同地区也使用这种语言。它也是孟加拉湾安达曼群岛和尼科巴群岛上使用最广泛的语言,[12]并且在贾坎德邦,比哈尔邦,米佐拉姆邦,梅加拉亚邦和奥里萨邦等其他州的重要少数民族也使用。孟加拉语在全球共有大约250–3亿人,[13]按人口计算,孟加拉语通常被认为是世界第七大母语。

1 个答案:

答案 0 :(得分:3)

由于!=的绑定强度大于=,因此您需要使用括号:

while((read=getline(&line, &len, fp)) != -1)

您基本上将比较结果分配给read,如果计算结果为true,则为1,否则为0