0

我必须用 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 中的输入?我不确定为什么程序会这样。

4

1 回答 1

1

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

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

它返回-1(not 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 );        
于 2013-09-28T22:10:40.150 回答