Pregunta

Quiero imprimir un arreglo de caracteres, estos personajes son subrayados en primer lugar. A continuación, el usuario puede escribir caracteres en estos underscores.I utilizan gotoxy () pero no funciona correctamente. Eso es lo que escribí:

int main(void)
{
    char arr[20];
    int i;
    char ch;
    clrscr();

    for(i=0;i<=20;i++)
    {
        textattr(0x07);
        cprintf("_");
    } 

    do
    {
        for(i=0;i<=20;i++)
        {
            //gotoxy(i,0);
            //ch = getche();
            if( isprint(ch) == 1)
            {
                arr[i] = ch;
                gotoxy(i,0);
                //printf("%c",ch);
            }
        }
    } while(i == 20);

    getch();
    return 0;
}
¿Fue útil?

Solución

Lo primero es la siguiente:. Es probable que no quieren tener todas esas llamadas a gotoxy, textattr y cprintf en su función principal, ya que eso no es lo que se supone que la función principal de hacer

Es mucho más probable que el propósito de la función principal es "para leer un texto por parte del usuario, bien presentada en un campo de entrada". Por lo que debe hacer esta función:

static int
nice_input_field(char *buf, size_t bufsize, int x, int y) {
  int i, ch;

  gotoxy(x, y);
  for (i = 0; i < bufsize - 1; i++) {
    cprintf("_");
  }

  i = 0;
  gotoxy(x, y);
  while ((ch = readkey()) != EOF) {
    switch (ch) {

    case '...': /* ... */
      break;

    case '\b': /* backspace */
      cprintf("_");
      i--;
      gotoxy(x + i, y);
      break;

    case '\t': /* tabulator */
    case '\n': /* enter, return */
      buf[i] = '\0';
      return 0; /* ok */

    default: /* some hopefully printable character */
      if (i == bufsize - 1) {
        cprintf("\a"); /* beep */
      } else {
        buf[i++] = ch;
        gotoxy(x + i, y);
        cprintf("%c", buf[i]);
      }
    }
  }

  /* TODO: null-terminate the buffer */
  return 0;
}

Otros consejos

Impresión de una serie de personajes es bastante fácil:

char* str = your_array;
while(*str) {
   putc(*str++);
}

A partir de la memoria que se debe imprimir una cadena a la pantalla.

Su código es muy específicas de DOS. No es una buena solución general al problema de leer la entrada inmediata de una manera portátil. Se pone preguntó con bastante frecuencia, por lo que creo que el C FAQ se rompió e incluyó una respuesta que es posible que desee buscar.

Dicho esto, creo que el fallo es que gotoxy(1, 1) es la esquina superior de la pantalla, no 0,0. Por lo que desea gotoxy(i, 1)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top