c - 管道和 getchar()
问题描述
关于 getchar() 从空文件传输时如何与标准输入交互的困惑。
这是简单的 c 代码 test_program.c
#include <stdio.h>
int main( ) {
int c;
printf( "Enter a value :");
c = getchar( );
printf( "\nYou entered: ");
putchar( c );
printf( "\n");
printf( "Enter a value :");
c = getchar( );
printf( "\nYou entered: ");
putchar( c );
printf( "\n");
return 0;
}
好奇当我将一个空文件(a)传输到标准输入时会发生什么......
$ cat a | ./test_program
Enter a value :
You entered: �
Enter a value :
You entered: �
我想我会期望 test_program 阻塞,直到我实际提供数据。为什么它从文件 a 为空的 stdin 读取,为什么还要打印垃圾?
解决方案
这个片段很好地解释了它。
#include <stdio.h>
int main(void)
{
int c = getchar( );
if(c == EOF)
printf("EOF\n");
}
我想我会期望 test_program 阻塞,直到我实际提供数据。为什么它从文件 a 为空的 stdin 读取,为什么还要打印垃圾?
当您(尝试)从空流中读取数据时,您将获得 EOF。这就是你如何知道流是空的。
推荐阅读
- python - 如何在 SCADE 中执行 python 脚本?
- php - Sylius - 为资源定义不同的表单类型
- c++ - C++ lambda 捕获问题
- visual-studio-code - 在 Visual Studio Code 中禁用 Dockerfile POP-UP 帮助
- jquery - 在 Jquery 上使用 keyup 的功能不止一个?
- swift - CollectionView numberOfItemsInSection - Swift
- graph - MediaWiki Graph 包含来自外部来源的数据
- python - CNN模型验证损失随机波动
- r - 如何使用 R 区别对待子集的第一行和最后一行?
- python - 模拟退火,归一化温度