2012-11-02 236 views
1

我試圖接近我的C#控制檯應用程序(不調試運行),並沒有什麼工作。我已經嘗試了所有不同的退出代碼,但沒有通常的嫌疑人被終止它= /是不是因爲該選項是在一堆嵌套的if語句?它可能是一個非常簡單的東西,我想念但是它傷害了我的大腦現在有人請幫助!我已經試過:終止C#控制檯應用程序

System.Environment.Exit(0); 
System.Environment.Exit(1); 
System.Environment.Exit(-1); 
return; 
Application.Exit(); //(wont even except it) 

上下文是否有助於我已經使用嵌套的if語句來檢查,如果用戶已經輸入的數字或字母「Q」,如果他們輸入數字的計算進行,如果已經輸入了字母q,那麼程序將退出,並輸出任何其他錯誤語句。

string userInput; 
int userInputDigit = 0; 
double userCost = 0; 
char userInputChar; 

userInput = Convert.ToString(Console.ReadLine()); 

if (int.TryParse(userInput, out userInputDigit)) 
{ 
    if (userInputDigit <= 50) 
    { 
     userCost = (price * userInputDigit); 
     Console.WriteLine("You have purchased {0} Widgets at a cost of {1:c0}", userInputDigit, userCost); 
    } 
    else if ((userInputDigit > 50) && (userInputDigit <= 80)) 
    { 
     userCost = (price * 50) + ((userInputDigit - 50) * (price - 1)); 
     Console.WriteLine("You have purchased {0} Widgets at a cost of {1:c0}", userInputDigit, userCost); 
    } 
    else if ((userInputDigit > 80) && (userInputDigit <= 100)) 
    { 
     userCost = (price * 50) + (30 * (price - 1)) + ((userInputDigit - 80) * (price - 2.50)); 
     Console.WriteLine("You have purchased {0} Widgets at a cost of {1:c0}", userInputDigit, userCost); 
    } 
    else 
    { 
     Console.WriteLine("Error! Please input a number between 0 and 100"); 
    } 

} 
else if (char.TryParse(userInput, out userInputChar)) 
{ 
    if ((userInput == "q") || (userInput == "Q")) 
    { 
     System.Environment.Exit(0); 
    } 
    else 
    { 
     Console.WriteLine("Incorrect Letter Inputted"); 
    } 
} 
else 
{ 
    Console.WriteLine("Error! Please input a number or 'q' to quit"); 
} 
+0

你好嗎?您是否在Visual Studio中選擇了「Debug - > Start without Debugging」?你是否手動打開控制檯窗口,然後輸入.exe名稱? –

+1

所以你寫了一個控制檯程序,你大概是從命令行運行它的。當執行到達主函數的末尾時它應該自行退出。如果你註釋掉main中的所有內容,構建你的程序並運行它,它應該運行並退出。可以? –

+0

在調試器中,檢查「System.Environment.Exit(0)」是否被執行。 – millimoose

回答

0

使用一個循環,只是讓Main正常返回。此外,我還試圖簡化條件檢查與字符串比較和解析。您的錯誤消息提示驗證範圍(「在0和100之間」),但實際上並未由前面的if/else if邏輯強制實施。例如,如果用戶輸入負值,您的第一個案例(... < = 50)將爲真。另外,我沒有看到價格曾經被宣佈過,所以我在我的例子中構成了一個常數。

static bool ExitRequired(string line) 
{ 
    return string.Equals(line, "q", StringComparison.OrdinalIgnoreCase); 
} 

