функция 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");
}
}
Отладчик, supapro и в путь
Не понимаю
В @supapro, да и туда лучше такое не постить, есть pastebin
while(getchar() != '\n'); - не очищает буфер, если в нем ничего нет, а ждет, пока пользователь введет \n
убрал, начало работать
Оно в общем-то и так работало, просто не так, как вы ожидали. Нужно было просто дважды ввести, или первый ввод ограничить только переводом строки
Обсуждают сегодня