내 기능에이 문제가 있습니다.순서대로 실행되지 않는 기능이 제공되었습니다.
주요 기능 나는 2 개의 기능을 매개 변수로 취하는이 result(param, param)
기능이 있습니다.
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()
로 분석 연산자 +의 연관성에 왼쪽에서 오른쪽,하지만,하지만 내 프로그램은 항상을 실행f1()
또는 런타임에f2()
사이. **
F3에 함수 호출이 먼저 평가, 또는 할 수있다 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 ++ [calls first()를 먼저 호출] (http : //coliru.stacked-crooked) .com/a/e63c6a5157fedb98) – Cubbi