如何制作一个功能,以便我可以输入我想打开的浏览器?
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;
}
代码中有两个主要错误需要注意。
在堆栈上分配变量 a
,请注意它是一个字符,这意味着您要求在堆栈上分配一个 (1) 字节(由于对齐可能是 4 个) ) 来保存将要输入的变量。因此,为了使变量能够保存 "firefox" 或 "chrome" 之类的字符串,我们将需要更多数据,例如 char a[MAX_PATH + 1];
如前所述,=
运算符会将带有 指针 的指针 分配给 "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;
}
我的代码有什么问题?我正在尝试制作一个程序,您可以在其中键入要打开的浏览器。 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;
}
代码中有两个主要错误需要注意。
在堆栈上分配变量
a
,请注意它是一个字符,这意味着您要求在堆栈上分配一个 (1) 字节(由于对齐可能是 4 个) ) 来保存将要输入的变量。因此,为了使变量能够保存 "firefox" 或 "chrome" 之类的字符串,我们将需要更多数据,例如char a[MAX_PATH + 1];
如前所述,
=
运算符会将带有 指针 的指针 分配给 "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;
}