看起来整个简单的代码是正确的,但是当我点击开始并键入任何数字(例如4或6)时,唯一的输出就是每次“else if”!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
int c = Convert.ToInt32(Console.Read());
if (c >= 0 && c < 5)
{
Console.Write("# is > 0");
}
else if (c >= 5)
{
Console.Write("# is > 5");
}
Console.ReadKey();
}
}
}
答案 0 :(得分:5)
Console.Read
读到:
输入流中的下一个字符,[...]
如果查看ASCII table,您会注意到表示数字的字符具有从48开始的值。您获得的值已经是整数,因此无需转换(请参阅{{1}文档中的签名)。正如Travis J所建议的那样,您可以使用以下代码来获得预期结果:
Console.Read
正如您在the documentation for Console.ReadLine
中看到的那样 - 它会返回int c = Convert.ToInt32(Console.ReadLine());
。
考虑使用调试器,如您问题的评论中所述,以及阅读文档。
答案 1 :(得分:1)
这里的问题是你将输入作为ascii字符。所以你最终得到了ascii值。例如,当输入4时,52是该字符的整数表示,这是从.Read
返回的值。
该值是char值(int),因为您只使用.Read
。如果将其更改为.ReadLine
,它将以字符串形式出现并正确转换为int。
int c = Convert.ToInt32(Console.ReadLine());
答案 2 :(得分:1)
使用Console.Read
是问题所在。它返回一个int
,表示按下的下一个键的ASCII值。对于角色&#4;&#39;例如, 52 。 Convert.ToInt32
只会在传递int
时返回传递的值,因此值为c
。
如果您的代码是
int c = Convert.ToInt32(Console.ReadLine());
然后它将按预期工作,因为Console.ReadLine()
返回一个字符串。你也可以这样做:
int c = Convert.ToInt32(((char)Console.Read()).ToString());
请注意,我将52转换为char
,然后在调用ToString
之后实际解析它。
答案 3 :(得分:1)
SELECT * FROM (
SELECT Submission.Title AS [Title],
Submission.Status AS [Submission_Status],
ROW_NUMBER() OVER(PARTITION BY Submission.Title ORDER BY Submission.Title) AS rn
FROM Submission
INNER JOIN ResearcherSubmission ON Submission.SubmissionID = ResearcherSubmission.SubmissionID
INNER JOIN Researcher ON Researcher.ResearcherID = ResearcherSubmission.ResearcherID
INNER JOIN School ON School.SchoolID = Researcher.SchoolID
INNER JOIN Faculty ON Faculty.FacultyID = School.[FacultyID] ) xx
WHERE rn = 1;
获取下一个字符用户输入。 你用过了
Console.Read();
返回数字的ASCII值(作为字符输入)。对于&#39; 0&#39;这是48,对于&#39; 1&#39;它解释了为什么你的代码总是会进入其他地方。 而是使用它:
Convert.ToInt32(Console.Read());
这个val应该存储准确的int值。它提到here