codeforces and EOF

Правка ru3, от I_love_to_eat, 2017-12-12 09:59:01

Я решала 320A - Magic Numbers и нашла такую странную штуку.

Это проходило норм:

char c = getchar();
while (c != EOF)
{
...
}

но мое решение давало мне WA1, при том, что первый тест замечательно проходил у меня на компьютере.

int main()
{
	char c = getchar();
	while (c != EOF)
	{
		if (c != '1')
		{
			cout << "NO";
			return 0;
		}

		while (c == '1')
			c = getchar();

		if (c == '4')
		{
			c = getchar();

			if (c == '1') {
				continue;
			} else if (c == '4'){
				c = getchar();
				continue;
			} else if (c == EOF) {
				break;
			} else {
				cout << "NO";
				return 0;
			}
		} else if (c == EOF) {
			break;
		} else {
			cout << "NO";
			return 0;
		}
	}

	cout << "YES";

	return 0;
}

Может быть надо было добавить знак переноса каретки после вывода? Не -- 33100199.

Я пронумеровала выводы, чтобы понять какой именно из них не работает: 33100283. Баг был во втором. EOF смотрелся подозрительно, мне почему-то показалось, что он может вылиться в undefined behaviour, так что я понадеялась, что тесты на кф заканчиваются на символ переноса каретки и зашло -- 33100350.

Но так или иначе, моя идея по поводу EOF -- это чистой воды предположение, гугление не дало каких-либо вразумительных результатов, может кто-нибудь может мне объяснить, что происходит?

Теги eof, undefined behaviour, c++

История

 
 
 
 
Правки
 
 
  Rev. Язык Кто Когда Δ Комментарий
ru3 Русский I_love_to_eat 2017-12-12 09:59:01 17 исправила опечатки
ru2 Русский I_love_to_eat 2017-12-11 14:51:52 1040
en1 Английский I_love_to_eat 2017-12-11 14:45:46 1343 Initial revision for English translation
ru1 Русский I_love_to_eat 2017-12-11 14:44:54 1343 Первая редакция (опубликовано)