收录日期:2020/11/30 13:14:09 时间:2016/07/04 13:20:02 标签:C#
int i=1;
i=Convert.ToInt32(Console.Read());
如果输入的是数字则可以正常转换,但是输入字母怎么就不能转呢?
i=Convert.ToInt32("a");
但这么写又是可以转换成功的。谁能告诉我这是为什么啊?
A的字符码是65
单个字符都有其整数的。
单击ToInt32转向定义你就可以看到很多重载。
i=Convert.ToInt32(Console.ReadLine()); 
但是上面的语句,如果我通过键盘输入字母就无法转换,这是为什么啊?
在线等啊,谁能帮忙解答
这个问题值得关注...
我新建了一个控制台应用程序,可以转换.
就是把你的代码拷上直接试的.
估计是读入的字符还包含了一个回车符所至,没验证过,纯属猜测。
不可能,只能编译成功,不能执行的。
比如你输入一个a
用read()是可以转换的,但用readline()是不能转换的。
把字符先ToChar,然后转化为short就能取到ASII码值,即整数值

string strTemp = "test"
ch = Convert.ToChar(strTemp.Substring(i - 1, 1));
short asc = (short)ch;

不知道你要的是不是这个.
把字符先ToChar,然后转化为short就能取到ASII码值,即整数值 

string strTemp = "test" 
ch = Convert.ToChar(strTemp.Substring(strTemp.Length - 1, 1)); 
short asc = (short)ch; 

修改一下.
我的问题是这句i=Convert.ToInt32(Console.ReadLine()); 
我输入字母后是无法转换成整型的,这是什么原因?
首先纠正你的一个错误i=Convert.ToInt32("a"); 肯定是不行的 应该为i=Convert.ToInt32("a"); 

i=Convert.ToInt32(Console.ReadLine());   相当于 ToInt32(string);
i=Convert.ToInt32('a');   相当于ToInt32(Char);

应该为i=Convert.ToInt32('a'); 
谢谢楼上的纠正。但我还是有疑问:
i=Convert.ToInt32(Console.ReadLine());  相当于 ToInt32(string); 
我知道你的意思,但是为什么我输入数字是可以转换的呢
输入数字也是相当于 ToInt32(string); 
楼上的能解释一下吗?
引用 10 楼 syhhl007 的回复:
我的问题是这句i=Convert.ToInt32(Console.ReadLine()); 
我输入字母后是无法转换成整型的,这是什么原因?

你所要的整型不是字母的ASII码吗?
我说的意思是字母不能用Convert.ToInt32直接转换成整形,要从字符型强制转换成short才能得到整数值.
刚才测试了一上。用ReadLine方法返回的是一个string,哪怕你只输入一个字母,如果输入的不是数字就会变成一个非数字的字符串,非数字字符串ToInt32是无法转换的。
这个问题的关键是要弄清楚char类型和string类型的区别。
to chinawes :
你的意思是数字可以用Convert.ToInt32(Console.ReadLine()); 从string类型直接转换成正型,而字母只能从字符型转换成整型吗?
引用 16 楼 GhostAdai 的回复:
这个问题的关键是要弄清楚char类型和string类型的区别。

同意.
如果输入的不是数字就会变成一个非数字的字符串,非数字字符串ToInt32是无法转换的。

==》现在看的确是这种情况,但是我在网上也找不到这种说明。谁能给个完整的说明啊?
你的输入是不是以回车结束的,你这么写就把回车符也算到里面去了,当然会出错了
要过滤掉回车 13
11,12楼就是正解。楼主仔细看Convert.ToInt32()里面的参数
i=Convert.ToInt32("a"); 
这是错的,但是下面为什么就是对的呢?他们的参数不都是string吗?
b=Convert.ToInt32("123");
简单点说就是char型和int型是基本数据类型,在还没有面向对象编程语言时就有的,相互之间是可以转换的,而string类型是后来才出现的,在面向对象语言中是一个类,而不是基本数据类型。在C++中string和char*差不多。"a"和'a'在内存的分配上是完全不同的,"a"中除了字符a之外还包含了一个标识字符串结束符'\0',建议你把变量的基本类型的概念好好研读一遍,最好是看C++相关的书,这个问题就很容易弄明白了。
Console.Read()转换成char看行不行
学习了···
b=Convert.ToInt32("123");
难道"123"就不是string了吗?就没有结束符'\0'了吗?为什么"123"可以转换而"a"就不能呢?
Convert.ToInt32 可以转换的类型较多
很清楚 C# 提供类型检查,你不能把一个 string 强制转换成 int,隐式转换就更加不可能,例如如下的代码就行不通了: 

