У меня есть эта проблема с моими функциями.Функции, не выполняемые в указанном порядке
в основной функции у меня есть эта функция result(param, param)
, которая принимает 2 функции в качестве параметров.
result(name(), score());
Однако, когда код выполняет функцию score()
выполняет первый и не функцию name()
. почему это происходит.
(также другая проблема, которая возникает из-за функции счет() выполняет первый и не функцию name()
является то, что я получаю \n
чтения и функция name()
пропускается в целом. Тем не менее, я знаю, как это исправить, что мне просто нужно знать почему не выполняется первая функция name()
.).
Я нашел это здесь: http://en.cppreference.com/w/cpp/language/eval_order.
Порядок оценки операндов любого оператора C++, в том числе порядок вычисления аргументов функции в выражении функции вызова, и порядок оценки подвыражениям внутри любого выражения не определено (за исключением случаев, указанных ниже). Компилятор будет оценивать их в любом порядке и может выбрать другой порядок, когда одно и то же выражение будет оценено снова.
В C++ отсутствует концепция оценки слева направо или справа налево, которая не следует путать с ассоциативностью операторов слева направо и справа налево: выражение
f1() + f2() + f3()
анализируется как(f1() + f2()) + f3()
из-налево-направо ассоциативности оператора +, но вызов функции f3 может быть оценен первым, последним, или междуf1()
илиf2()
во время выполнения. **
но моя программа всегда выполняет score()
функция первый. И выше это указывает, что это случайный, поэтому я должен по крайней мере иметь функцию name()
, выполняемую сначала иногда правильно?
Полный код приведен здесь для справки.
#include <iostream>
#include <string>
using namespace std;
string name()
{
string fname;
cout << "Please type your full name: ";
getline(cin, fname);
return fname;
}
int score()
{
int points;
cout << "Please type your score: ";
cin >> points;
return points;
}
void result(string fname, int points)
{
cout << "Ok " << fname << ", your score of " << points << " is ";
if (points > 100)
{
cout << "Impossible";
}
else if (points == 100)
{
cout << "Perfect!!!";
}
else if (points >= 85 && points < 100)
{
cout << "Amazing!!";
}
else if (points >= 70 && points < 85)
{
cout << "Good!";
}
else if (points >= 50 && points < 70)
{
cout << "Ok.";
}
else if (points < 50)
{
cout << "Bad...";
}
else
{
cout << "Incorrect input";
}
}
int main()
{
result(name(), score());
return 0;
}
На coliru, clang ++ [вызывает имя() сначала] (http://coliru.stacked-crooked.com/a/8491dfe97dc3a688) и g ++ [вызывает оценку() сначала] (http: //coliru.stacked-crooked .com/a/e63c6a5157fedb98) – Cubbi