2015-12-29 5 views
0

Я относительный новичок с C++, и в настоящее время я учу, как выполнять функции. Недавно я получил следующее упражнение:Случайные числа на выходе

#include <iostream> 
#include <string> 
using namespace std; 

int main(int argc, char* argv[]) 
{ 
    int a,sum=0; 
    cout<<"Enter a number:"; 
    cin>>a; 

    int func(int x); 
    sum=func (a); 

    cout<<"\n"<<sum; 
} 

int func(int a) 
{ 
    int x; 
    for (int i=0; i<=a; i++) 
    { 
     x+=i; 
    } 
    return x;  
} 

Я уже дал ИНТ основной части коды заранее, что мне нужно сделать, чтобы завершить int func части так что код будет выполняться должным образом. Если я запустил этот код, я просто получу некоторые случайные числа. То, что должно делать func, - это вернуть сумму всех натуральных чисел, ограниченных числом, вмененным пользователем. Не могли бы вы рассказать мне, как мне изменить этот код, чтобы он работал правильно? Спасибо за любую обратную связь!

ответ

5

Ошибка:

int x не инициализируется так это приведет к undefined behavior, а x предоставит вам случайное значение вместо правильной суммы.

Возможное решение:

Перед тем, как сделать любое приращение к переменной x, Инициализировать его с нуля, чтобы гарантировать, что он будет содержать только те значения, которые вы хотите сохранить.

Обновленный код:

int func(int a) 
{ 
    int x = 0; //updated statement 

    for (int i=0; i<=a; i++) 
    { 
     x+=i; 
    } 
    return x;  
} 

Надеется, что это помогает.

+0

Большое спасибо Итбан. Проблема была решена, как только я добавил «= 0». Очень неудачная ошибка с моей стороны за то, что она не заметила ошибку в коде. Независимо от того, что я комплимент, как вы структурировали решение, он очень ясен и краток. – Noir

+0

Добро пожаловать @Noir :) Я просто попытался предоставить четкое решение –

1

int x не инициализирован. Это приводит к неопределенному поведению (вот почему вы получили случайные числа). Вы должны инициализировать его, используя один из тех, кто:

int x=0; 
int x(0); 
int x{0}; 
+2

int x {0}; // Это утверждение возможно только из C++ 11. Также он не позволит сузить. –

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