gpt4 book ai didi

c - isdigit() 有效电话号码的输入测试

转载 作者:行者123 更新时间:2023-12-02 08:14:55 24 4
gpt4 key购买 nike

我想创建一个算法来检查用户是否输入了有效的电话号码(仅限数字)。该程序应不断提示用户输入电话号码,直到它是严格的数字。我想出了以下内容。

程序限制:必须使用 malloc(realloc 可以),phoneNum 必须是指针而不是数组,do-while 是必需的。

    int main (void)
{
int i, flag;
char* phoneNum;
phoneNum = NULL;
phoneNum = malloc(sizeof(char));
do{
printf("Phone Number: ");
fgets(phoneNum, sizeof(phoneNum) * 10, stdin);
phoneNum[strcspn(phoneNum, "\n")] = 0;
flag = 1;
for (i = 0; i < strlen(phoneNum); i++){
if(isdigit(phoneNum[i]) == 0){
flag = 0;
break;
}
}
} while (flag == 1);

printf("Valid Number: %s", phoneNum);

return 0;
}

但是,isdigit 似乎不起作用,我不确定问题出在哪里。任何帮助,将不胜感激。这是当前/预期的输出。没有编译问题。

当前输出:

Phone Number: 12345678
Valid Number: 12345678

Phone Number: abcdefg
Valid Number: abcdefg

Phone Number: 1234abcd
Valid Number: 1234abcd

预期输出:

Phone Number: 12345
Valid Number: 12345

Phone Number: abcdefg
Phone Number: hijklmn
Phone Number: 123456
Valid Number: 123456

感谢所有帮助我提出以下解决方案的用户,如果您遇到这个问题,这里就是解决方案。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

int main (void)
{
int i, flag;
char* phoneNum;

phoneNum = malloc(11);
if (phoneNum == NULL){
printf("Not Enough Memory!\n");
}
do{
printf("Phone Number: ");
fgets(phoneNum, 11, stdin);
printf("<You entered: %s>\n", phoneNum); //check to see if program received user input.
phoneNum[strcspn(phoneNum, "\n")] = 0;
flag = 1;
for (i = 0; i < strlen(phoneNum); i++){
if(isdigit(phoneNum[i]) == 0){
flag = 0;
break;
}
}
} while (flag == 0);

printf("Valid Number: %s", phoneNum);
free(phoneNum);
return 0;
}

最佳答案

首要的问题是,你分配内存使用

 phoneNum = malloc(sizeof(char));

然后,甚至不检查分配是否成功,在接受输入时,您使用

 fgets(phoneNum, sizeof(phoneNum) * 10, stdin);

这明显是内存溢出。这导致 undefined behavior .

如果您以后不想realloc(),您需要提供通过malloc() 分配的所需内存的确切大小。

另外,请记住,在使用 fgets() 扫描输入时,您需要自己处理结尾的换行符。


也就是说,根据您的要求,您的逻辑似乎是错误的。一旦用户输入全数字(正确),就应该停止循环,否则继续循环。因此,您需要将逻辑更改为

  • 将标志初始化为0
  • 如果找到非数字,将标志设置为1。 (你已经在做)
  • 基于flag == 1 的循环(您已经在做)

See a modified version online

关于c - isdigit() 有效电话号码的输入测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42863991/

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