如何使一个function,所以我可以input我想打开的浏览器?

我的代码有什么问题? 我正在尝试制作一个程序,您可以键入要打开的浏览器。 如果语句,VC ++不断强调等号。

#include <iostream> #include <Windows.h> using namespace std; void OpenBrowser(string browser) { ShellExecuteA(NULL, "open", browser.c_str(), NULL, NULL, SW_MAXIMIZE); } int main() { char a; std::cout << "What is your favourite browser?\n" << std::endl; std::string input; std::cin >> a; if (a = "firefox") { OpenBrowser("firefox"); } else { OpenBrowser("chrome"); } system("pause"); return 0; } 

代码中有两个主要的错误需要注意。

  1. 在堆栈中分配变量a ,请注意它是一个字符,这意味着要求在堆栈中分配一个字节(可能是4,因为对齐)来保存将要输入的变量。 因此,为了能够容纳像“firefox”或“铬”字符串的变量,我们将需要更多的数据,例如, char a[MAX_PATH + 1];

  2. 如前所述, =运算符将指定一个指向 “firefox”字符串的指针 ,这不会有两个原因,一个是类型char由于它的大小而不能保存指针,第二个原因是类型是不一样的( char – 输入和const char* – “火狐”)。 为了补充一点,如果我们将改变类型为const char* changing = to ==将不起作用,因为在这种情况下,您正试图检查数据段(“firefox”)中的指针和一个指向堆栈(变量a )上的数据的指针, ==操作符将简单地检查指针是否相等,即指向内存中的相同位置。 所以解决这个问题的简单方法是在msdn上使用strcmp , strcmp 。

TL;博士:

 #include <iostream> #include <Windows.h> using namespace std; void OpenBrowser(string browser) { ShellExecuteA(NULL, "open", browser.c_str(), NULL, NULL, SW_MAXIMIZE); } int main() { char a[MAX_PATH + 1]; std::cout << "What is your favourite browser?\n" << std::endl; std::string input; std::cin >> a; if (!strcmp(a, "firefox")) { OpenBrowser("firefox"); } else { OpenBrowser("chrome"); } system("pause"); return 0; } 

以下是关于如何使用用户定义函数和ShellExecute调用来打开浏览器的示例:

 #include <iostream> #include <Windows.h> void openBrowser(const std::wstring& browser) { ShellExecute(0, NULL, browser.c_str(), NULL, NULL, SW_SHOW); } int main() { openBrowser(L"C:\\Program Files\\Mozilla Firefox\\firefox.exe"); return 0; }