codeforces and EOF

Revision ru2, by I_love_to_eat, 2017-12-11 14:51:52

Я решала 320A - Волшебные числа и нашла такую странную штуку.

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

char c = getchar();
while (c != '\n')
{
...
}

но мое решение давало мне 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 -- это чистой воды предположение, гугление не надо каких-либо вразумительных результатов, может кто-нибудь может мне объяснить, что происходит?

Tags eof, undefined behaviour, c++

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
ru3 Russian I_love_to_eat 2017-12-12 09:59:01 17 исправила опечатки
ru2 Russian I_love_to_eat 2017-12-11 14:51:52 1040
en1 English I_love_to_eat 2017-12-11 14:45:46 1343 Initial revision for English translation
ru1 Russian I_love_to_eat 2017-12-11 14:44:54 1343 Первая редакция (опубликовано)