c - 检查我输入的电子邮件地址中是否有“@”
问题描述
@
我尝试检查我输入的字符串中有多少。问题是我在“int c=0”时打印了“c”,但“c”是输出中的随机整数。如何检查@
我输入的电子邮件地址中是否只有一个?
typedef struct The_users {
char id[20];
char pwd[20];
char name[20];
char email[20];
} users;
//register system
void registers() {
users a, b;
FILE* fp;
char temp[20];
int count = 0;
if (fp = fopen("users.txt", "r") == NULL) {
fp = fopen("users.txt", "w");
fclose(fp);
}
fp = fopen("users.txt", "r");
fread(&b, sizeof(struct The_users), 1, fp);
while (1) {
printf("Please enter your email:\n");
gets(a.email);
int c = 0;
for (int i = 0; i < 20; i++) {
if (a.email[i] == "@") {
c++;
}
}
if (c == 1) {
break;
} else {
printf("----------------------------------------------\n");
printf("Not a correct email address! Please try again!\n");
printf("----------------------------------------------\n");
}
}
}
解决方案
代码中有多个错误:
if (fp = fopen("users.txt", "r") == NULL)
:中缺少括号fp
接收与 的返回值进行比较的fopen
结果NULL
。你想要这个:if ((fp = fopen("users.txt", "r")) == NULL)
你的文件真的有与读取调用兼容的格式
fread(&b, sizeof(struct The_users), 1, fp);
吗?将信息作为文本存储在单独的行中更为常见。您循环检查结构内部数组中是否存在
@
应该email
可以工作,尽管您可能应该在空终止符处停止并使该数组更长。然后你可以简单地写:c = strchr(a.email, '@') != NULL;
但是请注意,拒绝无效电子邮件可能值得进行更多检查:不@
应该先出现,也不应该最后出现,并且应该有一个@
. 地址和域名都有进一步的限制。
推荐阅读
- android - Firebase realtime database security rules
- magento2 - Magento 2.3.4 尺寸样本显示为可销售数量为 0 的产品
- reactjs - 为什么我第一次在 React 中单击提交时我的状态没有改变或工作
- acumatica - 如何专注于抛出异常的领域?
- javascript - 每个用户的游戏未定义,即使它不应该是
- raspberry-pi - 在 Raspberry Pi 2 上安装 Alpine Linux 与 root 密码斗争
- c# - 实体框架核心计算属性多表
- php - PHP 电子邮件提交
- javascript - 在网页中播放分成多个文件的音频
- c++ - 如何使用 c++ 在 code::blocks 中显示带有 "\033[1;90m" 之类的字符串的颜色?