2016-08-24 2 views
-3

У меня есть эта проблема с моей визуальной студией 2015 года. Ошибка возникает в 15-й строке. Внезапно говорится, что я не инициализировал переменную, я не знаю, как ее инициализировать.C4700 неинициализированная локальная переменная «number2» и «number3»

// Average.cpp. : Defines the entry point for the console application. 

#include "stdafx.h" 
#include <iostream> 
#include <math.h> 
#include <stdio.h> 
using namespace std; 

int main() 
{ 
    int number1, number2, number3; 
    double average; 
    cout << "Enter three integers and I will display the average" << endl; 
    cin >> number1, number2, number3; 
    average = (number1 + number2 + number3)/3.0; 
    cout << "The average is" << average << endl; 

    return 0; 
} 
+4

Параметр '' оператор не делает то, что вы думаете! – drescherjm

+1

Проблема в строке перед: 'cin >> number1, number2, number3;'. 'number2' и' number3' не инициализируются, потому что они анализируются как отдельные операторы. Вместо этого используйте 'cin >> number1 >> number2 >> number3;'. Голосование закрывается как простая опечатка. – owacoder

+1

Инициализация переменной: 'int x = 0;'. Инициализация двух: 'int x = 0; int y = 0; '(лучше) или' int x = 0, y = 0; '(более склонны к ошибке и менее очевидны). Это очевидным образом обобщает более чем на две переменные. (Это описано во введении к переменным в книге, в которую вы должны инвестировать.) – molbdnilo

ответ

3

Эта линия не делать то, что вы ожидаете, что делать:

cin >> number1, number2, number3; 

Вы, вероятно, хотел прочитать 3 номера из cin, это делается следующим образом:

cin >> number1 >> number2 >> number3; 

В текущей форме оно оценивается как

(cin >> number1), number2, number3; 

Результат этого выражения: number3, который не инициализирован в вашей программе. number2 является частью выражения, также не инициализированным, поэтому компилятор также предупреждает об этом, хотя значение отбрасывается.

1

Оператор запятая разделяет выражения в C++ и присоединяется к ним в большую выражении, так что оператор cin >> number1, number2, number3 прочитал бы выражение number1, number2, number3 от cin эквивалентно (cin >> number1), number2, number3, который не имеет особого смысла, и это, конечно, не то, что вы хотели делать.

Попробуйте cin >> number1 >> number2 >> number3 вместо этого.

Это одна из тех странных «особенностей» C++, с которой язык был бы намного лучше.

+0

Это не обязательно * игнорировать * остальное. На самом деле это не так, поскольку это приводит к ошибке. 'number2' и' number3' будут оцениваться, и поскольку они не инициализированы, вы получите ошибку компилятора. – Rakete1111

+0

@ Rakete1111 Мне непонятно, из исходного сообщения, но вы уверены, что это ошибка, а не предупреждение? –

+0

VS2015 сообщает об ошибке, я не знаю про другие компиляторы – Rakete1111

0

Как уже упоминалось, это должно работать:

#include <iostream> 

using namespace std; 

int main() 
{ 
    // ... 
    cin >> number1 >> number2 >> number3; // here is the fix 

    // ... 
    cout << "The average is" << average << endl; // same as you did here 

    return 0; 
} 
+0

Вы должны знать лучше, что ответить или нет пока! –

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