2016-10-19 2 views
0

Итак, у меня есть это упражнение, мне нужно спросить у пользователя 2 входа (оценки> 0 < 10), а затем мне нужно распечатать среднее значение, а затем спросить пользователя, хотят ли они вставлять больше оценок 1 -yes 2-no; если он равен 1, программа снова запускается, если это 2, программа завершает работу. Но у меня проблемы с выходом программы.Главная не возвращается 0

// ConsoleApplication7.cpp : Defines the entry point for the console application. 
// 
#include <iostream> 
#include "stdafx.h" 

int main() 
{ 
    using namespace std; 
    float n1; 
    float n2; 
    cin >> n1; 
    cin >> n2; 
    if ((n1 || n2) > 10) { 
     cout << "Wrong grade"; 
    } 
    else if ((n1 || n2) < 0) { 
     cout << "Wrong grade"; 
    } 
    else { 
     cout << "The grade average is " << (n1 + n2)/2 << endl; 
     cout << "Do you want to insert more grades ? " << endl; 
     int g; 
     cin >> g; 
     if (g = 1) { 
      main(); 
     } 
     else if (g = 2) { 
      return 0; 
     } 
    } 
    return 0; 
}  
+2

Используйте 'while' цикл вместо вызова' main() 'еще раз. –

+2

опечатки. 'g = 1' и' g = 2'. Они должны быть 'g == 1' и' g == 2'. –

+3

Невозможно называть 'main' в C++. Ваша программа недействительна. Используйте цикл. – molbdnilo

ответ

5

Проблема заключается в том, чтобы проверить на равенство вам нужно два =, а не один, так что ваши две проверки фактически присваивая значения g не по сравнению с g

if (g == 1) { 
     main(); 
    } 
    else if (g == 2) { 
     return 0; 
    } 

Любой современный компилятор должен дать вам предупреждение компилятора о это присвоение. Вы всегда должны стараться обратить внимание на предупреждения компилятора.

Кроме того, ваша логика

if ((n1 || n2) > 10) 

и

else if ((n1 || n2) < 0) 

неверен, но я оставлю его вам, чтобы выяснить, что это неправильно (это домашнее задание Afterall).

Наконец, вы можете захотеть заняться циклом do-while вместо того, чтобы снова звонить main().

+0

Переназначен для того, чтобы сначала поставить константу. – Gwen

+1

Downvoted по той же причине - это приносит больше вреда, чем помогает – Slava

+0

@ Славная правда? Пожалуйста, дайте мне пример того, где это причиняет вред, потому что я не могу думать ни о чем. –

1

Ваше if состояние является неправильным:

if (g = 1) 

наборы g к 1, и всегда верно. То, что вы хотите сделать, это:

if (g == 1) 

И как сказал Скотт в своем комментарии, вы не должны называть основными, а скорее использовать while петли.

0

Пожалуйста, ознакомьтесь с этими изменениями.

float n1; 
float n2; 
int g = 1; 
while (g != 2) 
{ 
    cout << "Please enter two grades: " << endl; 
    cin >> n1; 
    cin >> n2; 
    if ((n1 || n2) > 10) { 
     cout << "Wrong grade"; 
    } 
    else if ((n1 || n2) < 0) { 
     cout << "Wrong grade"; 
    } 
    else { 
     cout << "The grade average is " << (n1 + n2)/2 << endl; 
     cout << "Do you want to insert more grades ? " << endl; 
     cin >> g; 
    } 
} 
return 0; 

}

отметить также, что я переехал с помощью пространства имен за пределами главной.

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