2013-10-24 5 views
0

У меня есть простая программа, но мне не хватает что-то, потому что, когда он сравнивает введенную строку, она всегда не равно 0.Сравнивая строку ввода с другой строкой

Мой код:

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
int loop = 1; 
char response[9]; 
char *Response; 

printf("Enter a string: "); 

while(loop = 1) 
    { 
    scanf("%s", &response); 
    Response = response; 

    if(strcmp(Response,"Random") != 0 || strcmp(Response,"Database") != 0 || strcmp (Response,"Both") != 0) 
     printf("\n\"%s\" is an invalid entry. Valid responses are: \"Random\", \"Database\", or \"Both\": ", Response); 

    else 
     break; 
    } 

printf("\nYour string is: %s\n", Response); 

return 0; 
} 

Когда я введите «Random», «Database» или «Both», он все равно считает, что строка недействительна. Пожалуйста помоги. Благодаря!

ответ

3

изменения к этому:

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    int loop = 1; 
    char response[9]; 
    char *Response; 

    printf("Enter a string: "); 

    while(loop = 1) 
     { 
     scanf("%s", &response); 
     Response = response; 

     if(strcmp(Response,"Random") == 0 || strcmp(Response,"Database") ==0 || strcmp (Response,"Both") ==0){ 
     //correct response 
      break; 
     }else{ 
      printf("\n\"%s\" is an invalid entry. Valid responses are: \"Random\", \"Database\", or \"Both\": ", Response); 
     } 

    } 

    printf("\nYour string is: %s\n", Response); 

    return 0; 
} 

Выход

[email protected] ~ 
$ ./test 
Enter a string: sdjkfjskfjaskd 

"sdjkfjskfjaskd" is an invalid entry. Valid responses are: "Random", "Database", or "Both": Both 

Your string is: Both 

[email protected] ~ 
$ ./test 
Enter a string: Both 

Your string is: Both 
2

Вы тестируете ли строка не 'случайный' или не 'база данных', или нет 'И'.

Предположим, что это «Random»: это, безусловно, не «База данных», поэтому вы сообщаете, что это неверно.

Заменить || на &&.

+0

Спасибо. Я идиот, что не видел этого. Думаю, часы программирования жарили мой мозг сегодня вечером. – Samuel

2

Если пользователь вводит Random, то вы получите:

  • strcmp(Response, "Random") != 0 => 0
  • strcmp(Response, "Database") != 0 => 1
  • strcmp(Response, "Both") != 0 => 1

С (0 || 1 || 1) => 1, ваше if успешно и выводится сообщение об ошибке.

Вам необходимо соединить сравнения с и, а не или.

if(strcmp(Response,"Random") != 0 && strcmp(Response,"Database") != 0 && strcmp(Response,"Both") != 0) 

(0 && 1 && 1) => 0 Тогда и if не печатает сообщение об ошибке.

-1

Использование strncmp:

если (strncmp (ул, "тест", 4) == 0) {Е ("! Он соответствует"); }

Используйте эту ссылку, чтобы больше об этом

http://www.cplusplus.com/reference/cstring/strncmp/

+1

Полностью ненужный, и это не решает проблему. – Barmar

+0

Проблема в том, что «тестирование» также будет соответствовать; он также не затрагивает основную проблему в вопросе. –

Смежные вопросы