我想打印一个字符数组,这些字符首先是下划线。 然后用户可以在这些下划线上写字符。我使用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;
}
答案 0 :(得分:0)
打印字符数组非常简单:
char* str = your_array;
while(*str) {
putc(*str++);
}
从应该打印字符串的内存到屏幕。
答案 1 :(得分:0)
首先是:您可能不希望在主要功能中对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;
}
答案 2 :(得分:0)
您的代码非常特定于DOS。对于以便携方式读取立即输入的问题,没有一个很好的通用解决方案。它确实经常被问到,所以我认为C FAQ破裂并包含了你可能想要寻找的答案。
那就是说,我认为你的错误是gotoxy(1, 1)
是屏幕的上角,而不是0,0。所以你想要gotoxy(i, 1)