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 ответов

40 просмотров

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

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

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

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

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

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

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

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

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Почему стало ломаться на D11? "739002.86400000' is not a valid timestamp" function IncDateTime(aStamp:TTimeStamp;aKind:TTriggerKind;aInterval:Integer):TDateTime; //aStamp = 2...
Катерина Свиридова
8
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Есть ли смысл устраиваться на 1с ? Даст это плюс в дальнейшем трудоустройстве на php? Просто у меня в городе вакансий на пхп нету. Или лучше удаленно искать. Опыта работы нету...
Azamat
14
Не ну фпц - это уже просто троллинг какой-то. Элементарный код нельзя собрать. ЧЯДНТ? program Project1; {$mode delphi} uses SysUtils, Classes, Generics.Collections; var...
Peter
4
а где есть mysql cloud кроме яндекс-клауд?
Oleg Nosov
13
hi im a cs student. i need some advice from people who have enough experience in Embedded Software. I need to know whether this profession is suitable for me. I have watched s...
Sahand 🏔️
8
А кто-нибудь запихивал сборку перловых модулей/образов с perl приложениями в окружения без интернета (в специализированном CI/CD)? У меня сейчас есть ряд cpanfile, которые н...
Andrey Smirnov / 𝓪𝓵𝓵𝓽𝓮𝓻 /
14
Карта сайта