如何检查输入是否为字母?我必须只接受字母和中间名字的1点。我该怎么办?
这是我的代码:
void name_check()
{
printf(LEV3"Name:\t");
int y=0;
if ((fgets(name[i], LEN, stdin))==0)
{
y = atoi(name[i]);
if((isalpha(y))!=0)
{
}
else
{
printf(LEV3"ERROR: Invalid Name. Name should consist of letters only.\n");
name_check();
printf("\n");
}
}
}
帮助?
答案 0 :(得分:0)
您可以使用以下代码:
int j=0;
if ((fgets(name[i], LEN, stdin))==0)
{
// y = atoi(name[i]);
while( j<strlen(name[i]) && (isalpha(name[i][j]) || name[i][j]=='.'))
j++;
if(j==strlen(name[i]));
{
//....
}
else
{
printf(LEV3"ERROR: Invalid Name. Name should consist of letters only.\n");
name_check();
printf("\n");
}
}
答案 1 :(得分:0)
使用fgets()
和sscanf()
进行阅读解析。
char buffer[300];
if (fgets(buffer, sizeof(buffer), stdin) == NULL) {
printf("EOF\n"); // TBD handle EOF or I/O error
}
else {
char First[100];
char Middle[100];
char Dot[2];
char Last[100];
int n;
n = sscanf(buffer, " %99[A-Za-z] %98[A-Za-z]%1[. ] %99[A-Za-z]", First, Middle, Dot, Last);
if (4 != n) {
printf("Oops %d\n", n); // TBD handle syntax error
}
if (Dot[0] == '.')
strcat(Middle, Dot);
printf("%s %s %s\n", First, Middle, Last);
}