C# 为什么初始值为';i';总是49

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

这是我用来打印乘法表的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将提供有关字符串和字符之间类型差异的更多提示。