C# 在C中将字符串转换为int#
我正在尝试编写一个简单的程序,要求用户输入一个数字,然后我将使用该数字来决定他们特定年龄的机票费用。我在尝试将字符串转换为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美元”); }
使用系统;
类票证价格
{
公共静态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 - 为便于将字符串解析为整数(和其他数字类型),请使用该数字类型的
方法。此方法将输出一个布尔值(True/False),让您知道操作是通过还是失败。如果结果为false,您可以在继续之前给出错误消息(不必担心程序崩溃).TryParse(inputstring,yourintegervariable)
- 先前有关开关语句的文本已删除
- 在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));
}
}