在C中操纵字符串?

时间:2010-10-19 22:04:02

标签: c++ arrays dos borland-c++

我想打印一个字符数组,这些字符首先是下划线。 然后用户可以在这些下划线上写字符。我使用gotoxy()但它无法正常工作。 这就是我写的:

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;
}

3 个答案:

答案 0 :(得分:0)

打印字符数组非常简单:

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

从应该打印字符串的内存到屏幕。

答案 1 :(得分:0)

首先是:您可能不希望在主要功能中对gotoxytextattrcprintf进行所有这些调用,因为这不是主要功能功能应该做。

主要功能的目的更有可能是“从用户那里读取一些文本,在输入字段中很好地呈现”。所以你应该把它变成一个函数:

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;
}

答案 2 :(得分:0)

您的代码非常特定于DOS。对于以便携方式读取立即输入的问题,没有一个很好的通用解决方案。它确实经常被问到,所以我认为C FAQ破裂并包含了你可能想要寻找的答案。

那就是说,我认为你的错误是gotoxy(1, 1)是屏幕的上角,而不是0,0。所以你想要gotoxy(i, 1)