我正在尝试编写程序的问题.它只是一个Windows控制台程序,我是C++的新手.这是我的第四个项目.
我遇到的问题是,当我运行我的程序时,我没有错误,但是在我将在下面突出显示的行中有很多警告说"与字符串文字进行比较导致未指定的行为".
当程序运行而不是添加我希望它的数字时,无论我输入什么,只是给我一个随机的大数字.
这是代码:
#include <iostream>
using namespace std;
int main()
{
int hold;
int i;
int n;
i = 6;
int result;
int * price;
char items[100][100];
if (items == 0)
cout << "No items can be stored";
else
{
for (n=0; n<i; n++)
{
cout << "Item#" << n << ": ";
cin >> items[n];
}
cout << "\nYou Entered: \n";
for (n=0; n<i; n++)
cout << items[n] << ", ";
}
for (n=0; n<i; n++)
{
if (items[n] == "ab"){
price[n] = 2650;
}
else if (items[n] == "ae"){
price[n] = 1925;
}
else if (items[n] == "ie"){
price[n] = 3850;
}
else if (items[n] == "bt"){
price[n] = 3000;
}
else if (items[n] == "pd"){
price[n] = 2850;
}
else if (items[n] == "ga"){
price[n] = 2600;
}
}
for (n=0; n<i; n++)
{
result = result + price[n];
}
cout << "\nTotal gold for this build: " << result;
cin >> hold;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.我做错了可能有些大事.if语句中的名称都是占位符,如果我可以使用bare 6来处理它需要工作的话,我将添加更多if语句.
Big*_*oss 16
在C++中,==只在内部为原始类型实现,而数组不是原始类型,因此比较char[100]和字符串文字只会将它们比作2 char*或更好来说为2指针,因为这2个指针不能相等,items[n] == "ae"所以永远不能为真,而不是这个你应该std::string用来保持字符串:
std::string items[100];
// initialize items
if( items[n] == "ae" ) ...
Run Code Online (Sandbox Code Playgroud)
或者您应该使用strcmp比较字符串,但记住strcmp返回0表示相等的字符串,因此您的代码将如下:
char items[100][100];
// initialize items
if( strcmp(items[n], "ae") == 0 ) ...
Run Code Online (Sandbox Code Playgroud)
另外一个注释是if (items == 0)无用的,因为items在堆栈上分配而不是在堆中!
首先,int * price;是一个悬空指针 - 你永远不会初始化它.你必须做:
int * price = new int[i];
Run Code Online (Sandbox Code Playgroud)
其次,通常i表示迭代器索引,所以我建议你坚持使用 - 所以
for (i=0; i<n; i++) //some more refactoring needed
Run Code Online (Sandbox Code Playgroud)
第三,您需要strncmp在您的情况下比较使用char数组.
第四也是最重要的 - 使用std::string而std::vector不是.这是C++,而不是C.