在getline之前调用printf会导致问题。有时

时间:2013-09-28 22:00:38

标签: c printf getline

我必须在C中制作一个shell,应该是一个简单的任务给我带来麻烦。以下代码打印出文本并不断输入,但只打印一次。

 printf("(pid=%ld)%s$", (long int)pid,cwd);
 fflush(stdout);
 while((bytes_read=getline(&line,&len,fp))){} 

此代码立即无限循环除了打印之外什么也不做。我无法得到任何意见。

 do{
     printf("(pid=%ld)%s$", (long int)pid,cwd);
     fflush(stdout);
 }while((bytes_read=getline(&line,&len,fp)));

如何在C语言控制台应用程序中继续接受输入?我不确定为什么程序表现得像这样。

1 个答案:

答案 0 :(得分:1)

在这两种情况下,如果失败:

bytes_read=getline(&line,&len,fp)

它返回-1(不是0),其真值为“true”。所以while将继续下去。问题陈述中未定义fp,因此不清楚它所引用的文件。

尝试:

do {
    printf("(pid=%ld)%s$", (long int)pid, cwd);
    fflush(stdout);
} while((bytes_read = getline(&line, &len, stdin)) != -1);

这个循环显然不会对行读取做任何事情,但你可以填写。:)

我可能会稍微调整一下逻辑,以便在循环中操作:

do {
    printf("(pid=%ld)%s$", (long int)pid, cwd);
    fflush(stdout);

    if ((bytes_read = getline(&line, &len, stdin)) > 0 ) {
        // Process the line
    }
} while ( bytes_read >= 0 );