gpt4 book ai didi

c - 验证长度为 11 并以 0 开头的整数

转载 作者:行者123 更新时间:2023-11-30 19:14:15 25 4
gpt4 key购买 nike

我正在尝试创建一个函数来验证手机输入,手机号码必须以 0 开头并且是 11 个数字(例如 01281220427。)

我想确保程序获得正确的条目。

这是我的尝试:

#include <stdio.h>
#include <strings.h>


void integerValidation(char x[15]);

int main(int argc, char **argv)
{
char mobile[15];
integerValidation(mobile);
printf("%s\n\n\n", mobile);
return 0;
}


void integerValidation(char x[15]){
char input[15];
long int num = -1;
char *cp, ch;
int n;
printf("Please enter a valid mobile number:");
while(num<0){
cp = fgets(input, sizeof(input), stdin);
if (cp == input) {
n = sscanf(input, "%ld %c", &num, &ch);
if (n!=1) {printf("ERROR! Please enter a valid mobile number:");
num = -1;
}
else if (num<0)
printf("ERROR! Please enter a valid mobile number:");
else if ((strlen(input)-1)>11 || (strlen(input)-1)<11 || strncmp(&input[0], "0", 1) != 0){
printf("ERROR! Please enter a valid mobile number:");
num = -1;
}
}
}

long int i;
i = strlen(input);
//Because when I try to print it out it prints a line after number.
strcpy(&input[i-1], "");
strcpy(x, input);

}

现在,如果我不使用

strcpy(&input[i-1], "");

数组在数字后打印一个新行,除了我的之外还有什么好的修复方法?我怎样才能优化这个函数并使其更短?

提前致谢!

编辑:我的问题是: 1.为什么输入数组最后打印一个新行?2. 如何使这段代码更短?编辑结束。

最佳答案

如果您坚持使用sscanf(),您应该这样更改格式:

int integerValidation(char x[15]) {
char input[15], c;

printf("Please enter a valid mobile number:");
while (fgets(input, sizeof(input), stdin)) {
if (sscanf(input, "%11[0123456789]%c", x, &c) == 2
&& x[0] == '0' && strlen(x) == 11 && c == '\n') {
// number stored in `x` is correct
return 1;
}
printf("ERROR! Please enter a valid mobile number:");
}
x[0] = '\0'; // no number was input, end of file reached
return 0;
}

%12[0123456789] 最多解析 11 个必须是数字的字符。%c 读取以下字符,该字符应该是尾随的 '\n'。我验证两种格式都已匹配,并且数字以 0 开头 (x[0] == '0'),并且恰好有 11 位数字。

关于c - 验证长度为 11 并以 0 开头的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34475949/

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