鱼C论坛

 找回密码
 立即注册
查看: 2720|回复: 3

[已解决]Linux下用C语言输出宽字符串问题

[复制链接]
发表于 2017-3-21 13:55:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Windows下正常
无标题.png

Linux下就不行了
无标题1.png

这样又可以
无标题2.png

  1. /*洗盘程序*/

  2. #include <stdio.h>
  3. #include <time.h>
  4. #include <stdlib.h>
  5. #include <wchar.h>
  6. #include <locale.h>

  7. #define CARD_NUMBER 14

  8. typedef struct
  9. {
  10.         char play_name[20];
  11.         unsigned char card[CARD_NUMBER]; // 每个人的牌数
  12. } PlayAttribute;


  13. void shuffle(PlayAttribute *play1, PlayAttribute *play2, PlayAttribute *play3)
  14. {
  15.         int i;
  16.         char card_flag[54] = {0}; // 牌的标志,为1表示此牌已使用
  17.         unsigned char card1, card2, card3;

  18.         for(i = 0; i < CARD_NUMBER; i++)
  19.         {
  20.                 do
  21.                 {
  22.                         card1 = rand() % 54; // 生成0~53之间的数字
  23.                 } while(card_flag[card1] == 1); // 此牌已使用,重新生成
  24.                 do
  25.                 {
  26.                         card2 = rand() % 54; // 生成0~53之间的数字
  27.                 } while((card_flag[card2] == 1) || (card2 == card1)); // 此牌已使用,重新生成
  28.                 do
  29.                 {
  30.                         card3 = rand() % 54; // 生成0~53之间的数字
  31.                 } while((card_flag[card3] == 1) || (card3 == card2) || (card3 == card1)); // 此牌已使用,重新生成

  32.                                                                                           // 以下3张牌已使用,进行标记
  33.                 card_flag[card1] = 1;
  34.                 card_flag[card2] = 1;
  35.                 card_flag[card3] = 1;


  36.                 play1->card[i] = card1;
  37.                 play2->card[i] = card2;
  38.                 play3->card[i] = card3;
  39.         }
  40. }

  41. wchar_t *get_card(unsigned char card) // 返回数字对应的字符串
  42. {
  43.         static wchar_t table[4][4] = {L"方  ", L"梅  ", L"红  ", L"黑  "};

  44.         if((card >= 0) && (card < 13))
  45.         {
  46.                 switch((card % 13) + 1)
  47.                 {
  48.                 case 11:
  49.                         swprintf(table[0] + 1, 4, L"%c", L'J');
  50.                         return table[0];
  51.                 case 12:
  52.                         swprintf(table[0] + 1, 4, L"%c", L'Q');
  53.                         return table[0];
  54.                 case 13:
  55.                         swprintf(table[0] + 1, 4, L"%c", L'K');
  56.                         return table[0];
  57.                 case 1:
  58.                         swprintf(table[0] + 1, 4, L"%c", L'A');
  59.                         return table[0];
  60.                 }
  61.                 swprintf(table[0] + 1, 4, L"%d", (card % 13) + 1);
  62.                 return table[0];
  63.         }
  64.         else if((card >= 13) && (card < 2 * 13))
  65.         {
  66.                 switch((card % 13) + 1)
  67.                 {
  68.                 case 11:
  69.                         swprintf(table[1] + 1, 4, L"%c", L'J');
  70.                         return table[1];
  71.                 case 12:
  72.                         swprintf(table[1] + 1, 4, L"%c", L'Q');
  73.                         return table[1];
  74.                 case 13:
  75.                         swprintf(table[1] + 1, 4, L"%c", L'K');
  76.                         return table[1];
  77.                 case 1:
  78.                         swprintf(table[1] + 1, 4, L"%c", L'A');
  79.                         return table[1];
  80.                 }
  81.                 swprintf(table[1] + 1, 4, L"%d", (card % 13) + 1);
  82.                 return table[1];
  83.         }
  84.         else if((card >= 2 * 13) && (card < 3 * 13))
  85.         {
  86.                 switch((card % 13) + 1)
  87.                 {
  88.                 case 11:
  89.                         swprintf(table[2] + 1, 4, L"%c", L'J');
  90.                         return table[2];
  91.                 case 12:
  92.                         swprintf(table[2] + 1, 4, L"%c", L'Q');
  93.                         return table[2];
  94.                 case 13:
  95.                         swprintf(table[2] + 1, 4, L"%c", L'K');
  96.                         return table[2];
  97.                 case 1:
  98.                         swprintf(table[2] + 1, 4, L"%c", L'A');
  99.                         return table[2];
  100.                 }
  101.                 swprintf(table[2] + 1, 4, L"%d", (card % 13) + 1);
  102.                 return table[2];
  103.         }
  104.         else if((card >= 3 * 13) && (card < 4 * 13))
  105.         {
  106.                 switch((card % 13) + 1)
  107.                 {
  108.                 case 11:
  109.                         swprintf(table[3] + 1, 4, L"%c", L'J');
  110.                         return table[3];
  111.                 case 12:
  112.                         swprintf(table[3] + 1, 4, L"%c", L'Q');
  113.                         return table[3];
  114.                 case 13:
  115.                         swprintf(table[3] + 1, 4, L"%c", L'K');
  116.                         return table[3];
  117.                 case 1:
  118.                         swprintf(table[3] + 1, 4, L"%c", L'A');
  119.                         return table[3];
  120.                 }
  121.                 swprintf(table[3] + 1, 4, L"%d", (card % 13) + 1);
  122.                 return table[3];
  123.         }
  124.         else // 大王和小王
  125.         {
  126.                 if(card == 52)
  127.                 {
  128.                         return L"大王";
  129.                 }
  130.                 else
  131.                 {
  132.                         return L"小王";
  133.                 }
  134.         }
  135. }

  136. int main(void)
  137. {
  138.         int i;
  139.         char replay;
  140.         PlayAttribute play1, play2, play3;

  141.         setlocale(LC_ALL, "chs");

  142.         srand((unsigned int)time(NULL));

  143.         printf("请输入1号玩家的名字:");
  144.         scanf("%s", play1.play_name);
  145.         printf("请输入2号玩家的名字:");
  146.         scanf("%s", play2.play_name);
  147.         printf("请输入3号玩家的名字:");
  148.         scanf("%s", play3.play_name);

  149.         printf("方=方角,梅=梅花,红=红桃,黑=黑桃\n");
  150.        
  151.         do
  152.         {
  153.                 shuffle(&play1, &play2, &play3); // 洗牌

  154.                 printf("%s手上的牌是:", play1.play_name);
  155.                 for(i = 0; i < CARD_NUMBER; i++)
  156.                 {
  157.                         wprintf(L"%ls ", get_card(play1.card[i]));
  158.                 }
  159.                 putchar('\n');

  160.                 printf("%s手上的牌是:", play2.play_name);
  161.                 for(i = 0; i < CARD_NUMBER; i++)
  162.                 {
  163.                         wprintf(L"%ls ", get_card(play2.card[i]));
  164.                 }
  165.                 putchar('\n');

  166.                 printf("%s手上的牌是:", play3.play_name);
  167.                 for(i = 0; i < CARD_NUMBER; i++)
  168.                 {
  169.                         wprintf(L"%ls ", get_card(play3.card[i]));
  170.                 }
  171.                 putchar('\n');

  172.        
  173.                 printf("重新洗牌(Y/N)?");
  174.                 getchar();
  175.                 scanf("%c", &replay);
  176.         } while((replay == 'Y') || (replay == 'y'));

  177.         return 0;
  178. }
复制代码
最佳答案
2017-3-21 23:20:38
printf 和 wprintf 两个不能混在一起使用,会导致冲突。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-21 20:40:21 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-21 23:20:38 | 显示全部楼层    本楼为最佳答案   
printf 和 wprintf 两个不能混在一起使用,会导致冲突。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-22 00:02:25 | 显示全部楼层
小甲鱼 发表于 2017-3-21 23:20
printf 和 wprintf 两个不能混在一起使用,会导致冲突。

哦,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 07:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表