2014-01-05 4 views
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 . . . 

Что такое probl здесь?

+1

Do вы пытаетесь добавить '\ n' в свой' scanf'? – Jarod42

+1

изменить на ''% c:% d "' – BLUEPIXY

ответ

6

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

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

scanf(" %c:%d", &letter, &number); 
/* ^    */ 
/*  |    */ 
/* Notice leading space */ 
+0

спасибо за ваш ответ! – user3162304

0

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

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

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

0

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

Предлагайте:.

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

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

Смежные вопросы