0

如果我已经将大小设置为 20,如何找到用户输入的数字

strlen只会给我20

以及如何将其放入else if循环for

这是一个检查用户输入的 10 位数字是否有效的程序

#include<stdio.h>

int validateString(char *inStr);
int main()
{
    char stringInput[20];
    printf("Please enter a 10 digit phone number: ");
    scanf("%s",stringInput);
    if (validateString(stringInput)== 1)
    {
        printf("%s is a valid phone number.\n",stringInput);
    }
    else if (validateString(stringInput)== 0)
    {
        printf("%s is not a valid phone number.\n",stringInput);
    }

int validateString(char *inStr)
{
    int i;



    for (i=0;i<length;i++)
    {
        if(!(inStr[i] == '0' ||
             inStr[i] == '1' ||
             inStr[i] == '2' ||
             inStr[i] == '3' ||
             inStr[i] == '4' || 
             inStr[i] == '5' ||
             inStr[i] == '6' ||
             inStr[i] == '7' ||
             inStr[i] == '8' ||
             inStr[i] == '9' ||
             inStr[i] == ' ' ))
        {
            return 0;
        }
        else if ( //the input string is longer than 10 or less than 10)
        {
            return 0;
        }
        else
        {
            return 1;
        }
    }

}
4

1 回答 1

0

strlen应该可以正常获取长度(位数),您只需要确保行尾以 0 终止。如果输入在末尾附加回车符或换行符,则只需将这些值替换为 0 .

int main ()
{
    char x[20];
    x[0] = '1';
    x[1] = '2';
    x[2] = '\n';
    x[3] = 0;

    printf("%d\n", strlen(x));
}

上面的代码显示3

如果我用 0 替换索引 2,那么我会得到正确的计数 2。

strlen不给你一个数组的总长度,它给你一个以 0 结尾的字符串的长度。

您也不需要检查每个字符,您可以这样做:

if(!(inStr[i] >= '0' && inStr[i] <= '9') || inStr[1] != ' ')
{
    return 0;
}

我也会把功能分开一点:

int validDigits(char *inStr)
{
    for (int i=0;i<strlen(inStr);i++)
    {
        if(!(inStr[i] >= '0' && inStr[i] <= '9') || inStr[1] != ' ')
        {
            return 0;
        }
    }
    return 1;
}

int validateString(char *inStr)
{
   return (validDigits(inStr) && strlen(inStr) == 10);
}

但是,请记住将任何回车和换行符(10 和 13)替换为零,否则 strlen 将返回比预期更高的数字。

于 2013-11-13T11:33:22.950 回答