【问题标题】:Converting multiple string inputs from user to Int, DateTime, and Decimal data types将用户的多个字符串输入转换为 Int、DateTime 和 Decimal 数据类型
【发布时间】:2020-11-01 16:23:52
【问题描述】:

好的,我是一名在线学生,正在使用 C# 进行编程课程。我以前从来没有编程过,所以你必须为我把它一直装傻。

这周的作业是:

  1. 创建一个名为 ConsoleStudentTracking 的控制台应用程序项目和解决方案。
  2. 使用数据类型创建这些变量:
    1. FirstName: string 数据类型
    2. LastName: string 数据类型
    3. StudentId: int 数据类型
    4. BirthDate: DateTime 数据类型
    5. Grade: decimal 数据类型
  3. 使用Console.ReadLine() 方法获取用户输入以填写第2 步中的每个变量。
  4. 使用Convert 类将用户输入(string 格式)转换为步骤 2 中指定的所需数据类型/格式。
  5. 以这种格式将这些变量中的所有值写入屏幕:

    1. 我的名字是姓氏名字
    2. 我是一名新生,这是我的第一个项目

    3. 我的学生证是:无论用户输入什么
    4. 我的生日是:用户输入的任何日期
    5. 我的成绩是:用户输入的任何成绩

我观看了我的导师为我们发送的视频,我基本上遵循了相同的步骤,只是替换了变量。我将尝试下面的代码,这是我收到以下错误的 3 条错误消息:

"Line 23: cannot implicitly convert type 'string' to 'int'"
"Line 26: cannot implicitly convert type 'string' to 'System.DateTime'"
"Line 29: cannot implicitly convert type 'string' to 'decimal'" 

我不明白什么没有转换,或者为什么。我看的视频做得很好。这是我对代码的尝试:

using System;

namespace ConsoleStudentTracking
{
    class Program
    {
        static void Main(string[] args)
        {
            string Firstname;
            string Lastname;
            int Studentid;
            DateTime Birthdate;
            decimal Grade;
            Console.WriteLine("a.-----------------------------");
            Console.WriteLine("Enter your first name");
            Firstname= Console.ReadLine();
            Console.WriteLine("Enter your last name");
            Lastname = Console.ReadLine();
            Console.WriteLine("b.My name is Lastname + ", " + Firstname");
            Console.WriteLine("c. I am a new student, and this is my first program");
            Console.WriteLine("d******************************");
            Console.WriteLine("Enter your Studentid");
            Studentid = Console.ReadLine();         // line 23
            Studentid = Convert.ToInt32(Studentid);
            Console.WriteLine("Enter your Birthdate");
            Birthdate = Console.ReadLine();         // line 26
            Birthdate = Convert.ToDateTime(Birthdate);
            Console.WriteLine("Enter your grade");
            Grade = Console.ReadLine();             // line 29
            Grade = Convert.ToDecimal(Grade);


            Console.ReadLine();
        }
    }
}

【问题讨论】:

  • 嗨@megz425,写你的第一个问题并不容易。为了让社区中的某个人帮助您,您可能希望以易于阅读和理解的方式格式化您的问题。要实现这一点,您可以使用编辑器中的帮助图标,该图标(以及其他)在此处描述:meta.stackexchange.com/questions/85474/…。此外,您可能希望更详细地描述您已经尝试自行解决问题的方法。

标签: c# variables type-conversion


【解决方案1】:

除了@akash 的回答之外,这里还有更多信息,为什么会发生错误:

第 23 行:无法将类型 'string' 隐式转换为 'int'

您的Studentid 被定义为int,这意味着它只能存储integers(整数,如1、2、3、4,...)。但是,通过使用Console.ReadLine(),您要求用户输入一些文本(即string)。你可以在Microsoft.Docs查找函数签名:

