定义一个整形变量,在输入时输入一个字符,然后输出,为什么不是ASCLL码值?
例如#include<iostream>
using namespace std;
int main(void)
{
int x;
cin>>x;
cout<<x;
return 0;
}
//我用的VS2017返回值好像是地址值. 字符要定义char,不是int orino 发表于 2018-1-30 11:47
字符要定义char,不是int
这个我知道,但是这样的输入的话,难道不是输入那个字符的ASCCL码值吗? 忘川之畔 发表于 2018-1-30 11:49
这个我知道,但是这样的输入的话,难道不是输入那个字符的ASCCL码值吗?
不是,类型不同,你输入会造成异常,因为cin会自动以整数的方式去读取字符,肯定有输入异常,或者你输入的时候格式化输入,不然无法直接正常输入 你可以这样
char x;
cin>>x;
cout<<int(x); 还有这个和编译器有关,在codeblocks上,不管输入哪个字符,都直接为0 orino 发表于 2018-1-30 11:55
还有这个和编译器有关,在codeblocks上,不管输入哪个字符,都直接为0
恩恩,VS中是-858993460 BngThea 发表于 2018-1-30 11:54
你可以这样
结果还是默认值-858993460 orino 发表于 2018-1-30 11:52
不是,类型不同,你输入会造成异常,因为cin会自动以整数的方式去读取字符,肯定有输入异常,或者你输入 ...
格式化输入好像也不行..,也是VS中整型变量的默认值 给你慢慢分析吧, 理论上是这样的,在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;
} orino 发表于 2018-1-30 12:19
给你慢慢分析吧, 理论上是这样的,在VS中变量初始化是用0xCC这样的16进制值来处理的,所以int x被初始化为 ...
有点懂了,谢谢了!
页:
[1]