2017-10-15 13 views
0

次のコードは、10月17日の予定宿題です。この問題には、「一連の番号を入力できるループを持つプログラムを作成します。すべての数値が入力された後、入力された最大値と最小値が表示されます。C++の行の読み込みを停止できません

#include "stdafx.h" 
#include <algorithm> 
#include <array> 
#include <iostream> 
#include <string> 
#include <sstream> 
#include <vector> 

using namespace std; 

bool isNumeric(string aString) 
{ 
    double n; 
    istringstream is; 
    cin >> aString; 
    is.str(aString); 
    is >> n; 
    if (is.fail()) 
    { 
     return false; 
    } 
    return true; 
} 

vector<double> limits(vector<double> a) 
{ 
    // Returns [min, max] of an array of numbers; has 
    // to be done using std::vectors since functions 
    // cannot return arrays. 
    vector<double> res; 
    double mn = a[0]; 
    double mx = a[0]; 
    for (unsigned int i = 0; i < a.size(); ++i) 
    { 
     if (mn > a[i]) 
     { 
      mn = a[i]; 
     } 
     if (mx < a[i]) 
     { 
      mx = a[i]; 
     } 
    } 
    res.push_back(mn); 
    res.push_back(mx); 
    return res; 
} 

int main() 
{ 
    string line = " "; 
    vector<string> lines; 
    vector<double> arr; 
    cout << "Enter your numbers: " << endl; 
    while (!line.empty() && isNumeric(line)) 
    { 
     getline(cin >> ws, line); 
     if (line.empty() || !isNumeric(line)) 
     { 
      break; 
     } 
     lines.push_back(line); 
     transform(line.begin(), line.end(), line.begin(), [](char32_t ch) { 
      return (ch == ' ' ? '\000' : ch); 
     }); // Remove all spaces 
     arr.push_back(atof(line.c_str())); 
    } 
    vector<double> l = limits(arr); 
    cout << "\nMinimum: " << l[0] << "\nMaximum: " << l[1] << endl; 
    return 0; 
} 

上記のコードは私が持っているものです。しかし、必ずしも正しい最大値を出力するとは限らず、最小値として「0」しか出力しません。私はこのことが間違っているのを見いだすことができないので、誰かがそれを助けることができれば偉大になるでしょう。

+1

あなたはすぐに2つの新しいことをしようとしています。それらに取り組んでください*と、あなたが助けを必要とするものを教えてください。 – Beta

+0

問題は1つだけです。今幸せです?! –

+0

入力ルーチンが動作していて、min/maxの計算に問題がある場合は、より簡単なテストプログラムをハードコードされた入力で作成し、質問に入れてください。あなたの問題が入力ルーチンがうまくいかない場合、それが何をしているのか、何が間違っているのかを記述します。 –

答えて

0

少なくとも、limits()関数では、minの値を0に初期化するという問題があるようです。したがって、[1、2、3、4]の配列を持つ場合、各要素をチェックし、0未満でないことを確認して、0を最小値のままにします。これを修正するには、初期値のmnを配列の最初の要素に設定します。オーバーフローエラーを避けるために配列に少なくとも1つの要素があることを確認する必要があります。

最大限、どのような矛盾があるのか​​よく分かりませんが、配列に負の値しか含まれていない場合は、最小値と同じ問題が発生します。実際の値

+0

OKを説明してくれてありがとう。最初の部分をしました。 –

+0

@ElEctric、あなたはまだ最大値に対して悪い値を得ていますか?もしそうなら、あなたは事例を提供できますか? –

関連する問題