标题:代码通过编译,但是运行不了,
只看楼主
peng880610
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:128
专家分:123
注 册:2017-3-29
结帖率:100%
已结贴  问题点数:20 回复次数:7 
代码通过编译,但是运行不了,
#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;
}
大神帮忙看看!
搜索更多相关主题的帖子: double begin end cin pb 
2017-08-16 21:38
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:7 
起码你要告诉别人 要实现什么功能你输入的数据实际输出数据你期待的输出数据
比如
输入: 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

2017-08-17 16:10
peng880610
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:128
专家分:123
注 册:2017-3-29
得分:0 
回复 2楼 rjsp
对对,是我疏忽了!
这本来是书上的一个练习题,有三个函数应用于这个程序。
第一个函数是:接收用户输入的数据,并保存到一个数组。返回数组元素的个数。
第二个函数是:显示数组元素。
第三个函数是:加了一个参数,用于改变原数组数据;

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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-480104-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.162514 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved