Я нашел код, который принимает входную строку и распечатывает ее.
Но я не знаю, что означает тильда перед сканфом.
Я обнаружил, что тильду можно использовать как для деструктора, так и для двоичного отрицания, но это не похоже на то и другое. И код не работает без тильды.
int main() {
char arr;
while (~scanf("%c", &arr)){
putchar(arr);
}
}
scanf
?? Вы уверены, что хотите использовать это? это фундамент языка c. Вместо этого вы можете использоватьstd::cin>>
. - person RC0993   schedule 27.04.2019scanf
.scanf
возвращает количество успешно просканированных значений илиEOF
, если он достигает конца файла.EOF
— это макрос, представляющий отрицательное значение. На большинстве платформ значениеEOF
равно(int) -1
. В этом случае, взяв дополнение 1 к-1
, значение будет равно0
и используется для выхода из цикла. (Хотел опубликовать это как ответ, но был помечен как дубликат слишком рано, чтобы я мог его напечатать) - person Mukul Gupta   schedule 27.04.2019scanf("%c", &arr) == 1
было бы намного легче читать. Учитывая, что ввод-вывод является фактическим узким местом этого кода, оптимизация почему-то бесполезна (даже если она работает (в чем я немного сомневаюсь, так как неудачныйscanf()
может вернуть 0 или EOF, и я не уверен, когда это произойдет). первое или второе)). - person Scheff's Cat   schedule 27.04.2019