Для повторения цикла дважды в входах сканирования [дубликат]

== сравнивает ссылки на объекты в Java и не является исключением для объектов String.

Для сравнения фактического содержимого объектов (в том числе String) необходимо использовать equals.

Если сравнение двух объектов String с использованием == оказывается true, это связано с тем, что объекты String были интернированы, а виртуальная машина Java имеет несколько ссылки указывают на тот же экземпляр String. Не следует ожидать сравнения одного объекта String, содержащего то же содержимое, что и другой объект String, используя == для оценки как true.

49
задан Peter Mortensen 18 October 2017 в 17:53
поделиться

3 ответа

Функция scanf() автоматически удаляет пробелы, прежде чем пытаться проанализировать преобразования, отличные от символов. Исключение составляют форматы символов (в основном %c, а также наборы сканирования %[…] - и %n); они не удаляют пробелы.

Используйте " %c" с ведущим пробелом, чтобы пропустить дополнительное пустое пространство. Не используйте конечную заготовку в строке формата scanf().

Обратите внимание, что это все еще не потребляет никаких конечных пробелов, оставшихся во входном потоке, даже до конца строки, поэтому остерегайтесь что если также использовать getchar() или fgets() в том же входном потоке. Мы просто получаем scanf, чтобы пропускать пробелы до , например, для %d и других несимвольных преобразований.


Обратите внимание, что не-пробелы " директивы "(использовать терминологию POSIX scanf ), отличную от преобразований, например, буквальный текст в scanf("order = %d", &order); также не пропускает пробелы. Литерал order должен соответствовать следующему символу, который нужно прочитать.

Итак, вы, вероятно, захотите " order = %d" там, если хотите пропустить новую строку из предыдущей строки, но по-прежнему требуется литеральное совпадение на фиксированном string, как этот вопрос .

43
ответ дан Peter Cordes 16 August 2018 в 00:53
поделиться

Используйте scanf(" %c", &c2);. Это решит вашу проблему.

23
ответ дан Peter Mortensen 16 August 2018 в 00:53
поделиться

Используйте getchar() перед вызовом второго scanf().

scanf("%c", &c1);
getchar();  // <== remove newline
scanf("%c", &c2);
0
ответ дан 최지원 16 August 2018 в 00:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: