2016-11-01 91 views
0

夥計們,我在這裏做錯了什麼?在C++中的命令提示符

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    while (true){ 
     std::string cmd; 
     cin >> cmd; 

     const char* com = cmd.c_str(); 

     cout << com << endl; 
     // cout << sizeof(com) << endl; 

     system(com); 
    } 
    return 0; 
} 

每次我運行這個它工作正常,但是當你輸入類似cd ../它分開的話,並運行它們作爲兩個不同的命令,這樣的第一張CD,然後../和它給了我一個錯誤。任何想法我做錯了什麼? 我是新的C++反正也這是應該繞開「命令提示符已被您的管理員在Windows禁用」

+1

因此'cout'會一直讀到第一個白色空間,所以'cd'和'../'將分開讀取,因爲白色空間將兩者分開。 –

+2

並在'system'調用中發出'cd'語句不會改變下一次系統調用的當前目錄... –

+3

問題出在'std :: cin >>'那裏不能得到空格使用'std :: cin .getline'代替 – Kazz

回答

1

提取運算符(>>)停止到達第一空白時,如果你的命令由閱讀的空間,然後使用std ::函數getline:

std::string sCommand; 
std::cout << "Enter eommand: "; 
std::getline(std::cin, sCommand); // eg enter: color 1f 
system(sCommand.c_str()); // c_str(): converts from class string to const char*. 

有沒有辦法一個接一個傳遞兩個參數對系統,當第一參數調用程序,第二個是傳遞給它,但你可以在大命令然後通過它。

system("diskpart"); // invoking diskpart 
system("list vol"); // here list vol is not passed to diskpart but only to cmd 

system("notepad.exe C:/desktop/mylog.txt"); // ok 
+1

基於提問者嘗試執行「cd ../」,很可能他沒有運行Windows,而是某種Unix版本。 –

+0

@JeremyFriesner他在哪裏得到系統? – Raindrop7

+1

@ Raindrop7:'system()'是一個標準的C運行時函數。 –