Я предоставил ссылку на PDF инструкции по назначению.
[TL; DR]
Задайте два вопроса: Вы боитесь темноты?Вы тренируетесь?
Ввод: 'Y' для да , 'N' для нет .
Если ввести в второй вопрос - это 'Y' , Один дополнительный вопрос: Использовано минут в день?
Ввод: Целое число> 0. Однако, если меньше 10 в день, неквалифицирован .
Вывод: Сообщает пользователю, могут ли они пройти обучение ниндзя или нет.
Что у меня возникают трудности с :
- Динамическое выделение многомерного строкового массива
Я кодирую только около недели, и я понимаю, что это назначение, вероятно, излишне.С учетом вышесказанного у меня возникла идея, выполняя это задание, и, хотя мне сложно сформулировать свою мысль словами, вот изображение, которое, как мне кажется, отражает то, что я «визуализирую».
Визуальное сообщение, опубликованное Стивом Саммитом https://www.eskimo.com/~scs/cclass/int/sx9b.html
В этом конкретном задании, я думаю, что это пустая трата памяти, чтобы сохранить ответ пользователя.Тем не менее, что если я захочу написать программу, которая запрашивает у пользователя ряд входных данных и в конце коррелирует их или создает ложные корреляции для lulz?
Ложные корреляции http://www.tylervigen.com/spurious-correlationsпо Тайлеру Вигену
Более практическая причина, однако, тест типа личности MBTI?Я не знаю точно всех возможностей, но они кажутся захватывающими.
Это то, чего я хочу достичь с помощью динамического выделения многомерного строкового массива
Буду обновлять позже
Исходное сообщение следует ...
Код работает, но некоторые входные данные все еще разрешены, а именно любые символы, введенные, если первый элемент - Y или N.
Вот код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char reference[][2] = { "Y", "N" };
char (*ptr_reference)[2] = reference;
int reference_minutes[1] = { 10 };
int *ptr_reference_minutes = reference_minutes;
char **user_input;
user_input = (char**)malloc(3 * sizeof(char*));
int i;
for (i = 0; i < 3; i++) {
user_input[i] = (char*)malloc(4 * sizeof(char));
}
if (!user_input) {
printf("Could not allocate memory!/n");
exit(1);
}
i = 0;
while (i == 0) {
printf("\nAre you afraid of the dark? Choose either [Y/N], and press enter when finished: \n");
fgets(user_input[i], 4, stdin);
user_input[i] = realloc(user_input[i], sizeof(char));
if (strncmp(user_input[i], *ptr_reference, 1) == 0) {
printf("\nPatience, Young Grasshoper! You are not ready to become a ninja.");
i = 3;
break;
} else if (strncmp(user_input[i], *(ptr_reference + 1), 1) == 0) {
i++;
break;
} else {
printf("\nPlease enter Y for yes or N for no.\n\n");
continue;
}
}
while (i == 1) {
printf("\nDo you exercise? Input [Y/N], and press enter when finished: \n");
fgets(user_input[i], 4, stdin);
if (strncmp(user_input[i], *ptr_reference, 1) == 0) {
i++;
break;
} else if (strncmp(user_input[i], *(ptr_reference + 1), 1) == 0) {
printf("\nDo you even lift, Bro?");
i = 3;
break;
} else {
printf("\nPlease enter Y for yes or N for no.\n\n");
continue;
}
}
while (i == 2) {
int sscanf_result, answer;
printf("\nHow many minutes a day do you exercise? Type an integer greater than 9 and press enter when finished.\n");
fgets(user_input[i], 4, stdin);
sscanf_result = sscanf(user_input[i], "%d", &answer);
if ((sscanf_result == 0) | (sscanf_result == EOF)) {
/* either a non-integer entered or an end-of-line */
printf ("\nYou have to enter an integer!\n");
i = 2;
continue;
} else if (answer < *ptr_reference_minutes) {
printf("\nCome on! You kids are soft! You lack discipline!\n");
i = 3;
break;
} else {
printf("\nYou are a good fit for ninja training.\n");
for (i = 0; i < 3; i++) {
free(user_input[i]);
}
free(user_input);
user_input = NULL;
break;
}
}
return 0;
}