Входные данные в цикле

0

Я хочу ввести данные по формату "% d:% c"

У меня есть это:

#include <stdio.h>

int main() {
    int number;
    char letter;
    int i;

    for(i = 0; i < 3; i ++) {
        scanf("%c:%d", &letter, &number);
        printf("%c:%d\n", letter, number);
    }
}

Я ожидаю этого:

Input: "a:1"
Output: "a:1"
Input: "b:2"
Output: "b:2"
Input: "c:3"
Output: "c:3"

Но моя программа делает что-то вроде этого:

a:1
a:1
b:2

:1
b:2

--------------------------------
Process exited with return value 0
Press any key to continue . . .

В чем проблема?

  • 1
    Вы пытаетесь добавить \n в свой файл scanf ?
  • 1
    изменить на " %c:%d"
Теги:

3 ответа

6

Потому что, когда вы читаете ввод с помощью scanf, символ Enter все еще остается в буфере, поэтому ваш следующий вызов scanf будет scanf его символом.

Это легко разрешимо, если scanf чтобы пропустить пробелы, добавив одно пробел в код формата, например

scanf(" %c:%d", &letter, &number);
/*     ^                */
/*     |                */
/* Notice leading space */
  • 0
    спасибо за Ваш ответ!
0

OP говорит "... входные данные по формату"% d:% c ", но код использует "%c:%d" а для ввода данных подразумевается" char ", а затем" number ".

Предлагать:

1) Определите желаемый порядок.

2) Используйте пробел перед "%c" как в " %c" чтобы использовать начальные пробелы, как предыдущая строка Enter (или '\n').

0

эта ссылка может быть полезна. использование% c после% d в функции scanf() приводит вас к такой сложности.

Короче говоря, ввод "\n" после ввода номера ввода первого тестового примера будет принят в качестве символьного ввода второго тестового примера.

чтобы вы не могли редактировать свои команды scanf как scanf(" %c:%d",...); , Ведущее пространство перед% c позволяет избежать ввода всех этих "\n" входов в качестве символов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню