Вопрос Noob здесь, но я учу себя C и пытаюсь понять ввод пользователя безопасным, правильным способом (для справки это упражнение с массивом кода Морзе в Учебном руководстве по программированию GNU C на 10.6 (58-59) и15.5.5 (107)).
Мой желаемый поток программ:
- запросить пользователя для одной цифры
- получить ввод пользователя
- проверить ввод пользователя
- , если допустимый элемент массива правильной печати
Проблема в том, что если пользователь просто вводит жесткий возврат, функция чтения массива считывает и печатает из my_array [0].Я не могу понять, как заставить возврат завершиться неудачей проверки.
в основном:
if (get_line (digit_input, sizeof (digit_input), stdin) != NULL ) {
if (validate (digit_input) == 0) {
digit = atoi (digit_input);
printf("\nThe Morse code for %d is: ", digit);
morse(digit);
}
get_line и проверки функций:
char *get_line(char *s, size_t n, FILE *f) {
unsigned int last;
char *p = fgets (s, n, f);
if (p != NULL) {
last = (strlen(s) - 1);
if (s[last] == '\n') s[last] = '\0';
}
return p;
}
int validate(char *a) {
unsigned x;
for (x = 0; x < strlen(a); x++)
if ( !isdigit(a[x]) || (a[1] != '\0' )) return -1;
return 0;
}
Как я могу сделать недействительным ввод?(т. е. если строка читает \ n \ 0?) И почему входные данные без символов (т. е. \ n) превращаются в 0 и передаются в функцию чтения массива?
Спасибо всем за помощь!