2013-10-27 179 views
0

當我從msys命令行運行該程序時,它會通知打開一個名爲calc.exe(程序名稱)的窗口,並顯示以下錯誤: calc.exe遇到問題並需要關閉。對此造成的不便,我們表示歉意。爲什麼我的C程序崩潰?

這裏是我的主要功能:

int main(int argc, char *argv[]) 
{ 
    int num1, num2, ans; 

    hist_file_create(); 

    if (argc < 2 || argc > 2) 
     kill("ERROR: Use: calc <operation_type>"); 

    char operation_type = argv[2][0]; 

    switch(operation_type) 
    { 
     // Addition 
     case 'a': 
      printf("Enter a number:\n"); 
      scanf("%d", &num1); 
      printf("Enter a second number\n"); 
      scanf("%d", &num2); 
      ans = num1 + num2; 
      printf("%d + %d = %d", num1, num2, ans); 
      break; 

     // Operation type list 
     case 'l': 
      operation_type_list(); 
      break; 

     default: 
      kill("Invalid operation type. To see a list of recognised operation types, type l"); 
    } 
    system("PAUSE"); 

} 

我知道這是可能仍然很凌亂,但右nnow我只是想,使其工作,後來清理。 您可能需要的任何其他信息我會給。

+0

你可以把完整的代碼,我的意思是'hist_file_create()'和'operation_type_list()'的定義? –

+0

是的。我可以pastebin它,如果你像 – mee

+0

@mat - ita崩潰時,我運行程序從命令行,與「calc a」或「calc l」。而不是執行這兩種情況下的代碼,它崩潰 – mee

回答

1

這個條件可以確保您有完全相同2個參數或程序中存在 如果(ARGC < 2 || ARGC> 2) 殺( 「ERROR:使用:理論值」);

但是下一行正在訪問第三個參數 char operation_type = argv [2] [0];

哪些不存在。和程序被殺死

+0

好的。生病嘗試現在解決它。 thx – mee

+0

我將if語句更改爲:if(argc < 3 || argc > 3),現在它不會崩潰。爲此。但不是執行我告訴它的任何情況,而是執行kill(「ERROR:Use:calc 」); – mee

+0

如果您更改了argc條件,則意味着您需要3個參數或調用kill。顯然,如果你在沒有3個參數的情況下調用它,它將會退出(記住第一個參數總是可執行文件名)。 我強烈懷疑,你想做出改變是 焦炭operation_type =的argv [1] [0] 所以該方案仍接受2個參數(第一個參數計算,第二個參數) 你再圖從第二個參數的第一個字符中取出操作類型:argv [1] [0] 請務必記住,編譯器將完全按照您所做的告訴它只做更多事情。 – odedsh