c++ - C 中带有格式说明符的不同输出

标签 c++ c printf scanf

int x;
scanf("%d",&x);
printf("%d",x);

Input: . (just a period)
Output: 4096

这里为什么输出4096。这就是我的想法:所以一个句点的 ASCII 值是 46。输入时,它读入 x 作为 46 的位模式?而它打印的时候,是不是在x的内存位置打印出四个字节,所以只有第一个字节填充了46对应的位模式,其余的都是随机的东西,组成了4096?但这是不正确的,因为看看当我这样做时会发生什么——

int x;
scanf("%d",&x);
printf("%c",x);

Input: . (period)
Output: (nothing)

Input: 46
Output: . (period)

更令人困惑的是当我这样做时发生了什么:

int x;
scanf("%c",&x);
printf("%d",x);

Input: . (period)
Output: 4142

Input: 46
Output: 4148

Input: 47
Output: 4148

最佳答案

需要查看scanf的返回值(即读取成功的次数):

int x;

if (scanf("%d",&x) == 1) {
    printf("%d", x);
} else {
    printf("Invalid input.");
}

如果解析失败,则没有定义x的值。

一旦 scanf 失败,进一步的调用也将失败,因为无效输入未从流中移除。因此,使用 scanf 并不是一个好主意。

关于c++ - C 中带有格式说明符的不同输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11267423/

相关文章:

java中如何使用printf

c - GNU C 中 float 的 printf 实现,半主机

c - 将递归定义的结构转换为 C 接口(interface)的 Julia

c++ -/MT 和/clr 不兼容

c++ - QSerialPort 5.2 中的 SerialPortError?

c++ - 这是针对大学 100 级软件类(class)期中考试的合理笔试吗?

c - 这段代码有什么问题,我不能将指针和无符号值加在一起吗?

c - 从c中的字符串中删除标点符号和空格?

c - 用 %s 打印字符串打印出错误的数据

c++ - 有什么方法可以在运行时编译 C++ 代码吗?