C语言定义一个整形变量 以字符型输入 再以整形输出 为啥会是这样的结果

tangsheld 2015-10-21 01:03:32
C语言定义一个整形变量 以字符型输入 再以整形输出 为啥会是如图的结果?

程序如下:
#include<stdlib.h>
#include<stdio.h>
int main()
{
int a;
printf("input the data\n");
scanf_s("%c", &a,1);
printf("%d\n",a);
putchar(a);
system ("pause");
return 0;
}



欢迎并谢谢各位能够给我解答!
...全文
2402 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
china7628 2015-10-22
  • 打赏
  • 举报
回复
一个int应该有4个字节,你只修改了其中的一个字节,其它三个字节的内容未知,当你重新输出的时候,输出的四个字节的内容,如果你输出16进制,应该可以看到你输入的46(A的十六进制数据)。所以结果和你预想的不一样,解决的方法是int a=0; 清除原来四个字节的内容,应该就没有问题了,你可以试试。
赵4老师 2015-10-21
  • 打赏
  • 举报
回复
不赋初值,里面也是有值的。 其实电脑开机后物理内存的每个字节都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
tangsheld 2015-10-21
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
#include<stdlib.h>
#include<stdio.h>
int main()
{
int a=0x12345678;
printf("input the data\n");
scanf_s("%c", &a,1);
printf("%08x\n",a);
putchar(a%128);
system ("pause");
return 0;
}
请问为何实现赋初值之后 会正确 ?
赵4老师 2015-10-21
  • 打赏
  • 举报
回复
#include<stdlib.h>
#include<stdio.h>
int main()
{
int a=0x12345678;
printf("input the data\n");
scanf_s("%c", &a,1);
printf("%08x\n",a);
putchar(a%128);
system ("pause");
return 0;
}
fefe82 2015-10-21
  • 打赏
  • 举报
回复
你的程序错了,出现什么结果都有可能。
wang0635 2015-10-21
  • 打赏
  • 举报
回复
请检查scanf函数的返回值

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