在使用scanf读取的char变量中添加两个数字
发布时间:2020-12-16 09:54:13 所属栏目:百科 来源:网络整理
导读:我正在向朋友教授C编程语言,我们想出了一些我无法解释的东西.这是我们写的代码: #include stdio.hint main(void){ char num1; char num2; printf("%s","Enter the first number: "); scanf("%d",num1); printf("%s%dn","The number entered is:",num1); pr
我正在向朋友教授C编程语言,我们想出了一些我无法解释的东西.这是我们写的代码:
#include <stdio.h> int main(void) { char num1; char num2; printf("%s","Enter the first number: "); scanf("%d",&num1); printf("%s%dn","The number entered is:",num1); printf("%s","Enter the second number: "); scanf("%d",&num2); printf("%s%dn",num2); printf("%s%dn","The first number entered was:",num1); /* This was done for testing */ printf("%s%dn","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只是乐意在你的堆栈上写一些其他变量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |