es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Escaneando 2 caracteres en una línea.

Soy nuevo/a en C y estoy intentando escanear dos variables char en una línea.

Usé #define CRTSECURENOWARNINGS porque tengo que hacerlo. Este es el trozo de código que me molesta: scanf_s(“%c-%c”, &x,1, &y,1);

Cuando inserto 2 chars, se ve algo así –> e-f or a-b. Además, necesito cambiar scanf_s por scanf solamente.

Otra cosa que me resulta extraña es que después de introducir dos chars y después realizar acciones, reinicio los valores de x e y a 0 y necesito introducirlos de nuevo. Sin embargo, cuando los escribo, obtengo valores completamente diferentes.

Aquí está todo el código que he escrito hasta ahora. Tarea: introducir dos letras e imprimirlos en el orden especificado en la entrada, por ejemplo, a-c –> ABC o c-a –> cba.

“`

#include<stdio.h>
#define MAX 100

int main(){
char niz[MAX];
char kraj[MAX] = {0};
int razlika;
char x, y;
int i;
char trenutniznak;
int stoppolje=0;
int temp = 0;
while (1)
{
scanf_s("%c-%c", &x,1, &y,1);
if (x == '.' || y == '.')
{
return 0;
}
else if (y > x)//od pocetka do kraja
{
razlika = y – x + 1;
for (i = stoppolje+1, trenutniznak=x; i <= razlika; i++, trenutniznak++)
{
niz[i] = trenutniznak;
temp = i;
}
stoppolje = temp;
x = 0;
y = 0;
razlika = 0;
}
else
{
printf("\n");
return 0;
}
}
}

“`</stdio.h>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para escanear dos variables del tipo char en una sola línea usando scanf, puede usar el siguiente código:

    scanf ("%c-%c", &x, &y);
    

    Esto escaneará dos caracteres separados por un guión y los almacenará en x e y, respectivamente.

    Si tiene que usar scanf_s y necesita eliminarlo, simplemente puede eliminarlo del código y reemplazarlo con scanf.

    En cuanto al problema donde reinicia los valores de x e y a 0 y obtiene valores completamente diferentes al ingresarlos nuevamente, podría ser porque no está vaciando el búfer de entrada después de cada escaneo. Para hacer esto, puede agregar la siguiente línea después de su declaración de scanf:

    while (getchar ()! = '\ n'); // vacía el búfer de entrada
    

    Esto limpiará el búfer de entrada y evitará que los caracteres restantes afecten su próxima entrada.

    Por último, si desea imprimir los dos caracteres en el orden especificado en la entrada, simplemente puede agregar algunas líneas de código después de haberlos almacenado en niz. Por ejemplo, puede usar el siguiente código:

    para (i = 1; i <= stoppolje; i ++) {
         kraj [i - 1] = niz [i];
    }
    printf ("% s", kraj);
    

    Esto copiará los caracteres de niz a kraj y luego los imprimirá en el orden correcto.

Comments are closed.