string text = "1412"; 
int id = (int)text; 

因为 string 和 int 是两个完全不同并且互不兼容的类型。说到这里,你可能会问什么才算是兼容的呢?其实,能够使用 (int) 进行强类型转换的只能是数值类型了,例如 long、short、double等,不过进行这种转换时你需要考虑精度问题。 
引用 22 楼 syhhl007 的回复:
i=Convert.ToInt32("a"); 
这是错的,但是下面为什么就是对的呢?他们的参数不都是string吗? 
b=Convert.ToInt32("123");


那你希望Convert.ToInt32("abc")能出什么样的结果?是979899还是97+98+99的值?这就是岐义!所以当参数为string时只能转换纯数字的字符串,包含字母的话就会出异常。
引用 26 楼 syhhl007 的回复:
b=Convert.ToInt32("123"); 
难道"123"就不是string了吗?就没有结束符'\0'了吗?为什么"123"可以转换而"a"就不能呢?


如果你有本事修改Convert.ToInt32方法的话可以在参数为string类型的重载中加个判断:长度为1的时候视为一个char型进行转换,因为M$在这个方法中的判断方式是字符串中只要包含非数字即抛出异常,并没有判断字符串长度为1的情况。
接收楼上的说法,但其实定义上我并没有找到这种规定,只能说知道怎么回事了,但还是不知道具体原因是什么。
学习编程使用一个方法时要去想如果自己来实现这个方法应该怎么去做,不要只看方法的结果。写方法要综合考虑多方面因素,就拿Convert.ToInt32这个方法来说,如果明知一个string长度为1,那你为什么不在一开始就把它赋值给一个char型变量呢?因为char型是基本数据类型,内存分配在栈上,使用起来效率肯定比string高。既然已经有了对char型的单字符转换,那在转换string类型的重载时何必又要多加一个判断去增加代码量呢?把重复劳动量尽可能的降低,这是M$能大把捞钱的一个很重要的原因。
帮你顶
因为一个字符在内存里也是存为2进制(Int)数,所以Char和Int可以相互转换. 而 Convert.ToInt32('1') != 1 的.
而ToInt32(string)是一个方法,其通过算法将由字符串表达的数字转换为数字 ,所以 Convert.ToInt32("1")==1 .
这个当然是不能转的啊,因为你一个字母字符通过输入不可以转换成整数的之前没有定义啊,而用"123" 的话是一个数字字符本身就是一个数字只是你输入时先转化成字符,所以可以转的,而你输入Convert.ToInt32('a')是把它转换为ASCII而已
int i=Convert.ToInt32(Console.ReadLine());
其中Console.ReadLine()中输入的只能是数字形式的字符串,也就是说
只能将数字形式的字符串转换为整形格式。若不是数字形式就会抛出异常。利用try,catch可以检测到
该异常。
而int i=Convert.ToInt32('a');这种能转换是因为小写字母a对应ASCII码是整数,char型有其对应
的整数形式,所以能转换。
i=Convert.ToInt32(Console.Read());
这个方法是用来将一个字符串表示的数字,转换成整形,输入一个字母a,因为他不是数字,所以此方法不能将其转换
于此相比i=Convert.ToInt32(char);
此方法是将字符类型转化为整形,因为你一个字符在内存中的表示也是由unicode来表示的,这个转换只是精度的转换
楼主还有什么不懂的吗???
对于像楼主说的“1”与“a”都是一个类型的参数,是不错,但是函数是一个方法,不是只由参数来控制的,像这个转换方法
他的意思就是说:我要将一个用字符串表达的数字转换为INT32,所以在遇到字符的时候肯定要出错的
char存储的是数值,所以char被当作一个数值类型,而string是字符,不可以直接强制转换成int型。而你所说的123为存为string可以转换,是因为虽然是字符型,但是它还是个数字,系统在读的时候仍然可以按数字读出它的值,所以可以转换。
不知LZ听的懂不。
初学者,不懂!
public static int Read ()
public static string ReadLine ()
Read方法返回的是int,ReadLine返回的是string;
Console.Read() 返回的是字符的asiic码值,是一个整数,而不是字符串
Console.ReadLine()返回的是字符串
挺有意思的一个问题
引用 27 楼 ahbbdbc 的回复:
Convert.ToInt32 可以转换的类型较多 
很清楚 C# 提供类型检查,你不能把一个 string 强制转换成 int,隐式转换就更加不可能,例如如下的代码就行不通了: 

