Я знаю, что этот вопрос уже задавался, и мне жаль, но я не могу найти решение для своего кода. Я новичок в языке C, и моя проблема в том, что я пытаюсь создать цикл while, который постоянно просит пользователя обновить данные, если они вводят не целые числа. Я изучил функцию isdigit()
и думаю, что это сработает. Я просто не могу заставить его работать для моего кода, так как всякий раз, когда я пытаюсь создать цикл while
с isdigit
в качестве условия, я либо получаю бесконечный цикл, либо мой isdigit
возвращает значения, которые я использовалне ожидая. Я думаю, что проблема может заключаться в том, что мой scanf()
сканирует три целых числа, разделенных символом '/', но я не уверен, в этом ли проблема. Любая помощь будет оценена.
Вот код вопроса
#include <stdio.h>
#include <ctype.h>
int calcAge(int a, int b, int c, int d, int e, int f);
int maxHeart(int a);
int heartRangeLow(int a);
int heartRangeHigh(int a);
int main(void) {
int birthMonth = 0, birthDay = 0, birthYear = 0, targetRangeLow = 0;
int month = 0, day = 0, year = 0, age = 0, heartRate = 0, targetRangeHigh = 0;
printf("What is your birthday?(written in MM/DD/YYYY)"
"\nHit Enter after you type it in.\n");
scanf_s("%d/%d/%d", &birthMonth, &birthDay, &birthYear);
printf("What is the date today?(written as MM/DD/YYYY)"
"\nHit Enter after you type it in.\n");
scanf_s("%d/%d/%d", &month, &day, &year);
age = calcAge(birthMonth, birthYear, birthDay, month, day, year);
heartRate = maxHeart(age);
targetRangeLow = heartRangeLow(heartRate);
targetRangeHigh = heartRangeHigh(heartRate);
printf("You are %d years old.\n", age);
printf("Your maximum heart rate is %d beats per minute.\n", heartRate);
printf("Your target-heart-range is %d"
" to %d beats per minute.\n", targetRangeLow, targetRangeHigh);
system("pause");
return 0;
}
int calcAge(int a, int b, int c, int d, int e, int f)
{
int age;
age = ((f * 10000 + d * 100 + e) - (b * 10000 + a * 100 + c)) * .0001;
return age;
}
int maxHeart(int a)
{
int heartRateMax;
heartRateMax = 220 - a;
return heartRateMax;
}
int heartRangeLow(int a)
{
int lowTarget = a * .5;
return lowTarget;
}
int heartRangeHigh(int a)
{
int highTarget = a * .85;
return highTarget;
}