2011-11-05 86 views
0

爲什麼我無法輸入任何內容?運行程序不會等待我的輸入,cmd會打印並關閉。我在Visual Studio 2008上執行它。命令提示符關閉而無需輸入

int main(int argc, char* argv[]) 
    { 
     if(argc<2) 
      printf("\nEnter a filename"); 
     else 
     { 
      //code 
     } 
     getch(); 
     return 0; 
     } 

我在做什麼錯?

+1

'程序'[3192] bst.exe:Managed'已退出,代碼爲0(0x0)。「你不知道怎麼用C++編程。使用適當的項目模板來啓動項目。使用Win32 + Win32控制檯應用程序。 –

+0

@Hans Passant - 'getch()'仍然可以在C++/CLI中工作......它不是? – atzz

+0

@Hans嘗試過,同樣的問題 – Ava

回答

0

通常應該用換行符結束而不是開始輸出的字符串(因爲stdout換行符可能會刷新緩衝區)。或者在致電getch()之前撥打電話fflush(stdout);。因此請嘗試使用printf("Enter a filename:\n");

+0

嘗試這兩個,打印後輸入一個文件名,因爲我按一個鍵輸入它關閉。在輸出窗口上,它顯示線程'Win32 Thread'(0x428)已退出,並且代碼爲0(0x0)。 線程'Win32 Thread'(0xb70)已退出,代碼爲0(0x0)。 程序'[3192] bst.exe:Managed'已退出,代碼爲0(0x0)。 程序'[3192] bst.exe:Native'已退出,代碼爲0(0x0)。 ' – Ava

+0

可能是配置你的編譯器的問題。我忍不住,我從來沒有用過Windows!你有沒有考慮使用Linux? –

+0

好的。這是一個任務,將在Windows上檢查 – Ava

0

嘗試運行程序而不進行調試(Ctrl+F5在Visual Studio中)。這將在程序結束後保持cmd窗口打開。

(編輯)也許你想要做這樣的事情:

int main(int argc, char* argv[]) 
    { 
     string filename; 
     if(argc<2) 
     { 
      printf("\nEnter a filename"); 
      cin >> filename; 
     } 
     else 
     { 
      //code 
     } 
     // getch(); // Use Ctrl+F5 instead 
     return 0; 
    } 

getch()僅會從輸入流1個字符。

+0

這樣做..在我輸入第一個字符後,輸入一個文件名後,它說'按任意鍵繼續...',當我按下它時關閉。 – Ava

2

我在猜測什麼是在緩衝區中。嘗試看看它是什麼?

int main(int argc, char* argv[]) 
{ 
    if(argc<2) 
     printf("\nEnter a filename"); 
    else 
    { 
     //code 
    } 

    while (true) 
    { 
     int c; 
     c = getch(); 
     printf(": %d\n", c); 
    } 
    return 0; 
} 

在您的迴應後,當您的程序被調用時,您的輸入流中會出現字母b。不知道該如何解釋。你想要獲得一整串而不僅僅是一個角色嗎?

int main(int argc, char* argv[]) 
{ 
    char string [256]; 
    if(argc<2) 
    { 
     printf("Enter a filename:"); 
     gets (string); 
    } 
    else 
    { 
     //assign string to argv[1] 
    } 


    printf ("Your filename is: %s\n",string); 
    return 0; 
    } 
+0

它印有':98' – Ava

+0

http://www.asciitable.com/ 98是字母b。出於某種原因,它在stdin中。 –

+0

當你在調試器中運行一個程序(類似於調試/命令行參數中的 rve