SNS 사진 앨범에서 "내가 가장 만난 결과물"이라는 제목으로이 두 문장을 발견했습니다. 그들이 일하는이상한 printf와 puts 설명문이
printf("%d%c", a, " \n"[i==n]);
puts("YES\0No"+condition * 4);
나는 그들이 무엇을하고 있는지 아무 생각도 없어 방법 : 여기
는 두 문장이다. 누군가 나에게 설명해 줄거야? 고맙습니다.SNS 사진 앨범에서 "내가 가장 만난 결과물"이라는 제목으로이 두 문장을 발견했습니다. 그들이 일하는이상한 printf와 puts 설명문이
printf("%d%c", a, " \n"[i==n]);
puts("YES\0No"+condition * 4);
나는 그들이 무엇을하고 있는지 아무 생각도 없어 방법 : 여기
는 두 문장이다. 누군가 나에게 설명해 줄거야? 고맙습니다." \n"[i==n]
는 평가 식 i==n
을 취하거나 0 또는 1로 설정하고 배열 " \n"
에 대한 인덱스로 사용하여 ' '
또는 '\n'
.
"YES\0N0"+condition * 4
이 포함 하나, 대부분의 표현에 사용했을 때의 첫 번째 요소에 대한 포인터 '감쇄'"YES\0N0"
배열을 취하고,이 포인터 condition * 4
를 추가한다. condition
이 1이면 "N0"
의 시작 부분에 'N'
에 대한 포인터가 생성됩니다.
i != n
인 경우 %d
뒤에 공백이 인쇄됩니다. 그렇지 않으면 줄 바꿈입니다.
// printf("%d%c", a, " \n"[i==n]);
// when i != n
printf("%d%c", a, " \n"[0]); // or
printf("%d%c", a, ' '); // or
printf("%d ", a); // or
// when i == n
printf("%d%c", a, " \n"[1]); // or
printf("%d%c", a, '\n'); // or
printf("%d\n", a); // or
숫자 구분 기호를 인쇄하는 흥미로운 방법은 for
루프에서 사용하는 것입니다. 조건이 1 인 경우 puts("YES\0N0"+condition * 4);
상태가 0 유사한
그것이 인쇄
puts("YES");`
, 그것은 인쇄
puts("N0");` // Thanks @ Jonathan Leffler
"* elegant *"이 보이지 않지만 난처한 코드 일뿐입니다. – alk
@alk 나는 그것을 설명하는 방법을 모른다. 그래서 나는 '우아한'이라는 단어를 골랐다. – laike9m
나는 실제로 당신의 질문의 제목을 언급하지 않았지만 당신이 인용 한 제목에 : "내가 만난 출력의 가장 우아한 방법 *" – alk