我想了解getchar()
函数在这里如何工作?
我读到getchar()
返回stdin
的下一个字符,如果到达文件末尾,则返回EOF
。
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
int decimal;
while(!isdigit(decimal=getchar()));
cout<<decimal;
}
我输入25。输出50。我不明白为什么? 怎么给50。
答案 0 :(得分:8)
getchar()
从输入流中读取单个字符并返回其值。在您的情况下,该字符为'2'
。大多数实现(包括您的实现)都使用ASCII encoding,其中字符'2'
的值为50
。因此,分配给decimal
的值为50
。由于decimal
是int
,因此std::cout
会将其解释为数字值并进行相应打印。
答案 1 :(得分:2)
decimal
存储找到的第一个数字字符,恰好是'2'
。您将值存储到int
,因此cout
输出序号decimal
。 '2'
的ASCII序数值为50
。您甚至从未到达输入的5
。
一个简单的解决方法是将其显示为字符,而不是顺序值,将输出代码更改为:
cout << (char)decimal;
答案 2 :(得分:1)
C库函数int getchar(void)从标准输入中获取字符(无符号字符)。
此外,十进制是整数类型,而isdigit(decimal)将检查ASCII十进制位置的字符。
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
int decimal;
while(!isdigit(decimal=getchar()));\\when you input 25. It first gets 2.
\\ 2 gets stored as 50 inside decimal
\\ isdigit() is called which returns true for 50 which is ASCII of 2 and while breaks
cout<<decimal; \\ 50 is printed here. Type cast it to print 2.
}
答案 3 :(得分:0)
输入25
时,它将从此输入中读取第一个字符。第一个字符是2
。 2
的ASCII值为50
。这就是为什么您在输出中得到50
的原因。
如果您想在输出中看到2
,请使用
cout << (char) decimal << endl;
此处将50
类型转换为字符。那就是2
。