我的代码出了什么问题?我正在尝试创建一个程序,您可以在其中键入要打开的浏览器。 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;
}
答案 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)
代码中有两个主要错误。
在堆栈上分配变量a
,请注意它是一个char,这意味着你要求在堆栈上分配一个(1)字节(因为对齐可能是4)保存将要输入的变量。所以对于变量来说,能够保存一个像&#34; firefox&#34;或&#34; chrome&#34;我们需要更多数据,例如char a[MAX_PATH + 1];
如上所述,=
运算符会将指针分配给&#34; firefox&#34;字符串,这不会有两个原因,一个是char
类型由于它的大小而不能保持指针,第二个原因是类型不一样(char
- 输入和const char*
- &#34; firefox&#34;)。
要添加,如果我们将a
的类型更改为const char*
,则将=
更改为==
将无法正常工作,因为在这种情况下,您正在尝试检查是否相等在数据部分中的指针(&#34; firefox&#34;)和指向堆栈上数据的指针(变量a
)之间,==
运算符将简单地检查指针是否相等,即指向内存中的同一个地方。因此,解决此问题的简便方法是使用strcmp
,strcmp on msdn。
<强>铊; 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;
}