Это:
scanf("%d %d"+scanf("%d %d",&i,&j));
Ужасный код! Но что происходит?
Сначала вызывается внутренний scanf. Он сохраняет 1 и 2 в i
и j
соответственно (должно быть понятно, почему это так). Затем он возвращает 2, потому что это количество вещей, которые он сохранил. Затем он «пропускает» первые два символа оператора формата внешнего scanf, делая его " %d"
. Затем scanf хочет сохранить 3
из входных данных где-нибудь, но во внешнем вызове scanf не было указано указателя на переменную. Так что же будет дальше? Это неопределенное поведение, но фактический факт заключается в том, что второй (внешний) вызов scanf просто повторно использует (или топает, если хотите) аргументы, передаваемые первому (внутреннему) scanf. Итак, 3 хранится в i
, и все.