If和Else if block仅运行Else if

时间:2015-09-25 22:14:41

标签: c# if-statement

看起来整个简单的代码是正确的,但是当我点击开始并键入任何数字(例如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();

        }
    }
}

4 个答案:

答案 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