如何制作功能,以便我可以输入要打开的浏览器

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

本文关键字:浏览器 输入 我可以 功能 何制作      更新时间:2023-10-16

我的代码怎么了?我正在尝试制作一个程序,您可以在其中输入要打开的浏览器。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,请注意,这是一个char,这意味着您要求在堆栈上分配一个(可能是4个),以保存将是的变量输入。因此,要使变量能够容纳诸如" Firefox"或" Chrome"之类的字符串,我们将需要更多数据,以便于Instace,char a[MAX_PATH + 1];

  2. 所说的,=操作员将用指针分配给" Firefox"字符串,这将无法使用,这是有两个原因的,一个是char类型无法保持指针由于大小,第二个原因是类型不相同(char-输入和const char*-" Firefox")。为此,如果我们将a的类型更改为const char*,则将=更改为==也不起作用,因为在这种情况下,您正在尝试在数据部分中的指针(" Firefox")和指向指向指针和向指针中检查到指针堆栈中的数据(变量a),==操作员将简单地检查指针是否相等,即指向内存中的同一位置。因此,解决此问题的简便方法是使用strcmp,MSDN上的strcmp。

tl; dr:

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