2016-11-01 56 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运行时函数。 –