string text = "1412"; 
int id = (int)text; 

因为 string 和 int 是两个完全不同并且互不兼容的类型。说到这里,你可能会问什么才算是兼容的呢?其实,能够使用 (int) 进行强类型转换的只能是数值类型了,例如 long、short、double等,不过进行这种转换时你需要…


  楼主这个问题你应该多想想 不要钻牛角尖
学习了
引用楼主 syhhl007 的帖子:
int i=1; 
i=Convert.ToInt32(Console.Read()); 
如果输入的是数字则可以正常转换,但是输入字母怎么就不能转呢? 
i=Convert.ToInt32("a"); 
但这么写又是可以转换成功的。谁能告诉我这是为什么啊?


没看到你后面说的ReadLine
i=Convert.ToInt32(Console.Read()); //就这句话而言,字母数字都可以
引用 10 楼 syhhl007 的回复:
我的问题是这句i=Convert.ToInt32(Console.ReadLine());
我输入字母后是无法转换成整型的,这是什么原因?

这是肯定不行的,因为让我们输入a的时候,其实后面还附带了换行符,没有对应的整数,所以不能转换啊
引用 39 楼 LanDun_188 的回复:
public static int Read ()
public static string ReadLine ()
Read方法返回的是int,ReadLine返回的是string;
应该单引号吧???
这个问题这么旺,有点意外!!
引用 46 楼 leening102 的回复:
引用 39 楼 LanDun_188 的回复:
public static int Read ()
public static string ReadLine ()
Read方法返回的是int,ReadLine返回的是string;

学习。。。
该回复于2008-08-03 12:06:16被版主删除

关于CToolTipCtrl ,我鼠标移动到ListCtrl的某一格,就显示Tips,怎么实现? 急,新手,跪求指点! sqlserver中如何自动对字符字段进行处理? 紧急求助!请大家进来帮帮忙啊! 帮忙! VB函数声明转换成C#声明 关于SSO中用户的同步问题。 有长春\\吉林懂notes的朋友吗?有工余挣钱的机会!!! SQL问题,请帮忙 免费视频会议源码 5月3号结婚,今天下午开始休假了,散分 昨晚去女朋友家,同女友睡在了一张床上了~ aspx.net网站如何发布? 编写了两个检测函数,但不是出错就是不起作用 请大家帮我看看这是什么原因,关于属性页对话框的。不胜感激! 如何改变文件大小? 感谢一下 saucer(思归)老哥。他已经从总专家榜掉下来了。 快乐散分 免费视频会议源码 想要作一个远程桌面监控软件,怎么获取远程主机上的频目信息啊? 控件问题 ERROR:ORA-12154:TNS:无法处理服务名。 且谈五一七天假 查询语句的问题 这一句\"请双击鼠标左键锁定图片位置\"这样翻译有没有问题? 调用XFire发布的web服务报如下异常,大家帮看看啥原因? 免费视频会议源码 <猛子E章进来赐教>如果登陆的页面不+上验证码,最严重会出现怎么样的后果,这个后果是什么造成的. 马甲专列 求excel导入到SQlserver的代码 含有汉字和数字,但是要根据数字进行选择的条件怎么写?