【发布时间】:2018-12-02 05:57:23
【问题描述】:
这是我当前的代码:
#include <stdio.h>
// FIXME include the string library
int main(void) {
char userService1[50];
char userService2[50];
char userService3[50];
char userService4[50];
int price1;
int price2;
printf("Davy's auto shop services\nOil change -- $35\nTire rotation -- $19\nCar wash -- $7\nCar wax -- $12\n\n");
printf("Select first service:\n");
scanf("%s%s",&userService1,&userService2);
printf("Select second service:\n\n");
scanf("%s%s",&userService3,&userService4);
printf("Davy's auto shop invoice\n\n");
if(strcmp(userService1,"Oil") == 0 && strcmp(userService2,"change")==0){
printf("Service 1: Oil change, $35\n");
price1 = 35;
}
else if(strcmp(userService1,"Tire") == 0 && strcmp(userService2,"rotation")==0){
printf("Service 1: Tire rotation, $19\n");
price1 = 19;
}
else if(strcmp(userService1,"Car") == 0 && strcmp(userService2,"wash")==0){
printf("Service 1: Car wash, $7\n");
price1 = 7;
}
else if(strcmp(userService1,"Car") == 0 && strcmp(userService2,"wax")==0){
printf("Service 1: Car wax, $12\n");
price1 = 12;
}
else{
printf("Service 1: No service\n");
price1 = 0;
}
if(strcmp(userService3,"Oil") == 0 || strcmp(userService4,"change")==0){
printf("Service 2: Oil change, $35\n\n");
price2 = 35;
}
else if(strcmp(userService3,"Tire") == 0 || strcmp(userService4,"rotation")==0){
printf("Service 2: Tire rotation, $19\n\n");
price2 = 19;
}
else if(strcmp(userService3,"Car") == 0 || strcmp(userService4,"wash")==0){
printf("Service 2: Car wash, $7\n\n");
price2 = 7;
}
else if(strcmp(userService3,"Car") == 0 || strcmp(userService4,"wax")==0){
printf("Service 2: Car wax, $12\n\n");
price2 = 12;
}
else{
printf("Service 2: No service\n\n");
price2 = 0;
}
int price = price1 + price2;
printf("Total: $%d\n", price);
return 0;
}
代码有两个输入(选定的服务)。如果第一个输入是“-”,第二个是“汽车蜡”,则这是当前输出:
Davy's auto shop services
Oil change -- $35
Tire rotation -- $19
Car wash -- $7
Car wax -- $12
Select first service:
Select second service:
Davy's auto shop invoice
Service 1: No service
Service 2: No service
Total: $0
但是,这是所需的输出:
Davy's auto shop services
Oil change -- $35
Tire rotation -- $19
Car wash -- $7
Car wax -- $12
Select first service:
Select second service:
Davy's auto shop invoice
Service 1: No service
Service 2: Car wax, $12
Total: $12
我认为这与以下事实有关解决这个问题。
【问题讨论】:
-
将
scanf("%s%s",...换成fgets()换成宽缓冲区,然后将缓冲区解析成userService1, userService2。 -
提示:启用所有警告以节省时间。我希望
scanf("%s%s",&userService1,&userService2);会警告不匹配的指针/说明符。 -
这样使用字符串和scanf函数:scanf("%s%s", userService1, userService2); scanf("%s%s", userService3, userService4);