如何确保我的输入字符串只有字符&是10个字母还是更少?

时间:2015-10-02 05:10:24

标签: c

我正在为编码编写代码而我正在尝试错误检查这段代码,以便当用户给出输入字符串时,如果它超过10个字符或包含数字,它将循环直到给出有效输入。 (有效期为10个字符或更少。)这是我到目前为止所拥有的。我目前在拍摄STRING部分时遇到了麻烦。 (STRING定义为10)

#define STRING 10

typedef struct
{
    char make[STRING];
    Date manufactureDate;
    Date purchaseDate;
    double purchasePrice;
}Car; 

void addCar(Car *carIn)
{
    do
    {
        printf( "\n Enter the make: ");
        scanf("%s", (*carIn).make);
    }while((*carIn).make) strlen(10));

    printf( "Manufacture date > (DD/MM/YYYY) \n");
    getDate(&(*carIn).manufactureDate);
    printf( "Purchase date > (DD/MM/YYYY) \n");
    getDate(&(*carIn).purchaseDate);

    do
    {
       printf( " Enter the purchase price (100.00 = $100.00): ");
       scanf("%lf", &(*carIn).purchasePrice);
    }while ((*carIn).purchasePrice <= 0);
}

1 个答案:

答案 0 :(得分:3)

在问题编辑和addCar()功能扩展之前开始回答。

假设你有一个结构定义:

typedef struct Car Car;
struct Car
{
    …
    char make[11];
    …
};

然后你可以写代码而不是:

void addCar(Car *carIn)
{
    while (printf("\nEnter the make: ") > 0 &&
           scanf("%10[A-Za-z]", carIn->make) != 1)
    {
        printf("Did not recognize that!\n");
        int c;
        /* Didn't get any alpha characters - read the line and start over */
        while ((c = getchar()) != EOF && c != '\n')
            ;
        if (c == EOF)
        {
            printf("Farewell!\n");
            exit(1);
        }
    }
}

请注意,您的兰博基尼车主不会对您满意。

另请注意使用->(箭头)运算符;它旨在使(*carIn).make不必要。当结构指针嵌套在其他结构中时,它大大简化了表示法。将(*(*s1).s2).members1->s2->member进行比较。