C#,跳过Console.ReadLine();Console.Read();在循环中
若我第一次运行我的代码并插入正确的值,程序运行正常并完成它的工作,但若我输入错误的路径并允许循环在第二次旋转,它将跳过C#,跳过Console.ReadLine();Console.Read();在循环中,c#,.net,loops,console.readline,C#,.net,Loops,Console.readline,若我第一次运行我的代码并插入正确的值,程序运行正常并完成它的工作,但若我输入错误的路径并允许循环在第二次旋转,它将跳过path=Console.ReadLine()但它不会跳过j=(char)Console.Read()同样的事情会一直持续到剩下的代码 do { Console.WriteLine("Insert path:"); path = Console.ReadLine(); temp1 = CheckPath(path); //checks if insert
path=Console.ReadLine()代码>但它不会跳过j=(char)Console.Read()代码>同样的事情会一直持续到剩下的代码
do
{
Console.WriteLine("Insert path:");
path = Console.ReadLine();
temp1 = CheckPath(path); //checks if inserted value is legit
if (temp1 == false)
{
Console.WriteLine("\nDo you want to skip this step(by default directory will be set to Desktop)? Y/N ");
j = (char)Console.Read();
if (j.Equals('Y') || j.Equals('y'))
{
path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
temp1 = true;
}
}
//User inputs y/Y loop will end and exit with either path chosen by user or with desktop path
} while (!temp1);
path=Console.ReadLine()如果用户未能插入正确的路径,则跳过代码>。从昨天开始我就一直在寻找解决方案,但我在网上没有找到相同的问题。链接到完整代码:调用没有被跳过-问题是Console.Read()
只会在用户点击return后返回-尽管它只会使用它读取的第一个字符。因此,假设(当提示跳过时)用户输入:
Nfoo
然后点击返回。。。在下一次迭代中,path
的值将是foo
最简单的修复方法可能是将您的Console.Read()
调用转换为Console.ReadLine()
,只需处理用户键入多个字符的情况。使用Console.ReadKey
就更有用了-它只会读取一个键,并且不需要您按enter键。您已经通过了吗?这可能只是分配布尔值和路径值的顺序。每次计算它们时,将鼠标悬停在它们上方,检查这是否是您希望看到的值。@DeeMac我一直在疯狂地调试这段代码。它执行原始post.Consol.Read()上所述的操作,在输入中添加一个回车符,回车符使Console.ReadLine()跳过check@SeraphimFoA让我马上试试。j=(char)Console.Read();没有被跳过。而path=Console.ReadLine();这是由于Console.Read()引起的;一旦我将其转换为Console.ReadLine();成功了。谢谢请解释一下为什么会这样?@卡尔:我在回答中解释过。。。控制台。直到用户点击返回,阅读才会完成。很抱歉我的误解,但我正在尽可能多地学习。所以请详细说明一下,因为我实际上按了回车键(return=enter?。@Carl:您按了回车键,但Console.Read()
不使用它,它只使用一个输入字符。因此,如果您键入“foo”
,它将使用f
,然后对控制台的下一次调用。ReadLine()
将使用“oo”。