Добрый вечер, участники форума!
На этот раз передо мной задача написать небольшую записную книжку на Си.
В принципе я знаю, как писать, вот только в процессе уже напоролся на пару трудностей.
Вопрос первый: сам ввод происходит в формате Имя_Фамилия_Телефон
(_ - это пробел)и когда мы вводим из консоли эти данные для записи, как строчку, мы должны проверить соответствие
этому формату. Как это лучше всего реализовать? Понятно, что в строке два пробела. И дважды символ предшествует пробелу. Но ведь еще надо проверить, что бы в имени\фамилии были только буквы, а в телефоне - цифры. Вот здесь что-то не выходит. Ругается и выдает
expression (unsigned)(c+1) <= 256. Объясните в чем дело, пожалуйста.
#include <stdio.h>
#include <ctype.h>
#define BUFF 200
int deepcheck(char *str)
{
while(*str!=' ')
{
if(isdigit(*str))
return 1;
str++;
}
return 0;
}
int iscorrect(char *str) //Легкая проверка введенных данных(Имя/Фамилия)
{
int spc=2; //счетчик пробелов
int wdc=2; //слов
while(*str)
{
if(*str == ' ')
--spc;
++str;
if(*str != ' ' && *(str+1) == ' ')
--wdc;
}
if(spc)
return 0; //Должно быть два пробела
if(wdc)
return 0; //Правильная последовательность
if(deepcheck(str))
return 0;
return 1; //Формат выдержан
}
int main(void)
{
FILE *MyBook;
char *s = malloc(BUFF * sizeof(char));
if((MyBook = fopen("MyBook.txt", "w")) == NULL)
printf("Writing MyBook.txt error");
/////////////////ВВОД В КОНСОЛЬ/////////////////
printf("MyBook 1.0\nPlease, input data(Name_Surname_Telephone) \n");
printf("English language is used(!) \n");
////////////////////////////////////////////////
do{
gets(s); //Получаем Имя/Фамилию
if(!iscorrect(s))
printf("Wrong input. \n");
}while(!iscorrect(s));
fputs(s, MyBook);
fclose(MyBook);
return 0;
}