C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在使用scanf读取的char变量中添加两个数字大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在向朋友教授C编程语言,我们想出了一些我无法解释的东西.这是我们写的代码

#include <stdio.h>

int main(void)
{
    char num1;
    char num2;

    printf("%s","Enter the first number: ");   
    scanf("%d",&num1);
    printf("%s%d\n","the number entered is:",num1);

    printf("%s","Enter the second number: ");
    scanf("%d",&num2);
    printf("%s%d\n",num2);

    printf("%s%d\n","The first number entered was:",num1); /* This was done for tesTing */
    printf("%s%d\n","The sum is:",num1+num2);

    return 0;
}

奇怪的是,我们尝试做5 6并且我们期望得到11但是得到6,我添加了一行来查看第一个数字发生了什么,并且在读取第二个数字后它变为0.

我知道变量应该是一个int(实际上原始代码就是这样并且有效)但我的理解是char是一个小整数,所以我认为如果我们添加小数字就会“安全”使用.

代码在具有cc的Linux机器上和在具有cl的Windows机器上进行测试和编译.输出是一样的.在Windows机器上,程序在添加后抛出错误.

我想解释为什么这段代码没有像我预期的那样工作.先谢谢.

解决方法

您不能将指向不同数据类型的指针传递给scanf. scanf将写入内存,假设你给它一个指向它预期的指针(例如int为%d),并且如果给它一个指向不同数据类型的指针,它将表现出很好的未定义行为.

在这里,最有可能发生的是scanf被覆盖,例如当你的字符只占用1个字节时,你的堆栈上有4个字节,所以scanf只是乐意在你的堆栈上写一些其他变量.

大佬总结

以上是大佬教程为你收集整理的在使用scanf读取的char变量中添加两个数字全部内容,希望文章能够帮你解决在使用scanf读取的char变量中添加两个数字所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。