如何getchar()函数输出

时间:2019-07-18 18:42:49

标签: c++ getchar

我想了解getchar()函数在这里如何工作?

我读到getchar()返回stdin的下一个字符,如果到达文件末尾,则返回EOF

#include <iostream>
#include <cstdio>
using namespace std;

int main() {
    int decimal;
    while(!isdigit(decimal=getchar()));
    cout<<decimal;
}

我输入25。输出50。我不明白为什么? 怎么给50。

4 个答案:

答案 0 :(得分:8)

getchar()从输入流中读取单个字符并返回其值。在您的情况下,该字符为'2'。大多数实现(包括您的实现)都使用ASCII encoding,其中字符'2'的值为50。因此,分配给decimal的值为50。由于decimalint,因此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时,它将从此输入中读取第一个字符。第一个字符是22的ASCII值为50。这就是为什么您在输出中得到50的原因。

如果您想在输出中看到2,请使用

cout << (char) decimal << endl;

此处将50类型转换为字符。那就是2