gpt4 book ai didi

c - 如何在不使用数组的情况下验证输入格式,例如输入 "OIL2932"

转载 作者:行者123 更新时间:2023-12-05 08:48:11 25 4
gpt4 key购买 nike

您好,我很难以特定方式读取 C 中的用户输入...

我想读取用户输入,在这种情况下,我的程序将将前三个字符验证为字符,将后四位数字验证为数字。而且我不知道如何确保他们的输入是 总共 7 个字符(3 个字符,4 个整数)例如:ULI0788。

我不想使用数组,ex arr[12];

目前我正在学习内存分配和指针,因此鼓励我尽可能使用它而不是数组

例如

char itemID;
printf("Enter an ID of ITEM. (max 3 characters, 4 digits)");
scanf("%s", itemID);

我已经进行了一些谷歌搜索并尝试了用户建议,但没有一个能满足我的要求,即验证每个字符/数字并设置最多 7 个字符/数字。或者我只是不明白如何使用这些建议

googled
googled2
googled3
googled4
googled5
googled6
googled7
googled8
googled9
googled10

最佳答案

“我想读取用户输入,在这种情况下,我的程序会将前三个字符验证为字符,将后四位数字验证为数字。我不知道如何确保他们的输入是正确的总共 7 个字符(3 个字符,4 个整数)...我不想使用数组"

无法使用C strings ,上面的内容仅限于简单地输入一系列字符,然后将它们作为离散项进行处理和测试:

bool test7char(void)
{
int Char;

for(int i=0;i<7;i++)
{
Char = getc(stdin);
if(i<3)
{
if(!isalpha(Char)) return false;
}
else if(!isdigit(Char)) return false;
}
return true;
}

用法:

int main(void)
{
printf("Enter an ID of ITEM. (max 3 characters, 4 digits)");
while(!test7char())
{
printf("Mistake - Re-enter an ID of ITEM. (max 3 characters, 4 digits)");
}

return 0;
}

编辑 - “我只是想弄清楚如何使用内存分配和指针来回答我的问题”

使用指针:(在内存中,这个指针将指向一系列以\0结尾的字母数字字符,即一个字符串。)

#define STR_SIZE 7 + 1
BOOL test7char(const char *str);

int main(void)
{
char *str = calloc(STR_SIZE, 1);
if(str)
{
printf("Enter an ID of ITEM. (max 3 characters, 4 digits)");
if(fgets(str, STR_SIZE, stdin))
{
while(!test7char(str))
{
printf("\nMistake - Re-enter an ID of ITEM. (max 3 characters, 4 digits)");
if(!fgets(str, STR_SIZE, stdin))
{
//message user of error
break;
}
}
}
free(str);
}

return 0;
}

bool test7char(const char *str)
{
if(!str) return false;
if(strlen(str) != STR_SIZE -1) return false;

for(int i=0;i<7;i++)
{
if(i<3)
{
if(!isalpha(str[i])) return false;
}
else if(!isdigit(str[i])) return false;
}
return true;
}


关于c - 如何在不使用数组的情况下验证输入格式,例如输入 "OIL2932",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66315839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com