Как указано chux в комментариях, лучше использовать fgets()
вместо scanf()
, если вы не знаете, сколько слов будет на стандартном вводе,Затем вы можете проанализировать вывод fgets()
по strtok()
, который разбивает найденную строку на отдельные слова.Для этого, пожалуйста, замените следующие строки в вашем коде:
printf("Select first service:\n");
scanf("%s%s",&userService1,&userService2);
printf("Select second service:\n\n");
scanf("%s%s",&userService3,&userService4);
следующим кодом (да, это нехорошо, но я оставляю вам дальнейшие улучшения в качестве упражнения):
char line[50];
char* token;
printf("Select first service:\n");
if (fgets(line, sizeof line, stdin)){
token = strtok(line, " ");
if (token){
strcpy(userService1, token);
token = strtok(NULL, " ");
if (token){
strcpy(userService2, token);
}
}
}
printf("Select second service:\n\n");
if (fgets(line, sizeof line, stdin)){
token = strtok(line, " ");
if (token){
strcpy(userService3, token);
token = strtok(NULL, " ");
if (token){
strcpy(userService4, token);
}
}
}
Вы также должны добавить следующее:
#include <string.h>
Но у вас есть другая ошибка в вашем коде.Пожалуйста, замените ||
на &&
в следующих строках:
if(strcmp(userService3,"Oil") == 0 || strcmp(userService4,"change")==0){
else if(strcmp(userService3,"Tire") == 0 || strcmp(userService4,"rotation")==0){
else if(strcmp(userService3,"Car") == 0 || strcmp(userService4,"wash")==0){
else if(strcmp(userService3,"Car") == 0 || strcmp(userService4,"wax")==0){
Тогда вы должны получить ожидаемый результат.
Код на Ideone
Примечание: приведенный выше код работает для случаев, когда вы ожидаете не более двух слов на вход.Если вы хотите обработать больше слов, имеет смысл заключить strtok()
в цикл while
, как показано в в этом примере .