Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用数组确定最小值_C++_Visual C++_C++11_Visual Studio 2013 - Fatal编程技术网

C++ 使用数组确定最小值

C++ 使用数组确定最小值,c++,visual-c++,c++11,visual-studio-2013,C++,Visual C++,C++11,Visual Studio 2013,为什么这个简单的代码不起作用? 一切似乎都正常,我没有收到任何错误(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]; } }

为什么这个简单的代码不起作用? 一切似乎都正常,我没有收到任何错误(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;
inta[30];
int b;
int min=0;
做{
cin>>b;
如果(b!=0){
int i=0;
a[i]=b;
i++;
如果(min>a[i])
min=a[i];
}
}而(b!=0);

cout程序具有未定义的行为,因为您使用了数组的未初始化元素

在这个代码片段中

if (b != 0)
    {   
        int i = 0;
        a[i] = b;
        i++;
        if (min>a[i])
            min = a[i];

    }
您总是将min与未指定任何值的[1]进行比较。在if语句变量i的block语句中,总是重新创建并由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;
} 
bool empty=true;
int-min;
int值;
而(标准::cin>>值和值!=0)
{
if(空| |值<最小值)
{
空=假;
最小值=数值;
}
}

如果(!empty)std::cout,为什么需要数组?您可以使用单个变量跟踪最小值。在递增
i
后,您错误地检查了
a[i]
。有关如何自己解决此类问题的一般提示:学习如何使用调试器。您不会得到错误,因为您有一个逻辑错误,而不是语法错误。如果在第31次销售机会之前不键入
0
作为输入,会发生什么情况?另外,请思考如何在不将值存储在数组中的情况下执行此操作。在学习如何编程之前,您应该学习如何有效地提问。在练习本中,我被要求将值存储在数组中。别怪我!!!在我错误地检查它之前,我一直在向I添加1个值。我有点粗心,也许一点也不粗心。@Er-Fun查看我的最新帖子。