我必须在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语言控制台应用程序中继续接受输入?我不确定为什么程序表现得像这样。
答案 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 );