Проверить является ли строка формата address@site.com - C (СИ)
Формулировка задачи:
помогите написать программу ,которая получает строки ,отделенные пробелами ,в качестве параметров командной строки. проверить является ли строка формата removed@mail.ru
Решение задачи: «Проверить является ли строка формата address@site.com»
textual
Листинг программы
#include <stdio.h>
typedef char shortstr_t[256];
int is_email(const char * str) {
shortstr_t name, host, domain;
return sscanf(str, "%255[^@]%*c%255[^.]%*c%255s", name, host, domain) == 3;
}
int main(int argc, char ** argv) {
while ( *(++argv) )
printf("%s is %svalid email\n", *argv, ( is_email(*argv) ) ? "" : "NOT ");
return 0;
}
Объяснение кода листинга программы
В данном коде:
- Создается структура типа
shortstr_t, которая представляет собой массив символов фиксированной длины (256). - Определяется функция
is_email, которая принимает строку форматаconst char * strи проверяет, соответствует ли она формату электронной почты. Для этого используется функцияsscanf, которая пытается считать из строки три поля: имя пользователя, хост и домен. Если все три поля успешно считаны, функция возвращает1, иначе возвращает0. - В функции
mainпроисходит следующий цикл: для каждого аргумента командной строки выводится сообщение о том, является ли он действительным адресом электронной почты. Список переменных и их значений: name,host,domain- массивы символов, которые используются для разбиения строки на поля при проверке адреса электронной почты.argv- указатель на массив аргументов командной строки.*argv- текущий аргумент командной строки.printf- функция вывода информации на экран.is_email- функция, проверяющая адрес электронной почты.sscanf- функция для чтения данных из строки по формату.1- возвращаемое значение функцииis_email, если адрес электронной почты действителен.0- возвращаемое значение функцииis_email, если адрес электронной почты недействителен.**argv- текущий аргумент командной строки, преобразованный в указатель на указатель.``` - символ, используемый для формирования строки в функцииprintf`.*argv- текущий аргумент командной строки.printf- функция вывода информации на экран.0- значение, которое возвращает функцияprintf, если происходит ошибка при попытке вывода на экран.1- значение, которое возвращает функцияprintf, если происходит успешный вывод на экран.NOT- строка, которая добавляется к сообщению об ошибке при выводе на экран.0- значение, которое возвращает функцияmain, если все аргументы являются действительными адресами электронной почты.return- оператор, который завершает выполнение функции и передает управление обратно вызывающей функции.0- значение, которое возвращает функцияmain, если хотя бы один из аргументов не является действительным адресом электронной почты.main- функция, в которой происходит основная логика программы.1- значение, которое возвращает функцияmain, если произошла ошибка при выполнении программы.0- значение, которое возвращает функцияmain, если программа выполнена успешно.