【问题标题】:My output under main is not what I am expecting我在 main 下的输出不是我所期望的
【发布时间】:2014-02-12 04:07:00
【问题描述】:

我的任务是编写一个程序,询问用户他/她想输入多少个整数。动态创建数组并接受用户的数字并将它们放入 数组。将数组传递给函数以确定输入的最小数字。打印 最小的数。在适当或可能的情况下使用指针表示法。

我觉得我掌握了数组的传递和指针表示法(请随时纠正我,因为我总是渴望学习)但是 main 函数下的输出不是我所期望的,或者可能是我应该期待并且没有意识到这一点。这是我到目前为止所拥有的,但我坚持让它输出用户输入数组中的最小值。

#include "stdafx.h"

void CreateValues (int [], int);
int FindSmallest(int [], int);

int _tmain(int argc, _TCHAR* argv[])
{
int numValues = 0;


cout << "How many values would you like to enter?" << endl;
cin >> numValues;

int *pArray = new int[numValues];

CreateValues (pArray, numValues);

FindSmallest(pArray, numValues);

delete[] pArray;

int i = 0;
i = FindSmallest(pArray, sizeof(pArray)/sizeof(pArray[0]));
cout<<"The smallest number in the array is "<<(*pArray + i)<<endl;
system("pause");
return 0;
}

void CreateValues (int pArray[], int numValues)
{
for (int i = 0; i < numValues; i++)
{
    cout << "Please enter value #" << i+1<< endl;
    cin >> *(pArray+i);
}
}

int FindSmallest(int pArray[], int numValues)
{

int index = 0;
int x = sizeof(pArray);
for (int i = 0; i < numValues; i++)
{
    if (pArray[i] < pArray[index])
    {

            index = i;
    }

}
return index;
}

我们将不胜感激任何可以提供的帮助。干杯!!

【问题讨论】:

  • 很明显,您调用FindSmallest() 而不保存结果,然后删除数组,然后再次调用FindSmallest()(在现在删除的数组上)。您可能应该坚持使用数组而不是尝试进行指针运算...
  • 你的输入输出是什么?你期待什么?
  • sizeof(pArray)/sizeof(pArray[0]) 也是错误的......你不能将它应用于指针(因为第一个 sizeof 返回指针的大小,而不是指向数据的大小,并且有无法修复使用sizeof,因为大小仅在运行时设置)。继续使用numValues

标签: c++ arrays visual-c++


【解决方案1】:

这个:

FindSmallest(pArray, numValues);

delete[] pArray;

int i = 0;
i = FindSmallest(pArray, sizeof(pArray)/sizeof(pArray[0]));

应该是这样的:

int i = 0;
i = FindSmallest(pArray, numValues);
delete [] pArray;

或者,缩短一点:

int i = FindSmallest(pArray, numValues);
delete [] pArray;

我希望你能明白为什么在删除数组之前必须找到最小值。

另外,sizeof(pArray)/sizeof(pArray[0]) 是一个只适用于静态分配数组的技巧。

【讨论】:

    【解决方案2】:

    请使用此代码:

    int i = 0;
    i = FindSmallest(pArray, numValues);
    cout<<"The smallest number in the array is "<<*(pArray + i)<<endl;
    

    sizeof(pArray)/sizeof(pArray[0])是错误的,因为pArray是指针,所以不能取元素号。

    【讨论】:

      【解决方案3】:

      首先,当你稍后使用pArray 时,你为什么要delete[] pArray

      i = FindSmallest(pArray, sizeof(pArray)/sizeof(pArray[0]));
      

      其次,您之前的@​​987654324@ 已经完成了寻找最小值的工作,因此提到的i = FindSmallest(...) 是重复/丰富的。此外,您应该声明一个int 来捕获FindSmallest() 的返回值。

      int min = FindSmallest(pArray, numValues);
      cout << "The smallest value is: " << pArray[min];
      delete[] pArray;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-25
        • 2020-07-27
        • 2020-03-04
        • 2023-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多