Блог пользователя I_love_to_eat

Автор I_love_to_eat, история, 7 лет назад, По-русски

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

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

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

  • Проголосовать: нравится
  • +10
  • Проголосовать: не нравится

»
7 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Тесты действительно всегда заканчиваются на перенос строки.

Вы считываете этот символ после 4 и выводите NO (в первой версии решения)

Локально у вас работает, т.к вы вводите без этого переноса, наверно