c - 如何在不使用数组的情况下验证输入格式,例如输入“OIL2932”
问题描述
嗨,我很难以特定的方式阅读 C 中的用户输入...
我想读取用户输入,在这种情况下,我的程序将验证前三个字符为 characters ,最后四个数字为 digits。而且我不知道如何确保他们的输入总共是 7 个字符(3 个字符,4 个整数),例如:ULI0788。
我不想使用数组,例如 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 字符串的能力,上述内容仅限于简单地输入一系列字符,然后将它们视为离散项进行测试:
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;
}
推荐阅读
- ios - 如何在另一个viewController的tableViewCells中呈现保存在Realm中的数据?
- cypress - 点击后cypress记录多个url重定向
- python - Python:- 在 else 语句之后返回 None 并且不使用 else 有不同的效果吗?
- ios - UITableView 上的 Swift 信号 SIGABRT 错误
- java - Wiremock 录制——在录制模式下“即时”重写响应
- mysql - mysql中的ERROR 1064,任何人都可以检查错误是什么?
- vim - Vim:使用 errorformat 和 quickfix 时出现 E488 尾随字符错误
- c# - Call Python functions from C# in Visual Studio Python support VS 2017
- ruby-on-rails - Prawn::Errors::CannotFit Rails Make new line table
- javascript - AMP 中是否可以将 amp-user-notification 存储在 cookie 中?