170 похожих чатов

Я работаю над программой на C и у меня есть

функция ContinueOrStop, которая спрашивает у пользователя, хочет ли он продолжить. Функция должна считать один символ из ввода (0, Y, 1 или N). Однако я столкнулся с проблемой: после ввода пользователем функция, похоже, "зависает" или ожидает дополнительный ввод.


#include <stdio.h>

#include <stdlib.h>
void getInput(double *a,double *b);
void output(int a,int b );
void ContinueOrStop(char *yesOrNo);

int main(void) {
char YesOrNo = '0';
double a,b;
do {
getInput(&a,&b);
output(a,b);
ContinueOrStop(&YesOrNo);

}while(YesOrNo != '1');



return 0;
}





void getInput(double *a,double *b){
char YoN;
char *text;
double result;
char n1[256],n2[256];
do{
printf("Enter the number (integer) from which the interval will start:");
fgets(n1,sizeof n1,stdin);

result = strtod(n1,&text);

if (*text != '\n' && result != '\0'){
printf("You entered invalid input.||\tYou enter:%1.0lf in decimals||\tAnd enetered symbol: %s",result,text);
printf("Whoud you like to continiue with decimal numbers you entered and cut off symbols?\nOr you would like to enter new number\n");
printf("Enter 0 to enter new number || Enter 1 to keep suggested number:");
fgets(&YoN,sizeof YoN+1,stdin);
while(getchar() != '\n');
if (YoN == '1'){
*a = result;
break;
}
}else if (*text != '\n') {
printf("You entered invalid input\nYou entered symbols: %s",text);
} else {
*a = result;
break;
}

}while(1);

do{
printf("Enter the number (integer) from which the interval will start:");
fgets(n2,sizeof n2,stdin);

result = strtod(n2,&text);

if (*text != '\n' && result != '\0'){
printf("You entered invalid input.||\tYou enter:%1.0lf in decimals||\tAnd enetered symbol: %s",result,text);
printf("Whoud you like to continiue with decimal numbers you entered and cut off symbols?\nOr you would like to enter new number\n");
printf("Enter 0 to enter new number || Enter 1 to keep suggested number:");
fgets(&YoN,sizeof YoN+1,stdin);
while(getchar() != '\n');
if (YoN == '1'){
*b = result;
break;
}
}else if (*text != '\n') {
printf("You entered invalid input\nYou entered symbols: %s",text);
} else {
*b = result;
break;
}

}while(1);

}

void ContinueOrStop(char *yesOrNo) {
printf("Do you want to continue?\nYes- enter 0 or Y, No - Enter 1 or N:");

while(getchar() != '\n'); // <--- Добавленная строка, чтобы очистить буфер

while(scanf("%c",yesOrNo) != 1) {
while(getchar() != '\n');
printf("Inavalid input.Please enter new number:");
}

if (*yesOrNo == '1' || *yesOrNo == 'N'|| *yesOrNo == 'n'){
*yesOrNo = '1';
}
}

void output(int a,int b){
int i;
if (a < b) {
for (i = a;i <= b; i++){
if (i % 2 == 0){
printf("%d\t",i);
}
}
printf("\n");
} else if (a > b){
for (i = a;i >= b; i--){
if (i % 2 == 0){
printf("%d\t",i);
}
}
printf("\n");
}

}

6 ответов

56 просмотров

Отладчик, supapro и в путь

Женя- Автор вопроса

В @supapro, да и туда лучше такое не постить, есть pastebin

while(getchar() != '\n'); - не очищает буфер, если в нем ничего нет, а ждет, пока пользователь введет \n

Женя- Автор вопроса
Женя
убрал, начало работать

Оно в общем-то и так работало, просто не так, как вы ожидали. Нужно было просто дважды ввести, или первый ввод ограничить только переводом строки

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

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Народ, кто шарит в расширенных разделах (EBR/EPR) на дисках с разметками MBR? Везде пишут (в вики рус/англ) в частности + другие источники смотрел, что первый сектор расширенн...
Eugene Krasnikov (ᴊɪɴ x)
1
что насчет пагинга? на осдеве непонятно(
Vi Chapmann 🪙
26
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Карта сайта