Используя ES2017, вы должны иметь это как объявление функции
async function foo() {
var response = await $.ajax({url: '...'})
return response;
}
и выполнить его следующим образом.
(async function() {
try {
var result = await foo()
console.log(result)
} catch (e) {}
})()
Или синтаксис Promise
foo().then(response => {
console.log(response)
}).catch(error => {
console.log(error)
})
Это потому, что вы набираете w, а затем ENTER. Таким образом, на входе есть 2 символа, 'w'
, а затем новая строка (\n
). Последнее приводит к тому, что ветвь else
берется на второй итерации.
Обратите внимание, что стандартный вход буферизируется при подключении к терминалу. Если вам нужно немедленно обратиться к персонажам, есть способы сделать это. Подробнее см. В comp.lang.c FAQ («Как я могу прочитать один символ с клавиатуры, не дожидаясь клавиши RETURN? Как я могу остановить отображение символов на экране, re typed? ").
Обратите внимание, что для надежного программирования необходимо проверить возвращаемое значение scanf
. Он возвращает количество успешно преобразованных элементов. Как показано, ваш код не обрабатывает случай с конечным файлом правильно, т. Е. Когда пользователь набирает Ctrl-D (при условии, что терминал Unix). Затем scanf возвращает EOF
, и преобразование не выполнялось, но вы используете test
, как если бы оно содержало значимое значение.
Как говорит Йенс, вы должны потреблять '\n'
, использовать getchar()
после scanf()
, как сказал Йенс. вы должны игнорировать новую строку '\n'
Добавление пробела в начале спецификатора формата " %c"
будет игнорировать новую строку '\n'
scanf(" %c", &test);
Используя " %c"
также будет отображать другие белые пробелы, такие как \t
space
\b
\v
\r
Вам нужно сделать что-то вроде
scanf("%c", &test);
while(getchar()!='\n');
scanf принимает ввод до места или \n
(в зависимости от того, что наступит раньше) и оставляет \n
в буфере
просто любопытно, что вы пробуете это на окнах? вы можете попробовать flushall ();