static void Main(string[] args) 
{ 
    const double price = 10; 
    int userInputDigit; 
    double userCost; 
    string line = null; 

    while (!ExitRequired(line)) 
    { 
     Console.WriteLine("Enter a number or press 'q' to exit..."); 
     line = Console.ReadLine(); 

     if (ExitRequired(line)) 
      break; 

     if (int.TryParse(line, out userInputDigit) 
      && userInputDigit > 0 
      && userInputDigit < 100) 
     { 
      if (userInputDigit <= 50) 
      { 
       userCost = (price * userInputDigit); 
       Console.WriteLine("You have purchased {0} Widgets at a cost of {1:c0}", userInputDigit, userCost); 
      } 
      else if ((userInputDigit > 50) && (userInputDigit <= 80)) 
      { 
       userCost = (price * 50) + ((userInputDigit - 50) * (price - 1)); 
       Console.WriteLine("You have purchased {0} Widgets at a cost of {1:c0}", userInputDigit, userCost); 
      } 
      else if ((userInputDigit > 80) && (userInputDigit <= 100)) 
      { 
       userCost = (price * 50) + (30 * (price - 1)) + ((userInputDigit - 80) * (price - 2.50)); 
       Console.WriteLine("You have purchased {0} Widgets at a cost of {1:c0}", userInputDigit, userCost); 
      } 
     } 
     else 
     { 
      Console.WriteLine("Error! Please input a number between 0 and 100"); 
     } 
    } 
} 
+0

謝謝!我試了一下... Price在程序中聲明的更早,因爲我在循環中以10爲增量輸出小部件的價格...我只使用了for循環,並且演示循環是分配目的,因此它可能會受益我的理解!這(做嗎?)循環保持程序要求輸入,直到用戶輸入q? –

+0

正確...如果這有幫助,請將此標記爲答案或讓我知道我錯過了什麼,我會盡力改進它。 – blins

+0

我會做,但將不會有機會,直到明天下班後,所以應該讓你知道然後=] –

4

我想你需要做的是在你的項目上單擊右鍵,選擇「屬性」,然後(報價msdn.com):

要在視覺設置此鏈接選項Studio開發環境

打開項目的屬性頁對話框。有關詳細信息,請參閱設置 Visual C++項目屬性。

單擊鏈接器文件夾。

單擊系統屬性頁面。

修改SubSystem屬性。

對於子系統,請選擇控制檯。希望這可以幫助! :)

+0

這將適用於C#應用程序? –

1

我會首先運行你的應用程序的調試和檢查,以確保您的Application.Exit其實是擊中。這可能會讓我們瞭解應用程序爲什麼不退出。

您應該使用Environment.Exit(0)。這似乎是結束控制檯應用程序的更好方法。

來源:http://geekswithblogs.net/mtreadwell/archive/2004/06/06/6123.aspx

如果這個代碼是在主我會建議使用一個回報;在您的電話退出應用程序後。

+0

是的,它結束時調試,但我打算在環境中運行它並使用代碼退出請求我試過environment.exit(0);但仍然顯示「按任意鍵繼續」 –

+0

在調用退出應用程序之前是否有Console.ReadLine()? –

+0

或者,您是否正在使用編譯時間指令(如#if debug#)在調試時執行某些操作? –

0

如果你開始從Visual Studio在調試模式(按Ctrl + F5)控制檯應用程序,然後控制檯窗口保持打開狀態應用程序執行完畢。它會提示Press any key to continue...此時,您的控制檯應用程序已退出。

當您運行* .exe文件時,您的控制檯將關閉而不詢問按鍵。這只是Visual Studio的'功能' - 它運行cmd.exe,告訴它運行你的可執行文件然後暫停。

下面是當你啓動應用程序而不調試什麼的Visual Studio做(你可以複製爲* .bat文件並運行它)

ECHO OFF 
CLS 
"Path\To\Your\ConsoleApplication.exe" 
PAUSE 
+0

是的,他們是我的想法,但作業問'q'是要終止程序,我們沒有被告知調試我們的程序= /謝謝大家的幫助,我將不得不給我的導師發郵件並要求她解釋什麼這項任務是要求=/ –

+0

啊,所以只是溝通不暢,然後我猜測什麼是任務...謝謝=] –

3

我建議你嘗試application.close()函數。它多次拯救了我的一天。如果它沒有幫助,請告訴我。

+0

我試過= [它不喜歡「應用程序」出於某種原因(它不出現在下拉) –

0

「按任意鍵繼續」文本當您運行從Visual Studio項目的增加。

取而代之的是,進入垃圾箱並從那裏運行它。

確保在運行之前先構建項目。如果你從VS運行,它會自動構建,如果需要,但從Windows資源管理器運行文件不會這樣做。