Вы можете инициализировать элементы из выражений . Выражение - это кусочек кода, который что-то оценивает. Кусок кода, который является вызовом функции, оценивает то, что возвращает вызов функции.
scanf
не возвращает нужного значения, но количество успешно проанализированных аргументов (прочитайте документацию !) . Это не то, что вы хотите использовать. Затем вы попытались присвоить члену имя в слоте scanf
"Out Параметр", но это не работает, потому что (a) объект еще не существует, и (b) вы буквально собираетесь инициализировать член из другого значения, потому что (c) параметр out не влияет на то, что выражение вычисляет.
Короче говоря, это не может работать. Вы можете заключить вызов в новую особую функцию, которая возвращает то, что вам нужно:
#include <cstdio>
struct score {
int first;
int second;
};
int ReadANumber()
{
int number;
const int r = std::scanf("%d", &number);
if (r > 0 && r != EOF)
return number;
// some fallback, or you could throw an exception!
return -1;
}
int main() {
score p1 = { ReadANumber(), 0 };
printf("%d", p1.first);
}
Обратите внимание, что я также исправил ваш заголовок, удалил назначения в инициализаторе (странно; работает по непонятным причинам, но не делаю этого), исключил определение вашего класса и удалил using namespace std
как нам это не нравится.
& hellip; или придерживайтесь рабочего решения, которое у вас есть в ваших комментариях (хотя это исключает объявление p1
как const
!).