注册 登录
编程论坛 C++教室

代码通过编译,但是运行不了,

peng880610 发布于 2017-08-16 21:38, 2629 次点击
#include <iostream>
const int Max = 5;
double * fill_array( double * begin,  double * end);
void show_array(const double * begin, const double * end);
void revalue(double r, double * begin, double * end);

using namespace std;
int main()
{
    double str[Max];
    double * strp = fill_array(str, str+Max);
    show_array(str, strp+1);
    if (*strp > 0)
    {
        cout << "Enter revaluation factor: ";
        double factor;
        while (!(cin >> factor))
        {
            cin.clear();
            while (cin.get() != '\n')
                continue;
            cout << "Bad input; Please enter a number: ";
        }
        revalue(factor, str, strp+1);
        show_array(str, strp+1);
    }
    cout << "Done!\n";
    return 0;
}
double * fill_array( double * begin,  double * end)
{
     double * pb;int i;
    for (pb = begin,i = 0; pb != end; pb++,i++)
    {
        int temp;
cout << "Enter value # " << i+1 << ": ";
        cin >> temp;
        if (!cin)
        {
            cin.clear();
            while (cin.get() != '\n')
                continue;
            break;
        }
        else if (temp < 0)
            break;
        *pb = temp;
    }
    return pb;
}

void show_array(const double * begin, const double * end)
{
    const double * pb;
    for (pb = begin; begin != end; pb++)
    {
        cout << *pb << endl;
    }
}
void revalue(double r, double * begin, double * end)
{
    double * pb;
    for (pb = begin; pb != end; pb++)
        *pb = *pb * r;
}
大神帮忙看看!
7 回复
#2
rjsp2017-08-17 16:10
起码你要告诉别人 要实现什么功能你输入的数据实际输出数据你期待的输出数据
比如
输入: 1 2 -1 3
输出:运行时错误
期待输出: 3 6

程序代码:
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
#include <limits>
using namespace std;

template<typename T> bool input_from_console( T& value )
{
    while( !(cin>>value) )
    {
        if( cin.eof() )
            return false;
        cin.clear();
        cin.ignore( std::numeric_limits<streamsize>::max(), '\n' );
    }
    return true;
}

int main( void )
{
    typedef double valuetype;

    std::vector<valuetype> va;
    for( ; ; )
    {
        cout << "Enter value # " << (va.size()+1) << ": ";
        valuetype value;
        if( !input_from_console(value) )
            return 1;
        if( value < 0 )
            break;
        va.push_back( value );
    }

    double factor;
    cout << "Enter revaluation factor: ";
    if( !input_from_console(factor) )
        return 1;

    cout << "raw data:\n";
    std::copy( va.begin(), va.end(), std::ostream_iterator<valuetype>(cout,"\n") );

    std::for_each( va.begin(), va.end(), [=](auto& e){e*=factor;} );

    cout << "processed data:\n";
    std::copy( va.begin(), va.end(), std::ostream_iterator<valuetype>(cout,"\n") );
}

运行结果
Enter value # 1: 1
Enter value # 2: 2
Enter value # 3: 3
Enter value # 4: 4
Enter value # 5: 5
Enter value # 6: 6
Enter value # 7: -1
Enter revaluation factor: 2
raw data:
1
2
3
4
5
6
processed data:
2
4
6
8
10
12

#3
peng8806102017-08-17 18:10
回复 2楼 rjsp
对对,是我疏忽了!
这本来是书上的一个练习题,有三个函数应用于这个程序。
第一个函数是:接收用户输入的数据,并保存到一个数组。返回数组元素的个数。
第二个函数是:显示数组元素。
第三个函数是:加了一个参数,用于改变原数组数据;

题目要求:把这些函数的参数,改成使用两个指针参数来表示区间。
第一个函数返回也改成,返回一个指向最后被填充的位置的指针。
上诉代码运行之后,可以按要求输入数据,但是结束输入的时候,程序就崩溃了。
#4
yangfrancis2017-08-17 22:01
第一个函数是:接收用户输入的数据,并保存到一个数组。返回数组元素的个数。
你不是想返回个数吗?咋会是个double*类型的返回值?或者我没有把你的意思理解对?
#5
yangfrancis2017-08-17 22:03
局部定义的指针没法返回到函数体外去。像fill_array那种情况。
#6
peng8806102017-08-17 22:47
回复 5楼 yangfrancis
那我这个函数应该怎样改?可能返回这块出问题了,但不知道怎么改?
我需要函数返回的是一个指针,该指针指向最后输入的哪个元素。
#7
周志远2017-08-17 22:47
最下面两个函数for循环里对指针赋值之后,加个if判断,是否指针值不是NULL,试试
#8
peng8806102017-08-17 23:41
我调试了下,是这个函数有问题,但不知道问题在哪?
void show_array(const double * begin, const double * end)
{
    const double * pb;
    for (pb = begin; begin != end; pb++)
        cout << *pb << endl;  这行代码是问题代码,求解,错在哪里,我要显示这个数组的元素。
}
1