[英]something wrong with string comparison
這是我到目前為止的代碼:
#include <stdio.h>
#include <string.h>
int main(void) {
char userService1[50];
char userService2[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");
fgets(userService1,13,stdin);
printf("Select second service:\n\n");
fgets(userService2,13,stdin);
printf("Davy's auto shop invoice\n\n");
if(strcmp(userService1,"Oil change\n") == 0){
printf("Service 1: Oil change, $35\n");
price1 = 35;
}
else if(strcmp(userService1,"Tire rotation\n") == 0){
printf("Service 1: Tire rotation, $19\n");
price1 = 19;
}
else if(strcmp(userService1,"Car wash\n") == 0 ){
printf("Service 1: Car wash, $7\n");
price1 = 7;
}
else if(strcmp(userService1,"Car wax\n") == 0 ){
printf("Service 1: Car wax, $12\n");
price1 = 12;
}
else{
printf("Service 1: No service\n");
price1 = 0;
}
if(strcmp(userService2,"Oil change") == 0){
printf("Service 2: Oil change, $35\n\n");
price2 = 35;
}
else if(strcmp(userService2,"Tire rotation") == 0 ){
printf("Service 2: Tire rotation, $19\n\n");
price2 = 19;
}
else if(strcmp(userService2,"Car wash") == 0 ){
printf("Service 2: Car wash, $7\n\n");
price2 = 7;
}
else if(strcmp(userService2,"Car 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;
}
當輸入為:
Tire rotation
Car wash
輸出為:
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: Tire rotation, $19
Service 2: Car wash, $7
Total: $26
輸入任何其他服務組合時,例如:
Oil change
Car wax
它可以正常工作,並輸出應該如何:
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: Oil change, $35
Service 2: Car wax, $12
Total: $47
我不確定問題是否出在“輪胎旋轉”字符串比較上? 如果有,我似乎找不到。 解決這個問題的任何幫助將不勝感激!
我不確定問題是否出在“輪胎旋轉”字符串比較上?
由於fgets(userService1,13,stdin);
13, strcmp(userService1,"Tire rotation\\n")
不能比較相等fgets(userService1,13,stdin);
我希望至少有15個。
13
允許fgets()
讀取不超過12個字符,其余部分保留在stdin
以弄亂下一個輸入。
使用fgets(userService1, sizeof userService1,stdin);
作為char userService1[50];
足夠大
您有兩個問題:
您使用fgets()
有點錯誤。 您似乎正在將該函數的第二個參數指定為有效響應中期望的最大字符數,但是
fgets()
讀取了整行。 那不是真的。 是的,它會在讀取換行符時停止讀取,是的,但在目標緩沖區中的空間不足時也會停止讀取。 當后者在前者之前時,該行的尾部留給下一個fgets()
讀取。 您用於第二個服務的字符串比較集將省略比較字符串的結尾換行符。
因此,告訴fgets()
真正的緩沖區長度並提供對換行符的一致正確處理應該可以解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.