Сравнение элемента char в массиве с оператором - PullRequest
1 голос
/ 07 февраля 2012

Я искал, как правильно сравнивать элементы char в массиве char, но у меня это не получается.Я пытаюсь сравнить первый символ в массиве символов с оператором (проверяя, существует ли + или -).

РЕДАКТИРОВАТЬ: увидел мою ошибку.Логическая ошибка в операторе if.Спасибо всем за такие быстрые ответы.

Сначала я попробовал это:

    main(int argc, char *argv[]){

    int i;
    int len;
    char input[10];

    for(i = 1; i < 8; i++){

        len = strlen(argv[i]);
        strcpy(input,argv[i]);

        //debug purposes
        printf("%c\n",input[0]);

        if(input[0] != '+' || input[0] != '-')  {
            printf("incorrect number format. %s has no sign.\nnow terminating.\n", input);
        }// end if
    }//end for
}//end main

Затем я прочитал еще несколько постов и увидел, что я должен сравнивать символы с помощью strcompare,И тогда я попробовал это: if( !strcmp(input[0],'+') || !strcmp(input[0],'-') )

Однако, они все еще не сравниваются должным образом.Я получаю ошибку сегментации с приведенным выше кодом и с моим предыдущим кодом, он напечатает оператор, но все равно перейдет к оператору if, говорящему, что формат был неправильным.Я все еще довольно новичок в C, поэтому любые советы или советы о том, как я могу заставить эти символы сравнивать правильно, будут высоко цениться.Спасибо.

Ответы [ 3 ]

4 голосов
/ 07 февраля 2012

Логика в исходном if состоянии неверна:

if(input[0] != '+' || input[0] != '-')

Это всегда будет верно: если '+'== input[0] условие равняется false || true, и наоборот для '-' == input[0].

Должно быть:

if(input[0] != '+' && input[0] != '-')
2 голосов
/ 07 февраля 2012

Отдельные символы сравниваются напрямую (например, input[0] != '-'). strcmp и друзья для сравнения строк.

Но ваше состояние всегда верно. Вы хотите

if(input[0] != '+' && input[0] != '-')  {
    ...
2 голосов
/ 07 февраля 2012

Вы сравниваете строки с strcmp (это буквально означает: str = "строка", cmp = сравнение), а не символы.Сравнения в исходном кодовом блоке хороши.

Возможно, путаница связана с использованием вами массива char.В C строки (в основном) эквивалентны массивам символов, поэтому, если вы используете массив символов в качестве строки, тогда strcmp будет подходящим.Тем не менее, вы этого не делаете: вы используете его просто как массив символов, и поэтому ваши исходные сравнения в порядке.

Что вы хотите сделать, это ввести блок if, если оператор не + и не -.Вы используете or, хотя.Вместо этого попробуйте следующее:

if(input[0] != '+' && input[0] != '-')  {
    printf("incorrect number format. %s has no sign.\nnow terminating.\n", input);
}
...