即使用户输入例如1234,这在内部也是由字符1234 组成的string。为了将其用作integer,您必须对其进行转换。为此,您使用 Convert.ToInt32(在 C# 中 intInt32 非常相似)。该函数需要一个仅包含数字的string,并尝试将其转换为int

所以你可以编写以下代码:

// take the input from the user as a string ...
string StudentidAsString = Console.ReadLine();         // line 23
// ... and convert the string consisting of numbers to an integer
Studentid = Convert.ToInt32(StudentIdAsString);

注意Convert.ToInt32 函数会在输入格式错误时失败(即抛出异常)(即它不包含像 1、2、3、4 等数字)。

“第 26 行:无法将类型 'string' 隐式转换为 'System.DateTime'”

这里的错误与之前的错误类似,除了string 输入不能转换为DateTime,这也是.NET 中的一种数据类型,只包含日期和时间信息。为此,您可以使用Convert.ToDateTime。 同样,您可以编写以下代码来更好地说明将字符串格式的日期转换为 DateTime 所需的单独步骤:

// take the input from the user as a string ...
string BirthdateAsString = Console.ReadLine();         // line 26
// ... and convert the string to a DateTime
Birthdate = Convert.ToDateTime(BirthdateAsString)

"第 29 行:不能将类型 'string' 隐式转换为 'decimal'"

同样的错误与之前的错误相似。在这种情况下,字符串数字需要由Convert.ToDecimal 转换为decimal,这是一种也可以保存数字小数的数据类型(与int 相比)。

// take the input from the user as a string ...
DateTime GradeAsString = Console.ReadLine();             // line 29
// ... and convert the string to a decimal
Grade = Convert.ToDateTime(GradeAsString);

我想这些错误可以通过使用您最喜欢的搜索引擎来解决,只需查找C# cannot implicitly convert type 'string' to 'int'"(产生几个 100,000 次点击)。

希望对您的下一个任务有所帮助。

【讨论】:

  • 我更改了第 11-13 行并将数据类型定义为字符串,并将“Console.ReadLine()”添加到第 24、27 和 30 行。现在它告诉我 int、DateTime 和十进制不能转换为字符串。 在此处插入手掌
  • @megz425 没有必要也不想更改变量StudentidBirthdateGrade 的数据类型。您希望它们是 not string 的数据类型,因此您可以操纵它们(例如添加/减去它;在处理 strings 时,所有这些都是不可能的)。所以解决方案是从Console(总是以strings 的形式出现)获取输入并将其转换为适当的数据类型。这可以在一行中完成(如@akash 所示)或通过辅助变量(此处为~AsString)在单独的行中完成。
【解决方案2】:

应该是

23) Studentid = Convert.ToInt32(Console.ReadLine());
26) Birthdate =Convert.ToDateTime(Console.ReadLine());
29) Grade =Convert.ToDecimal(Console.ReadLine());

完整的工作代码

using System;
namespace ConsoleStudentTracking
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string Firstname;
            string Lastname;
            int Studentid;
            DateTime Birthdate;
            decimal Grade;
            Console.WriteLine("a.-----------------------------");
            Console.WriteLine("Enter your first name");
            Firstname= Console.ReadLine();
            Console.WriteLine("Enter your last name");
            Lastname = Console.ReadLine();
            Console.WriteLine("b.My name is Lastname + ", " + Firstname");
            Console.WriteLine("c. I am a new student, and this is my first program");
            Console.WriteLine("d******************************");
            Console.WriteLine("Enter your Studentid");
            Studentid = Convert.ToInt32(Console.ReadLine());         // line 23
            Console.WriteLine("Enter your Birthdate");
            Birthdate =Convert.ToDateTime(Console.ReadLine());         // line 26
            Console.WriteLine("Enter your grade");
            Grade = Convert.ToDecimal(Console.ReadLine());             // line 29

            Console.ReadLine();
        }
    }
}

【讨论】:

  • 这是否意味着我需要删除显示“Studentid = Console.ReadLine();”的行在转换线之前?因为我尝试了两种方法,现在它给了我 int 和 decimal 无法转换为字符串类型的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
相关资源
最近更新 更多