首页 > 解决方案 > 检查我输入的电子邮件地址中是否有“@”

问题描述

@我尝试检查我输入的字符串中有多少。问题是我在“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");
        }
    }
}

标签: c

解决方案


代码中有多个错误:

  • 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;
    

但是请注意,拒绝无效电子邮件可能值得进行更多检查:不@应该先出现,也不应该最后出现,并且应该有一个@. 地址和域名都有进一步的限制。


推荐阅读