2017-12-09 17 views
0

분당 한마디의 프로그램 (수업 시간)을 만들고 있는데, 내가 조사한 바에 따르면 이어야합니다. 기본적으로 타이머가 10 초에 도달하면 스톱워치를 중지하고 (필요하지는 않지만) 사용자가 더 이상 입력하지 못하도록합니다. 나는 이것을 어떻게 얻을 수 있을까? 사용자가 Enter 키를 누르 때까지 그 프로그램에 컨트롤을 반환하지 않는일정 시간 동안 스톱워치를 중지하려면 어떻게합니까?

public void Timer30() 
    { 
     double userCharcount = 0; 
     string userType; 
     int timeInSeconds = 10; 


     //new instance of stopwatch 
     Stopwatch stopWatch = new Stopwatch(); 

     //call level 1 words from wordbank 
     Console.WriteLine(WordBank.LevelOneWords); 
     stopWatch.Start(); 

     //**this doesn't seem to work** 
     if (stopWatch.Elapsed.Seconds >= timeInSeconds) 
     { Console.WriteLine("Time's up! Nice work."); 
      stopWatch.Stop(); 
      Console.ReadKey(); 
     } 

     userType = Console.ReadLine(); 
     stopWatch.Stop(); 


     //capture number of characters user types to calculate WPM 
     userCharcount = userType.Length; 

     // Get the elapsed time as a TimeSpan value. 
     TimeSpan ts = stopWatch.Elapsed; 

     // Format and display the TimeSpan value. 
     string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}" , 
      ts.Hours , ts.Minutes , ts.Seconds , 
      ts.Milliseconds/10); 
     Console.WriteLine("\nNice job! You finished in " + elapsedTime + "!"); 
     Thread.Sleep(2000); 
     //CalculateWPMEasy(userCharCount); 

    } 

답변

1

좋아, 이제 코드가 무엇을 통해 가자 :

  1. Console.WriteLine(WordBank.LevelOneWords);합니다. 좋아, 콘솔에 몇 마디 인쇄. 이 문은 정상적으로 완료되고 실행은 다음 문으로 넘어갑니다.
  2. stopWatch.Start();. 좋아, 스톱워치를 시작하십시오. 시간이 똑딱 거리기 시작합니다. 실행은 다음 문장으로 넘어갑니다.
  3. if (stopWatch.Elapsed.Seconds >= timeInSeconds). 좋습니다, 직후에 실행하면 스톱워치가 시작됩니다 ... 몇 초 후에, 아마도? timeInSeconds이 0보다 큰 값인 경우 stopWatch.Elapsed.Seconds >= timeInSeconds은 false입니다.
  4. 실행이에 ...가는

어떻게 당신이 초 2 단계와 3 단계 사이에 의해 갈 것이라고 기대 않았을 때?

그래서 어떻게 해결할 수 있습니까? 글쎄, 쉬운 방법은 사용자가 단어를 입력하게하는 것입니다, 아무리 천천히 그가있을 수도 : userType = Console.ReadLine();. 다음으로 만 경과 시간을 확인하고 timeInSeconds보다 큰 경우 사용자에게 알려주는 것이 너무 느립니다.

+0

전화하세요. 감사! –

2

당신은이 경우 Console.ReadLine()을 사용할 수 없습니다. 루프에서 Console.ReadKey()을 사용하여 시간 초과가 만료되지 않았는지 확인하십시오.