2012-06-15 2 views
1

Я новичок в C++ и стараюсь сделать две простые функции, но что-то не так.Простая программа с 2 функциями не работает

Я пытаюсь сделать следующее:

1.Function for input some data. 
2.Function to show what data is input. 

Я просто хочу, чтобы сделать его простым. Код, который я написал до сих пор:

#include <iostream> 
void masiv() 
{ 
    int x[10]; 
    int n, i; 
    int min; 
    int max=0, imax=0, imin; 

    cout << "Enter the number of elements: "; 
    cin >> n; 

    for(i=0; i < n; i++) 
    { 
     cout << "Input value for x["<<i<<"]="; 
     cin >> x[i]; 

    if (min > x[i]) 
    { 
     min = x [i]; 
     imin = i; 
    } 

    if (max < x[i]) 
    { 
    max = x[i]; 
    imax = i; 
    } 
} 
void rezult() 
{ 
    cout << "the smallest value on is xthe biggest value on is x["<<imin<<"]=" << min <<endl; 
    cout << "nai golqmata stoinost e na x["<<imax<<"]=" << max <<endl; 
} 
void main() 
{ 
    masiv(); 
    rezult(); 
} 

У меня есть куча ошибок. Я знаю, что это плохой код, но, как я уже говорил, я только начинаю. Thanks

P.s. Извините за мой английский

Редактировать: Работа с этим кодом.

#include <iostream> 
using namespace std; 

void masiv(int& min, int&max) 
{ 
int x[10]; 
int n; 
int i; 
int imin, imax; 
cout << "Enter the number of elements: "; 
cin >> n; 
for(i=0; i < n; i++) 
{ 
    cout << "Input value for x["<<i<<"]="; 
    cin >> x[i]; 
    if(min > x[i]) 
    { 
    min = x [i]; 
    imin = i; 
    } 
    if(max < x[i]) 
    { 
    max = x[i]; 
    imax = i; 
    } 
} 
} 

void rezult(int min, int max) 
{ 
cout << "the smallest value on is x= " << min << endl; 
cout << "the biggest value on is x= " << max << endl; 
system ("pause"); 
} 

int main(int argc, char** argv) 
{ 
int min = 999999; 
int max = -999999; 
masiv(min,max); 
rezult(min,max); 
return 0; 
} 
+0

1. Вы не инициализировали 'min'. 2. 'rezult' не будет знать о переменных, которые вы создаете внутри другой функции, если вы не передадите их. 3. Не используйте' void main'. Используйте 'int main'. 4. Что, если они введут число больше 10 для количества элементов? Там хорошо вписывается вектор. – chris

+0

Перед тем, как манипулировать переменными, вам нужно изучить объем переменных. –

ответ

6

Минимальная переменная никогда не инициализируется, она должна быть инициализирована большим значением.

Вы объявляете массив int x[10];, но позже вы позволяете пользователю вводить число значений cin>>n, не проверяя, больше ли оно 10 или отрицательно. Это может вызвать проблему.

Макс и мин объявлены только в функции masiv(), они не могут быть достигнуты вне функции. Если вы хотите, чтобы сделать их доступными вы могли бы, например, передать их функции вместо того, чтобы объявить их внутри функции:

void masiv(int& min, int&max) // pass by reference 
{...} 

void rezult(int min, int max) 
{...} 

int main(int argc, char** argv) // proper main prototype 
{ 
    int min = 999999; 
    int max = -999999; 
    masiv(min,max); 
    rezult(min,max); 
    return 0; 
} 

редактирования: и добавить с помощью патезрасе; при запуске файла

#include <iostream> 
using namespace std; 
+2

Я бы пошел с 'INT_MAX' или' std :: numeric_limits' за 999999. Это хорошая привычка. – chris

+1

@chris 'std :: numeric_limits ' - ассер может не знать достаточно о шаблонах, чтобы вывести добавление '' – moshbear

+1

Да, я еще не знаю о шаблонах. Я думал, что проблема - это что-то с глобальными и локальными переменными. @Андеры теперь все чувствуют. Спасибо за ваш ответ и за всех остальных. Я приму свой ответ и постараюсь сделать это. –

-3

Прежде всего, все ваши переменные локально определены в функции massiv(), сделайте глобальным первым.

+2

Пожалуйста, сделайте их глобальными не решение. Чтобы работать с этим кодом, сделайте первую функцию «min», «max», «imin» и «imax» по ссылке, а вторая функция примет их по значению. Затем создайте эти 4 в 'main'. Реальная проблема, однако, в том, что функция выполняет работу более чем одной функции. Он должен быть разделен. – chris

+0

@chris: Парень, который задал этот вопрос, был новичком и постепенно понимал концепции. Не принимайте это близко к сердцу. –

+0

, но он будет работать, если мы сделаем его глобальным, нет никакого вреда. – dpanshu

2

По крайней мере, вы должны квалифицироваться пространство имен для cout, cin и endl, все из которых находятся в пространстве имен std.

Что касается проблем, связанных с локально-контекстные переменные, я хотел бы изменить подпись masiv вернуть std::pair<int,int>, содержащий минимальное и максимальное значения:

typedef std::pair<int,int> MinMax; 

MinMax massiv() { .... } 

Почему ни пройти min и max по ссылке? потому что вы зависите от значений переданных ссылок. Вам нужно будет проверить, являются ли они разумными и так далее. Возврат минимума и максимума из самой функции ставит функцию в полный контроль.

-3

вам Imin, мин, IMAX и максимум должен сделать глобальный для функции rezult() для доступа к ним.

+0

Нет причин для того, чтобы они были глобальными. – GManNickG

2

Вам нужно подумать о потоке данных здесь.

Ваша основная функция выполняет две функции, но как данные выходят из массивной функции или в функцию результата?

Вы можете использовать глобалам, или вы можете иметь ваши основные структурированы больше как:

void main() 
{ 
    int x[10]; 
    massiv(x); 
    rezult(x); 
} 

Функция rezult должна быть обработка результатов по х и для заполнения минимального и максимального переменных. Переместите утверждения if из массива для повтора.

+0

'rezult' действительно? Уверен, что янки тоже не испортили это слово, его даже не озвучили звуком «z» – thecoshman

+0

, это не так «результат» вместо «результата», –

Смежные вопросы