Ncurses 没有写出指定数量的宽字符关于宽字符的列需求

问题描述

在下面的程序中,我尝试使用 ncurses 输出十行,每行十个 Unicode 字符。循环的每次迭代从三个 Unicode 字符的数组中选择一个随机字符。然而,我遇到的问题是 ncurses 并不总是每行写 10 个字符......这有点难以解释,但如果你运行程序,也许你会看到这里和那里都有空格。有些行将包含 10 个字符,有些只有 9 个,有些只有 8 个。在这一点上,我不知道我做错了什么。

我在 Ubuntu 20.04.1 机器上运行这个程序,我使用的是默认的 GUI 终端。

#define _XOPEN_SOURCE_EXTENDED 1
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <ncurses.h>

#include <locale.h>
#include <time.h>

#define ITERATIONS 3000
#define REFRESH_DELAY 720000L
#define MAXX 10
#define MAXY 10
#define RANDOM_KANA &katakana[(rand()%3)]
#define SAME_KANA &katakana[2]

void show();

cchar_t katakana[3];
cchar_t kana1;
cchar_t kana2;
cchar_t kana3;

int main() {
  setlocale(LC_ALL,"");
  srand(time(0));

  setcchar(&kana1,L"\u30d0",WA_NORMAL,5,NULL);
  setcchar(&kana2,L"\u30a6",4,NULL);
  setcchar(&kana3,L"\u30b3",NULL);
  katakana[0] = kana1;
  katakana[1] = kana2;
  katakana[2] = kana3;
  
  initscr();
  for (int i=0; i < ITERATIONS; i++) {
    show();
    usleep(REFRESH_DELAY);
  }
}

void show() {
  for (int x=0; x < MAXX; x++) {
    for (int y = 0; y < MAXY; y++) {
      mvadd_wch(y,x,RANDOM_KANA);
    }
  }
  refresh();
  //getch();
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)