Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中将字符串转换为int#_C#_String_Int - Fatal编程技术网

C# 在C中将字符串转换为int#

C# 在C中将字符串转换为int#,c#,string,int,C#,String,Int,我正在尝试编写一个简单的程序,要求用户输入一个数字,然后我将使用该数字来决定他们特定年龄的机票费用。我在尝试将字符串转换为int时遇到问题。否则程序布局很好。有什么建议吗? 谢谢 使用系统; 类票证价格 { 公共静态void Main(字符串[]args) { Console.WriteLine(“请输入您的年龄”); int input=Console.ReadLine(); 如果(输入55) { Console.WriteLine(“您是“+input+”,入场费为8美元”); }

我正在尝试编写一个简单的程序,要求用户输入一个数字,然后我将使用该数字来决定他们特定年龄的机票费用。我在尝试将字符串转换为int时遇到问题。否则程序布局很好。有什么建议吗? 谢谢

使用系统;
类票证价格
{    
公共静态void Main(字符串[]args)
{
Console.WriteLine(“请输入您的年龄”);
int input=Console.ReadLine();
如果(输入<5)
{
WriteLine(“你是“+input+”,并且仰慕是免费的!”);
}
否则如果(输入大于4,输入小于18)
{
Console.WriteLine(“您是“+input+”,入场费为5美元”);
}
否则如果(输入大于17,输入小于56)
{
Console.WriteLine(“您是“+input+”,入场费为10美元”);
}
否则如果(输入>55)
{
Console.WriteLine(“您是“+input+”,入场费为8美元”);
}
}
}
请注意,如果输入的数字无效,这将引发异常。

请尝试
int.TryParse(…)
方法。它不会抛出异常

此外,您应该在您的条件下使用
&
而不是
&
<代码>&是逻辑AND,
&
是位AND

  • 为便于将字符串解析为整数(和其他数字类型),请使用该数字类型的
    .TryParse(inputstring,yourintegervariable)
    方法。此方法将输出一个布尔值(True/False),让您知道操作是通过还是失败。如果结果为false,您可以在继续之前给出错误消息(不必担心程序崩溃)

  • 先前有关开关语句的文本已删除

  • 在C#中,需要使用
    &
    运算符进行逻辑AND运算<代码>&是不同的,可能无法按照您认为的方式工作


您需要做的第一件事是将
输入变量更改为字符串:

string input = Console.ReadLine();
一旦有了它,有几种方法可以将其转换为整数。有关更多信息,请参见此答案:
我建议使用这种方法。此外,我建议重构您的代码-您可以使其更干净(假设这不仅仅是示例代码)。一种解决方案是使用键值对列表从年龄到入学进行映射

using System;
using System.Collections.Generic;
using System.Linq;

static class TicketPrice
{
    private static readonly IList<KeyValuePair<Int32, String>> AgeAdmissionMap =
        new List<KeyValuePair<Int32, String>>
            {
                new KeyValuePair<Int32, String>(0, "FREE!"),
                new KeyValuePair<Int32, String>(5, "$5."),
                new KeyValuePair<Int32, String>(18, "$10."),
                new KeyValuePair<Int32, String>(56, "$8.")
            };

    public static void Main(String[] args)
    {
        Console.WriteLine("Please Enter Your Age!");

        UInt32 age;  
        while (!UInt32.TryParse(Console.ReadLine(), out age)) { }

        String admission = TicketPrice.AgeAdmissionMap
            .OrderByDescending(pair => pair.Key)
            .First(pair => pair.Key <= age)
            .Value;

        Console.WriteLine(String.Format(
            "You are {0} and the admission is {1}",
            age,
            admission));
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
静态类TicketPrice
{
私有静态只读IList AgeAgeAdmissionMap=
新名单
{
新的KeyValuePair(0,“免费!”),
新的KeyValuePair(5,“$5”),
新的KeyValuePair(18,“$10”),
新的KeyValuePair(56,“$8.”)
};
公共静态void Main(字符串[]args)
{
控制台。WriteLine(“请输入您的年龄!”);
UInt32岁;
而(!UInt32.TryParse(Console.ReadLine(),out age)){
字符串admission=TicketPrice.AgeAdmissionMap
.OrderByDescending(pair=>pair.Key)

.First(pair=>pair.Key我不知道开关在这里是如何应用的,因为它不能用于范围(您是否考虑使用Visual Basic?)。当然你可以使用空的case fallthrough,但是考虑到示例程序需要55个case语句加上一个默认值来完成此操作,你真的认为这是一个更好的方法吗?我可以发誓switch语句允许范围。经过反复检查后,似乎根本不是这样。谢谢你带来了这个t哦,请注意:)运算符-&和&&-都是一种逻辑and运算符。&是“实”逻辑and运算符&&是条件逻辑and运算符。While&始终求值两个操作数&&仅当左操作数求值为真时才求值右操作数。因此,这取决于必须使用哪一个。如果操作数没有副作用,并且没有依赖项,则操作数之间的环,它们是函数等价的(但是&&可能会节省一些操作)。是的,在指出需要重构操作中的代码方面做得很好。&&和&都是逻辑and(也请参见对TheTXI答案的评论)除了我的答案,还可以考虑使用<5 |>=5&&<18 |>=18&&<56 |>=56。这对我来说似乎更容易理解。标准答案的可能重复是(39个答案,总共有2000多张选票):
string input = Console.ReadLine();
using System;
using System.Collections.Generic;
using System.Linq;

static class TicketPrice
{
    private static readonly IList<KeyValuePair<Int32, String>> AgeAdmissionMap =
        new List<KeyValuePair<Int32, String>>
            {
                new KeyValuePair<Int32, String>(0, "FREE!"),
                new KeyValuePair<Int32, String>(5, "$5."),
                new KeyValuePair<Int32, String>(18, "$10."),
                new KeyValuePair<Int32, String>(56, "$8.")
            };

    public static void Main(String[] args)
    {
        Console.WriteLine("Please Enter Your Age!");

        UInt32 age;  
        while (!UInt32.TryParse(Console.ReadLine(), out age)) { }

        String admission = TicketPrice.AgeAdmissionMap
            .OrderByDescending(pair => pair.Key)
            .First(pair => pair.Key <= age)
            .Value;

        Console.WriteLine(String.Format(
            "You are {0} and the admission is {1}",
            age,
            admission));
    }
}