¿Cómo obtener una salida del ciclo for porque mi código siempre obtiene el último resultado del ciclo for? ¿Qué pasa con mi condición de bucle for? Este es mi codigo:

#include <stdio.h>
#include <string.h>
 
int main(){
    int i, n = 3, a;
    char x[20];
    struct data {
        char nim[10];
    };
 
    struct data batas[100];
 
    printf("TEST1 : "); scanf("%[^\n]s", batas[0].nim);
    printf("TEST2 : "); scanf(" %[^\n]s", batas[1].nim);
    printf("TEST3 : "); scanf(" %[^\n]s", batas[2].nim);
 
    char str[10];
    printf("TEST : "); scanf(" %[^\n]s", str);
    for(i=0; i<n; i++){
        if (strcmp(str, batas[i].nim) == 0) {
            puts("Value exist");
            strcpy(x, "FLAG");
        } else {
            puts("Value doesn't exist");
            strcpy(x, "FLAGXX");
        }
    }
    printf("%s\n", x);
    return 0;
}

Aquí, del resultado de x siempre se obtiene el resultado de FLAGXX. Quiero obtener el resultado de FLAG aquí.

-1
Rudy Tri Saputra 23 ene. 2021 a las 14:17

1 respuesta

La mejor respuesta

La mejor manera de obtener el resultado exacto es no sobrescribirlo con un resultado inexacto. Desea que x contenga "BANDERA" si una de las cadenas coincidió; pero a menos que fuera la última iteración del ciclo, x se sobrescribirá más tarde cuando se encuentre una no coincidencia.

Un algoritmo típico sería break el bucle for cuando se encuentra una coincidencia. (Se puede encontrar una explicación de break y el continue relacionado con la oposición aquí, que resulta ser el primer resultado de Google).

También recomendaría usar simplemente una bandera booleana que es falsa cuando se ingresa el ciclo y se establece en verdadero cuando se encuentra una coincidencia; no hay razón para copiar cadenas (¡y la misma cadena!) durante cada iteración.

0
Peter - Reinstate Monica 23 ene. 2021 a las 11:38