Как сравнивать цепи в C?

while он говорит мне, что сравнение не существует

#include <stdio.h>

int main() { 
    int n, e, op, edad; 
    char sexo[1], res[2]; 
    n = 0; 
    edad = 0; 
    do {
        n = n + 1; 
        printf("Edad del conductor\n"); 
        scanf("%d", &e); 
        printf("Sexo de conductor F= femenino, M= masculino\n"); 
        scanf("%s", sexo); 
        printf("1 si es capital y 2 otra parte del estado\n"); 
        scanf("%d", &op);

        if (edad < 30) {
            edad = edad + e;
        }
        printf("desea ingresar otro usuario? Si o No?\n");
        scanf("%s", res);
    } while (res != "No");

    edad = edad / n;
    printf("%d", edad);

    return 0; 
}
10
задан 13.04.2016, 06:44
2 ответа

То, что он перемещает, состоит в том, что в C ты не можешь сравнивать strings не используя ни операторов ==, ни != эти только будут сравнивать указатели обоих.

ты Должен использовать одну funciГіn, чтобы сравнивать как strcmp

#include <string.h>

// ...

} while (strcmp(res, "No") != 0)

Ее funciГіn возврати 0, когда они равны.


Начиная с твоих комментариев, если ты нуждаешься в том, чтобы манипулировать характером только, тогда ты не нуждаешься в том, чтобы использовать функции для string и podrГ-схвати менять твою программу во что-то asГ-:

char res;

// ...
    printf("desea ingresar otro usuario? (S)i o (N)o?\n");
    scanf(" %c", &res); // hay un espacio en blanco antes de %c para que no capture el "enter" anterior
} while (res != 'N');

FГ-jate, что сейчас res объявлен как char без []. scanf сейчас использует формат %c, чтобы читать единственный характер и 'N' использует простые кавычки ' не ", чтобы показывать, что это не цепь.

14
ответ дан 24.11.2019, 14:36
  • 1
    и нет способа это делать, не используя этой функции? – Jorge Ignacio Martinez-abarca 13.04.2016, 06:52
  • 2
    S и # 237; podr и # 237; схвати делать это пробегая оба strings одновременно и сравнивая car и # 225; cter из-за car и # 225; cter, если они равны. – Diego Torres 13.04.2016, 06:54
  • 3
    Но этот способ, как давание тебе и # 225; s счет склонный к ошибкам и лучше использовать функции, что уже est и # 225; n осуществленные. – Diego Torres 13.04.2016, 06:55
  • 4
    и ты можешь говорить мне как? дело в том, что я не думаю, что в экзамен они позволяют мне помещать это ajajajaj – Jorge Ignacio Martinez-abarca 13.04.2016, 07:03
  • 5
    jaja, в твоем курсе и #191; ense и # 241; ado, чтобы манипулировать strings ? потому что, если это входит в экс-и # 225; men тогда лучше, чтобы ты использовал способ, который есть им ense и # 241; ado преподаватель. Способа, который я говорю тебе, - достаточно b и # 225; sica, и не, если они это считали v и # 225; lido, какие-то ты dir и # 237; an, хорошо из-за того, что осуществляет ты сами другие ты dir и # 237; an, который ты не был должен, схвати и # 237; что зависит. – Diego Torres 13.04.2016, 07:09

Уместно использовать функции для этого, как:

int strcmp(const char *cadena1, const char *cadena2);

Но если мы хотим увидеть как таковой массив, массивы общей формы...

Массивы в Вашем наборе, сравнивается стоимость со стоимостью, индексом индексом.


В C, цепи символов заканчивают с характером '\0', который показывает, что в Вашем положении (и с Вашего положения) нет уже большего количества символов в цепи.

В случае, если давайте хотеть осуществить функцию в C, чтобы сравнивать цепи символов в arrays символов, я предлагаю этот код.

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

bool comparaStr (char entrada[],char modelo[])
{
int ind = 0;

while (entrada[ind]!='\0' && modelo[ind]!='\0' && entrada[ind] == modelo[ind]) ind++;

if (entrada[ind]!='\0' || modelo[ind]!='\0')
   return false;

return true;
}

Заметь: Конечно, во время ввода из-за клавиатуры, имейте в виду, что scanf он не допускает место, если мы хотим, чтобы было допущено место, мы должны использовать gets(arrayDeCaracteres);

0
ответ дан 24.11.2019, 14:36