scanf пропуская позицию массива [дубликат]

Используя 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)

})
3
задан Jens 30 May 2013 в 11:56
поделиться

5 ответов

Это потому, что вы набираете w, а затем ENTER. Таким образом, на входе есть 2 символа, 'w', а затем новая строка (\n). Последнее приводит к тому, что ветвь else берется на второй итерации.

Обратите внимание, что стандартный вход буферизируется при подключении к терминалу. Если вам нужно немедленно обратиться к персонажам, есть способы сделать это. Подробнее см. В comp.lang.c FAQ («Как я могу прочитать один символ с клавиатуры, не дожидаясь клавиши RETURN? Как я могу остановить отображение символов на экране, re typed? ").

Обратите внимание, что для надежного программирования необходимо проверить возвращаемое значение scanf. Он возвращает количество успешно преобразованных элементов. Как показано, ваш код не обрабатывает случай с конечным файлом правильно, т. Е. Когда пользователь набирает Ctrl-D (при условии, что терминал Unix). Затем scanf возвращает EOF, и преобразование не выполнялось, но вы используете test, как если бы оно содержало значимое значение.

8
ответ дан Jens 5 September 2018 в 09:51
поделиться

Как говорит Йенс, вы должны потреблять '\n', использовать getchar() после scanf()

0
ответ дан Keine Lust 5 September 2018 в 09:51
поделиться

, как сказал Йенс. вы должны игнорировать новую строку '\n'

Добавление пробела в начале спецификатора формата " %c" будет игнорировать новую строку '\n'

scanf(" %c", &test);

Используя " %c" также будет отображать другие белые пробелы, такие как \t space \b \v \r

2
ответ дан MOHAMED 5 September 2018 в 09:51
поделиться

Вам нужно сделать что-то вроде

     scanf("%c", &test);
     while(getchar()!='\n');

scanf принимает ввод до места или \n (в зависимости от того, что наступит раньше) и оставляет \n в буфере

0
ответ дан Suvarna Pattayil 5 September 2018 в 09:51
поделиться

просто любопытно, что вы пробуете это на окнах? вы можете попробовать flushall ();

0
ответ дан W A K A L E Y 5 September 2018 в 09:51
поделиться
Другие вопросы по тегам:

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