如何创建一个函数,以便我可以键入我想要打开的浏览器?

时间:2016-12-17 15:22:32

标签: c++ windows shellexecute

我的代码出了什么问题?我正在尝试创建一个程序,您可以在其中键入要打开的浏览器。 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;
}

2 个答案:

答案 0 :(得分:2)

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

sysuse auto, clear
generate time = _n
tsset time

eststo clear
prais price weight
eststo

esttab, label stats(dw_0, fmt(%9.3f) labels(Durbin-Watson))


. esttab, label stats(dw_0, fmt(%9.3f) labels(Durbin-Watson))

------------------------------------
                              (1)   
                            Price   
------------------------------------
Weight (lbs.)               2.778***
                           (7.73)   

Constant                  -2170.2   
                          (-1.80)   
------------------------------------
Durbin-Watson               1.105   
------------------------------------
t statistics in parentheses
* p<0.05, ** p<0.01, *** p<0.001

答案 1 :(得分:1)

代码中有两个主要错误。

  1. 在堆栈上分配变量a,请注意它是一个char,这意味着你要求在堆栈上分配一个(1)字节(因为对齐可能是4)保存将要输入的变量。所以对于变量来说,能够保存一个像&#34; firefox&#34;或&#34; chrome&#34;我们需要更多数据,例如char a[MAX_PATH + 1];

  2. 如上所述,=运算符会将指针分配给&#34; firefox&#34;字符串,这不会有两个原因,一个是char类型由于它的大小而不能保持指针,第二个原因是类型不一样(char - 输入和const char* - &#34; firefox&#34;)。 要添加,如果我们将a的类型更改为const char*,则将=更改为==将无法正常工作,因为在这种情况下,您正在尝试检查是否相等在数据部分中的指针(&#34; firefox&#34;)和指向堆栈上数据的指针(变量a)之间,==运算符将简单地检查指针是否相等,即指向内存中的同一个地方。因此,解决此问题的简便方法是使用strcmpstrcmp on msdn

  3. <强>铊; 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;
    }