c - 单个 printf() 函数是否可以在循环中从 getchar() 获取输入时执行多次?
问题描述
我期待 getchar() != EOF 总是返回一个布尔值,该值将分配给'c',并且对于循环的每次迭代输出将是 0 或 1 但是,我得到了单个输入的多个输出.
#include<stdio.h>
main()
{
int c;
while(1)
{
printf("%d\n",c = (getchar() != EOF));
}
}
对于输入 1,输出为 11,对于输入 -2,输出为 111。
什么可能导致它多次打印?
解决方案
额外的输出是因为对于每个输入,您都有一个用于行终止符的附加字符。
试试这个,看看 getchar() 为你的每个输入究竟返回了什么:
#include<stdio.h>
int main()
{
int c;
while(1)
{
c = getchar();
printf( "x%x\n", c );
/* printf("%d\n",c = (getchar() != EOF)); */
}
}
当你输入 1 时,你得到两个字符,
x31
xa
当你输入 -2 时,你有三个字符,
x2d
x32
xa
由于以上都不是 EOF,因此您会从例程中获得多个“1”。
推荐阅读
- algorithm - 找出有效的序列
- python - 运行SQL,进不去
- ios - 如何按数字顺序对一对多关系中的项目进行排序?
- javascript - 由于另一个函数,我无法执行函数
- python - 提取 Instagram 评论时,NoneType 对象不可下标
- javascript - 为什么我的按钮功能只提供一次输出?
- jmeter - jmeter中的Beanshell预处理器出现错误
- node.js - 如何将我的本地 node.js 应用程序连接到我的 Heroku Postgres 数据库?
- firebase - 如何在颤动中从 Firestore 中检索每个文档的文档 ID
- python - pyparsing - 用千位分隔符解析数字