C++ C语言中的字符串操作?

C++ C语言中的字符串操作?,c++,arrays,dos,borland-c++,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 {

我想打印一个字符数组,这些字符首先是下划线。 然后用户可以在这些下划线上写字符。我使用了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;
}
int main(无效)
{
char-arr[20];
int i;
char ch;
clrsc();

对于(i=0;i而言,打印字符数组相当容易:

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

从内存中输出一个字符串到屏幕。

第一件事是:您可能不想在主函数中调用所有对gotoxy
textattr
cprintf
的调用,因为主函数不应该这样做

更可能的情况是,主函数的目的是“从用户那里读取一些文本,并在输入字段中很好地显示出来”。因此,您应该将其作为一个函数:

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;
}
static int
漂亮的输入字段(char*buf,size\t bufsize,int x,int y){
int i,ch;
gotoxy(x,y);
对于(i=0;i
您的代码非常特定于DOS。对于以便携方式读取即时输入的问题,没有一个很好的通用解决方案。它确实经常被问到,因此我认为C常见问题解答已经分解,并包含了一个您可能想要找到的答案


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

我很乐意回答,但请清除你问题中的标记。每行代码前有四个空格缩进。你使用的编译器是什么?conio.h没有得到很好的支持(如果有的话)如果你没有使用Borland,也许这就是为什么你不能让它正常工作的原因?你试过诅咒吗?你应该把这个问题标记为
msdos
borlandc
或任何与
CLRSC
gotoxy
函数相关的东西,它们不是C的一部分。“它不能正常工作”-请指定与您预期不同的情况。例如,错误、无输出或输出位置错误等。输出必须为20个下划线,光标位于要在其上写入的第一个下划线中,但这不会发生。尽管查看您的代码,但我不确定是否正确理解您的问题。当我运行必须已经打印了下划线,下划线的数量是数组中元素的数量。然后写入指针必须在第一个下划线处,当我写入任何字符时,它将被写入该确切位置并存储在数组中。哦,我知道你想要什么了。你这样做是错误的。诅咒或诅咒,如sugges上面的ted会让你的生活更轻松。