鱼C论坛

 找回密码
 立即注册
查看: 2743|回复: 10

[已解决]定义一个整形变量,在输入时输入一个字符,然后输出,为什么不是ASCLL码值?

[复制链接]
发表于 2018-1-30 11:45:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
例如
#include<iostream>
using namespace std;
int main(void)
{
        int x;
        cin>>x;
        cout<<x;
        return 0;
}
//我用的VS2017返回值好像是地址值.
最佳答案
2018-1-30 11:52:35
忘川之畔 发表于 2018-1-30 11:49
这个我知道,但是这样的输入的话,难道不是输入那个字符的ASCCL码值吗?

不是,类型不同,你输入会造成异常,因为cin会自动以整数的方式去读取字符,肯定有输入异常,或者你输入的时候格式化输入,不然无法直接正常输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-30 11:47:23 | 显示全部楼层
字符要定义char,不是int
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-30 11:49:21 | 显示全部楼层
orino 发表于 2018-1-30 11:47
字符要定义char,不是int

这个我知道,但是这样的输入的话,难道不是输入那个字符的ASCCL码值吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-30 11:52:35 | 显示全部楼层    本楼为最佳答案   
忘川之畔 发表于 2018-1-30 11:49
这个我知道,但是这样的输入的话,难道不是输入那个字符的ASCCL码值吗?

不是,类型不同,你输入会造成异常,因为cin会自动以整数的方式去读取字符,肯定有输入异常,或者你输入的时候格式化输入,不然无法直接正常输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-30 11:54:23 | 显示全部楼层
你可以这样
char x;
cin>>x;
cout<<int(x);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-30 11:55:19 | 显示全部楼层
还有这个和编译器有关,在codeblocks上,不管输入哪个字符,都直接为0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-30 11:58:22 | 显示全部楼层
orino 发表于 2018-1-30 11:55
还有这个和编译器有关,在codeblocks上,不管输入哪个字符,都直接为0

恩恩,VS中是-858993460
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-30 11:58:52 | 显示全部楼层

结果还是默认值-858993460
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-30 11:59:34 | 显示全部楼层
orino 发表于 2018-1-30 11:52
不是,类型不同,你输入会造成异常,因为cin会自动以整数的方式去读取字符,肯定有输入异常,或者你输入 ...

格式化输入好像也不行..,也是VS中整型变量的默认值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-30 12:19:16 | 显示全部楼层
给你慢慢分析吧, 理论上是这样的,在VS中变量初始化是用0xCC这样的16进制值来处理的,所以int x被初始化为了0xCCCCCCCC,也就是-858993460,然后输入字符的时候,无视那个字符,所以x还是-858993460,codeblocks是默认为0所以值是0.
至于真的想输入格式化,例如scanf('%c', &x), 例如我以 a 也就是0x61举例,实际上是写到x变量的最后一个字节,总共4个字节前三个都是cc,也就是0xcccccc61,你用cout的时候直接全部输出当然还是错的,只取最后一个字节才行。反正cin和cout不适合折腾
给个例子
#include<iostream>
using namespace std;
int main(void)
{
        int x;
        //cin >> x;
        scanf("%c", &x);
        cout << (x&0xFF);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-30 12:24:08 | 显示全部楼层
orino 发表于 2018-1-30 12:19
给你慢慢分析吧, 理论上是这样的,在VS中变量初始化是用0xCC这样的16进制值来处理的,所以int x被初始化为 ...

有点懂了,谢谢了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-29 08:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表