2015-12-10 2 views
0

Я пытаюсь прочитать несколько ввода с клавиатуры и сохранить входные данные в переменных.C: множественный ввод с клавиатуры

snipet моего кода:

char answer = 'N'; 
int artnr; 
char artname [27]; 
int stock; 
double price; 

while (answer != 'Y') { 
printf("%s\n", "Enter article number:"); 
scanf("%d" , &artnr); 
printf("%s\n", "Enter article name:"); 
scanf("%c" , &artname); 
printf("%s\n", "Enter stock balance:"); 
scanf("%d" , &stock); 
printf("%s\n", "Enter a price"); 
scanf("%f" , &price); 
printf("%s\n", "Do you want to quit? (Y/N)"); 
scanf("%c" , &answer); 
} 

Выход:
Введите номер артикула:
Введите название статьи:
Введите фондовый баланс:
Enter a
Вы хотите бросить курить? (Y/N)
Введите номер товара:

Что-то похоже на неправильное сканирование. Я предполагаю, что это связано с «/ o» в названии статьи или когда я нажимаю enter, чтобы подтвердить свой ввод.

+0

scanf оставляет пробелы и новые строки в буфере. Flush stdin или попробуйте добавить такие пробелы, как: ''% d "', чтобы игнорировать их. – Samidamaru

ответ

0

artname - массив символов и «Введите название статьи:» предполагает, что вы действительно хотели сканировать строку. Таким образом, этот

scanf("%c" , &artname); 

, вероятно, должен быть

scanf("%s", artname); 

scanf() оставляет символ новой строки при сканировании с %c во входном буфере. Вы можете игнорировать его, добавив пробел в строке формата:

scanf("%c" , &answer); 

в

scanf(" %c" , &answer); // Notice the space in " %c" 

whitepsace в строке формата говорит scanf() игнорировать любое количество пробелов во входных данных.

и изменить

scanf("%f" , &price); 

в

scanf("%lf" , &price); 

для того, чтобы соответствовать строку формата с типом.