如何制作一个功能,以便我可以输入我想打开的浏览器?

How to make a function so I can type what browser I want to open?

我的代码有什么问题?我正在尝试制作一个程序,您可以在其中键入要打开的浏览器。 VC++ 在 if 语句中一直在等号下划线。

#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;
}

这是一个关于如何使用用户定义的函数和调用 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;
}

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

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

  2. 如前所述,= 运算符会将带有 指针 的指针 分配给 "firefox" 字符串,这是行不通的有两个原因,一个是类型 char 由于它的大小不能容纳指针,第二个原因是类型不相同(char - 输入和 const char* - "firefox")。 除此之外,如果我们将 a 的类型更改为 const char*,将 = 更改为 == 也将不起作用,因为在这种情况下,您正在尝试检查是否相等在数据部分中的指针("firefox")和指向堆栈中数据的指针(变量a)之间,== 运算符将简单地检查指针是否相等,即指向内存中的相同位置。所以解决这个问题的简单方法是使用 strcmp, strcmp on msdn.

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;
}