C语言编程问题:从键盘输入一行字符,判断这行字符是否是合法的e-mail地址。

2025-04-13 12:36:20
推荐回答(3个)
回答(1):

这样设计的程序不是要让用户一个字符一个符的输入?既不方便输入也不方便处理,建议在输入时让用户输入一个完整的email地址,
char email[255];%email地址不能超过255位.
scanf("%s",email);

然后再对email进行处理要方便很多.方法如下:
1)判断email中有没有@,如果没有直接返回出错;(这里写成一个独立的函数)
2)当有@时,将字符串以@分开,@之前为一个子串,之后为一个子串;(这里写成一个独立的函数)
3)判断@之前的子串中是否有一个字母;(写成一个独立的函数)
4)判断@之后的子串是否有dot,然后又以dot分开成两个字串,类似2)的处理,这样整程序的逻辑就清楚很多了.

回答(2):

#include
#define FALSE 0
#define TRUE 1

int main(){
char nextChar;
int gotChar=FALSE;
int gotAt=FALSE;
int gotChar2=FALSE;
int gotDot=FALSE;
int gotChar3=FALSE;

printf("Enter your string:");
do{
scanf("%c",&nextChar);
switch(nextChar)
{
case'@':
if(gotChar)
gotAt=TRUE;
gotChar=FALSE;
break;
case'.':
if(gotChar2)
gotDot=TRUE;
gotChar2=FALSE;
break;
default://将字符的判断放到最后,根据case的执行顺序,若不是@和。则执行,唯一的缺点是不能进行非法字符的判断。
if(gotAt){
gotChar2=TRUE;
gotAt=FALSE;
}
else if(gotDot){
gotChar3=TRUE;
gotDot=FALSE;
}
else
gotChar=TRUE;
break;
}
}while(nextChar!='\n');

if(gotChar3)
printf("It's an e-mail address.\n");
else
printf("It isn't an e-mail address\n");
}

我根据楼主的意思将你的代码改成这样了,应该能实现你自己最初的想法,但是一个好的验证程序,这一点点还是不够的,二楼的思想是对的,楼主可以继续试试换一个方式来实现。祝你好运。

回答(3):

case'%c':
case 后要求是常量啊