https://icpcarchive.ecs.baylor.edu/external/65/6536.pdf

황현

내 컴에선 잘 되는데 submit하면 런타임 에러가 뿜뿜! 왜일까~요?
#include <stdio.h>

#define NULL_B    0x00
#define BACKSPACE 0x08
#define NEWLINE   0x0A

#define ECHO(c)                                 \
	do {                                    \
		if(c == NEWLINE) {              \
			buffer[bi] = NULL_B;    \
			bi = 0;                 \
			printf("%s\n", buffer); \
		} else if(c == BACKSPACE) {     \
			--bi;                   \
		} else                          \
			buffer[bi++] = c;       \
	} while(0);
#define ECHO_C ECHO(c)


int main() {
	int T, i;
	char buffer[(10 * 1024) + 1] = { 0, };

	scanf("%d", &T);
	for (i = 0; i < T; ++i) {
		int l = 0, ll;
		int ft = 0, fx = 0, fs = 0, fe = 0;
		int bi = 0;

		printf("Case #%d:\n", i + 1);

		int p;
		while (1) {
			int c = getc(stdin);
			switch (c) {
			case '<':
				if (fx == 1) {
					ECHO(NEWLINE);
					for (ll = 0; ll < l; ++ll)
						ECHO(' ');
				}
				++l;
				ft = 1;
				ECHO_C;
				break;
			case '/':
				if (ft == 1) {
					l -= 2;
					fx = 0;
				}
				if (p == '<') {
					ECHO(BACKSPACE);
					ECHO(BACKSPACE);
					ECHO('<');
				}
				ECHO_C;
				break;
			case '>':
				if (p == '/') {
					++l;
					fx = 1;
				}
				ft = 0;
				ECHO_C;
				ECHO(NEWLINE);
				for (ll = 0; ll < l; ++ll)
					ECHO(' ');
				if (l == 0)
					fe = 1;
				break;
			case NEWLINE:
				if (fx == 1) {
					fs = 1;
					ECHO(' ');
				}
				break;
			case ' ':
				if (fs == 1)
					break;
				ECHO_C;
				break;
			default:
				if (p == '>')
					fx = 1;
				ECHO_C;
				break;
			}
			if (c != NEWLINE)
				p = c;
			if (fe == 1)
				break;
		}
	}

	return 0;
}
Retrieved from http://wiki.zeropage.org/wiki.php/ACM_ICPC/Problems/6536
last modified 2021-02-07 05:22:21