C# 为什么初始值为';i';总是49
这是我用来打印乘法表的C#代码C# 为什么初始值为';i';总是49,c#,C#,这是我用来打印乘法表的C#代码 using System; namespace MultiplicationTable { class Program { static void Main(string[] args) { dynamic value; int i; value = "123456789"; int num = C
using System;
namespace MultiplicationTable
{
class Program
{
static void Main(string[] args)
{
dynamic value;
int i;
value = "123456789";
int num = Convert.ToInt32(Console.ReadLine());
foreach (char name in value)
{
i = Convert.ToInt32(name);
Console.WriteLine("{0} x {1} = {2}",i,num,i*num);
}
Console.ReadKey();
}
}
}
当我运行程序时,i的值从49开始。
对于输入6
因为字符
1
的ASCII值是49
选中此项:
因为字符
1
的ASCII值是49
选中此项:
数字1的Unicode代码点是49 如果乘法值必须在字符串中,则快速修复方法是在转换为int之前将每个数字转换为字符串:
i = Convert.ToInt32(name.ToString());
但是,如果您对一系列数字执行乘法运算,那么最好使用int数组。如果您在计算数字,没有理由将它们存储在字符串中。数字1的Unicode代码点是49 如果乘法值必须在字符串中,则快速修复方法是在转换为int之前将每个数字转换为字符串:
i = Convert.ToInt32(name.ToString());
但是,如果您对一系列数字执行乘法运算,那么最好使用int数组。如果您正在计算数字,则没有理由将它们存储在字符串中。检查下面的输出
Console.WriteLine(Convert.ToInt32('1')); //49
Console.WriteLine(Convert.ToInt32("1")); //1
要修复程序,请先将字符转换为字符串
i = Convert.ToInt32(Convert.ToString(name));
或者只是
i = Convert.ToInt32(name) - 48;
检查以下输出
Console.WriteLine(Convert.ToInt32('1')); //49
Console.WriteLine(Convert.ToInt32("1")); //1
要修复程序,请先将字符转换为字符串
i = Convert.ToInt32(Convert.ToString(name));
或者只是
i = Convert.ToInt32(name) - 48;
s/ASCII/UNICODE/
。这就是我们所说的C#:)@FrédéricHamidi这其实并不是不真实,而是更真实specific@sehe,我同意这是真的,只是想澄清一下。s/ASCII/UNICODE/
。这就是我们所说的C#:)@FrédéricHamidi这其实并不是不真实,而是更真实specific@sehe,我同意这是真的,只是想澄清一下。为什么不在1到9之间使用一个正常的循环呢?因为他想。绝对没有理由不使用foreach循环。@Tarec:他在从一个数字数到另一个数字。这正是for
循环的用途。如果他一定要使用foreach
,他至少应该循环可枚举范围(1,9)
,而不是解码字符串。我是c语言的初学者。我只懂Python。我很喜欢这种风格的迭代,它也是python中的对于xrange(1,10)中的i:
@user2332665c#可以做同样的事情:foreach(Enumerable.Range(1,9)中的var i))
,但是您需要使用System.Linq代码>位于文件顶部。这样你就可以得到一个数字,而不是一个字符,而且不必关心编码。为什么不在1到9之间使用一个普通的循环呢?因为他想这样做。绝对没有理由不使用foreach循环。@Tarec:他在从一个数字数到另一个数字。这正是for
循环的用途。如果他一定要使用foreach
,他至少应该循环可枚举范围(1,9)
,而不是解码字符串。我是c语言的初学者。我只懂Python。我很喜欢这种风格的迭代,它也是python中的对于xrange(1,10)中的i:
@user2332665c#可以做同样的事情:foreach(Enumerable.Range(1,9)中的var i))
,但是您需要使用System.Linq代码>位于文件顶部。这样你就可以得到一个数字,而不是一个字符,并且不必关心编码。C语言中的所有类型都有一个内置的.ToString()
方法,不需要显式编写Convert.ToString(name)
,name.ToString()
是的,它们是一样的。给定OP使用Convert.ToIn32,Convert.ToString给出了有关字符串和字符之间类型差异的更多提示。C中的所有类型都有一个内置的.ToString()
方法,不需要显式编写Convert.ToString(name)
,name.ToString()
是的,它们是一样的。给定OP使用Convert.ToIn32,Convert.ToString将提供有关字符串和字符之间类型差异的更多提示。