为什么这个简单的代码不起作用? 一切似乎都没问题,我没有得到任何错误(IDE:Visual studio 2013) 有人可以帮忙吗?
int a[30];
int b;
int min = 0;
do {
cin >> b;
if (b != 0) {
int i = 0;
a[i] = b;
i++;
if (min>a[i])
min = a[i];
}
} while (b != 0);
cout << endl << "THE MIN IS : "<<min<<endl;
答案 0 :(得分:3)
程序具有未定义的行为,因为您使用了数组的未初始化元素。
在此代码段中
if (b != 0)
{
int i = 0;
a[i] = b;
i++;
if (min>a[i])
min = a[i];
}
您总是将min与未分配任何值的[1]进行比较。在if语句变量的块语句中,我总是重新创建并初始化为0.然后它会增加并将min与[1]进行比较。但它只被分配了[0]。
实际上你不需要任何数组。代码可以按以下方式编写
bool empty = true;
int min;
int value;
while ( std::cin >> value && value != 0 )
{
if ( empty || value < min )
{
empty = false;
min = value;
}
}
if ( !empty ) std::cout << "\nThe minimum is equal to " << min << std::endl;
else std::cout << "\nYou did not enter any number" << std::endl;
如果需要在数组中存储值,则代码可以采用以下方式
const size_t N = 30;
int a[N];
int value;
size_t i = 0;
while ( i < N && std::cin >> value && value != 0 ) a[i++] = value;
if ( i != 0 )
{
int min = a[0];
for ( size_t j = 1; j < i; j++ )
{
if ( a[j] < min ) min = a[j];
}
std::cout << "\nThe minimum is equal to " << min << std::endl;
}
else
{
std::cout << "\nYou did not enter any number" << std::endl;
}
考虑到C ++中标题std::min_element
中声明了标准算法<algorithm>
。