我正在为编码编写代码而我正在尝试错误检查这段代码,以便当用户给出输入字符串时,如果它超过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);
}
答案 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).member
与s1->s2->member
进行比较。