strcmp дай неожиданные результаты

он практиковал немного c, чтобы освежать память и есть линии, которые я не функционируют:

int main(){

    char nombre[20];
    int cont = 3;

    printf("Ingresa tu nombre de usuario\n");
    fgets(nombre,20,stdin);
    fflush(stdin);

    while(strcmp(nombre,"jorge")!=0){

        printf("Nombre de usuario incorrecto, ingrese nuevamente (Intentos restantes: %i)\n",cont);
        fgets(nombre,20,stdin);
        fflush(stdin);
        cont--;

    }


    if(cont==0) {
        printf("Se acabaron los intentos, vuelva mas tarde\n");
        exit(1);
    }

    printf("El programa continua normalmente\n");
}

несмотря на то, что он поместит действительное имя (jorge) он продолжает входить в цикл и я не понимаю потому что

4
задан 09.10.2018, 09:24
2 ответа

Конечно ты перемещаешь характер возврата (Enter) внутри цепи. Ты можешь решать это точно подходя strncmp в 5 букв "jorge":

strncmp(nombre,"jorge",5)!=0

или прилагая прямо характер возврата CR (\n):

strcmp(nombre,"jorge\n")!=0
3
ответ дан 20.11.2019, 04:39
  • 1
    Что гений подал меня спасибо –  Jorge DeSpringfield 09.10.2018, 09:14
  • 2
    Я боюсь, что это не serí в solució n, если это вводит в компьютер jorge1 не deberí чтобы направлять: l –  Zeugirdor 09.10.2018, 09:14
  • 3
    ты знаешь то, что если, как он был бы должен делать тогда? если я добавляю число в " jorge" войди в цикл, хотя он не был бы должен –  Jorge DeSpringfield 09.10.2018, 09:18
  • 4
    Это другая проблема, но если ты используешь второй метод, оно было бы должно функционировать pefectamente. –  cardeol 09.10.2018, 09:19
  • 5
    если это некий cardeol, второе решение функционирует совершенно –  Jorge DeSpringfield 09.10.2018, 09:20

И если ты пытаешься с этим?:

int main () {{112]

char nombre[20];
int cont = 3;

printf("Ingresa tu nombre de usuario\n");
scanf("%s",nombre);
fflush(stdin);

while((strcmp(nombre,"jorge")!=0) && (cont>0)){

    printf("Nombre de usuario incorrecto, ingrese nuevamente (Intentos restantes: %i)\n",cont);
    scanf("%s",nombre);
    fflush(stdin);
    cont--;

}


if(cont==0) {
    printf("Se acabaron los intentos, vuelva mas tarde\n");
    exit(1);
}

printf("El programa continua normalmente\n");
system("pause");
return 0;

}

В while, добавил ее condiciГіn, которому попытки были превосходящими 0.

0
ответ дан 20.11.2019, 04:39