2016-12-21 2 views
-1

Это моя программа:Программы, которая сравнивает 2 строки в C

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

int main(){ 
    char alegere[10]; 
    int a; 
    printf ("Alege natura matricei tale: (Numere/Caractere)"); 
    scanf ("%s", &alegere[10]); 
    if (strcmp(alegere, "Numere") == 0){ 
     printf("a"); 
    } else 
     printf ("b"); 
    return 0; 
} 

Он должен сравнить мою строку, что я пишу с клавиатуры со строкой «Numere», но если я Tipe строки " Numere "или любой другой строки результат будет таким же, я буду печатать" b "... Так что я делаю неправильно?

+0

@ user3121023 I получить тот же результат –

+2

Правильно ли этот код был скомпилирован, строка сравнения должна быть (strcmp (alegere, «Numere») == 0) .. –

+1

'#include ' –

ответ

3

Три вещи:

  1. Как указывается в комментариях, вы должны использовать "%9s" вместо "%s" в вашем scanf. Это гарантирует, что количество вводимых символов не переполнит ваш массив alegere, который имеет только 10 символов. (Почему 9 вместо 10? Потому что C-строки - null terminated.)
  2. Вам не хватает ) в вашем телефоне strcmp.
  3. &alegere[10] не делает то, что вы хотите; &alegere[10] - это адрес памяти alegere[10], или один за концом вашего массива. Это означает, что ваш scanf вызывает неопределенное поведение. Замените это &alegere[0] или, более просто alegere.

Исправленный код:

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

int main(){ 
    char alegere[10]; 
    printf ("Alege natura matricei tale: (Numere/Caractere)"); 
    scanf ("%9s", alegere); 
    if (strcmp(alegere, "Numere") == 0){ 
     printf("a"); 
    } else 
     printf ("b"); 
    return 0; 
} 
+0

& alegere [0] <==> alegere + 0 <==> alegere – Stargateur

+0

Sry, я написал это быстро. Третий намек, который вы написали, был моей проблемой, теперь я понимаю, почему он не работал –

3
  1. брекеты вопрос изменить

if (strcmp(alegere, "Numere" == 0)

в

if (strcmp(alegere, "Numere") == 0) 

2. Сканирование памяти не указывает на начало адреса

scanf ("%s", &alegere[10]); в scanf ("%s", alegere); //% 9s очень хорошее предложение другими пользователями