Функция scanf(), не считывает данные - C (СИ)
Формулировка задачи:
Вот перед вами кусок кода, это функция которая возвращает true или false
проблема в том, что при запуске 2ой функции, первый шаг в функции ask() считаеться не верным, как бы перескакивает scanf() и в итоге нет подходящего значения в switch() тем самым отображается оповещение что нет такого значение. Либо так как мне нужно 2 раза вызвать эту функцию, считываеться только вторая, я не могу понять почему так происходит. Я пробовал добавить ещё один scanf(), пашет, т.е только для 1 ого метода, а просто так уже использовать, нет, будет 2 запроса) Обьясните )
bool ask(char *text)
{
char choice;
while(1)
{
printf("\n> %s? : ", text);
scanf("%c", &choice);
switch(toupper(choice))
{
case 'Y':
return true;
case 'N':
return false;
default:
printf("\n> Please choose only Y or N\n");
break;
}
}
}
она используеться в другой функции
while(1)
{
printf("\n< Choice : ");
scanf("%c", &choice);
switch(choice)
{
case '1': new_item(i, "item", 0, 5.0, ask("smth"), ask("smth")); break;
case '9': break;
default: printf("\n> Wrong option\n"); break;
}
}Решение задачи: «Функция scanf(), не считывает данные»
textual
Листинг программы
char * str = (char *)malloc(sizeof(char));//начальное выделение под 1 символ str = (char *)realloc((void *)str,NewCharCount*sizeof(char));//Изменяем память по NewCharCount символов
Объяснение кода листинга программы
- Объявлена переменная типа char* с именем
str, которая изначально указывает на блок памяти размером 1 символ. - Выполняется операция приведения типа
(char *)malloc(sizeof(char)), в результате которой выделяется память под 1 символ. - Выполняется операция приведения типа
(char *)realloc((void *)str,NewCharCount*sizeof(char)), в результате которой изменяется размер блока памяти, начиная с указателяstr, на NewCharCount символов.