Добрый день!
Пожалуйста, посмотрите небольшую программу. Я новичок, поэтому прошу снисходительности и помощи.
Задание было следующее: предположим, что количество воды, затраченное в течение одной минуты, проведенной под душем, эквивалентно 12 бутылкам воды. Цель программы запросить пользователя ввести количество минут, которые он/она проводит в душе и выдать количество бутылок воды.
Используются допущения: не проверять на положительные - отрицательные числа (правда я знак добавила). Если вводятся числа, то программа выдает количество бутылок. Если вводится слово (например, foo или 123abc), то программа должна снова ожидать ввод данных.
С последним у меня проблема. Если вводится foo или 123abc, то программа выдает 0. То есть с одной стороны, неверные значения не принимаются, но и запрос на новый ввод тоже не происходит. Вот тест:
reject "foo" minutes
\ expected prompt for input, not exit code of 0
rejects "123abc" minutes
\ expected prompt for input, not exit code of 0
#include <stdio.h>
#include <ctype.h>
#define MAX 5000
#define BOTTLES_PER_MINUTE 12
int minutes[MAX];
void get_minutes(int minutes[]);
int char_to_digit(int minutes[]);
int main(void)
{
printf("Please, enter the number of minutes\n");
get_minutes(minutes);
printf("%d\n", (char_to_digit(minutes) * BOTTLES_PER_MINUTE));
return 0;
}
/* get minutes from the user, fill in the array */
void get_minutes(int minutes[])
{
int i = 0;
int c;
while (!isspace(c = getchar()))
{
if (isalpha(c))
{
continue;
}
else
{
minutes[i] = c;
i++;
}
}
minutes[i] = '\0';
}
/*convert input into digits */
int char_to_digit(int minutes[])
{
int i = 0;
int n, sign;
sign = (minutes[i] == '-')? -1: 1;
if (minutes[i] == '-' || minutes[i] == '+')
{
i++;
}
for (n = 0; minutes[i] != '\0'; i++)
{
n = 10 * n + (minutes[i] - '0');
}
return sign * n;
}
Перемещено beastie из general