鱼C论坛

 找回密码
 立即注册
查看: 2241|回复: 25

[已解决]请问C++如何在控制台中设置输入为*号?

[复制链接]
发表于 2023-1-2 17:03:38 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 高山 于 2023-1-2 17:08 编辑

大佬们,不是道如何让在控制台中设置输入为*号?
我从网上搜了的都不符合我的代码
我的代码(请不要侵权):
  1. #include"allinclude.h"
  2. using namespace std;
  3. string vname;
  4. map <string,int> a;
  5. map <string,int> huser;
  6. map <string,string> vhuser;
  7. double ch,yuan;
  8. double zj;
  9. string name;
  10. int pass;
  11. char yesno='n';
  12. void start()
  13. {
  14.         system("color 7C");
  15.         cout<<"----------欢迎来到商家系统 V3.0----------"<<endl;
  16.         cout<<"在使用本系统之前,您需要阅读以下几点:"<<endl;
  17.         cout<<"1.本系统的更新请关注fishc.com.cn中高山的发帖"<<endl;
  18.         cout<<"2.本程序是您的商家助理,但本程序没有存储功能,请不要在未记录数据前进行关闭程序"<<endl;
  19.         cout<<"3.本程序是万能版,适用所有系统"<<endl;
  20.         cout<<"↑以上就是本程序的信息了"<<endl;
  21.         system("pause");
  22.         system("cls");
  23. }
  24. void vspeak()
  25. {
  26.         cout<<"在使用本程序前,务必仔细查看使用说明"<<endl;
  27.         cout<<"程序作者:高山"<<endl;
  28.         cout<<"发布机构:鱼C论坛"<<endl;
  29.         cout<<"程序版本:V3.0"<<endl;
  30.         cout<<"更新链接:高山账户"<<endl;
  31.         system("pause");
  32.         system("cls");
  33. }
  34. void hello()
  35. {
  36.         cout<<"\n\
  37.                            @\n\
  38.                           / \\\n\
  39.                           * *\n\
  40.                           * *\n\
  41.                           * *\n\
  42.                       * * * * * *\n\
  43.                     * * * * * * * *\n\
  44.                   * * * * * * * * * *\n\
  45.                           * *\n\
  46.                           * *\n\
  47.                         * * * *\n\
  48.                       * * * * * *\n";
  49.         cout<<"正在启动..."<<endl;
  50.     Sleep(200);
  51.         system("cls");
  52.    
  53. }

  54. void clac()
  55. {
  56.         system("color 2F");
  57.         system("cls");  
  58.         char ch;
  59.         double number=0,doing;
  60.         cout<<"欢迎您使用计算系统,为了保证计算的快速,将使用自动读取功能,第一步时无需按下回车"<<endl;
  61.         while(true)
  62.         {
  63.                 cout<<"请问您要进行什么操作?"<<endl;
  64.                 cout<<"1.加法 2.减法 3.乘法 4.除法 5.结束"<<endl;
  65.                 ch=getch();
  66.                 if(ch=='1')
  67.                 {
  68.                         cout<<"请输入加的数量:";
  69.                         cin>>doing;
  70.                         number+=doing;
  71.                         cout<<"完成!"<<endl;
  72.                         system("pause");
  73.                         system("cls");
  74.                 }
  75.                 if(ch=='2')
  76.                 {
  77.                         cout<<"请输入减的数量:";
  78.                         cin>>doing;
  79.                         number-=doing;
  80.                         cout<<"完成!"<<endl;
  81.                         system("pause");
  82.                         system("cls");
  83.                 }
  84.                 if(ch=='3')
  85.                 {
  86.                         cout<<"请输入乘的数量:";
  87.                         cin>>doing;
  88.                         number*=doing;
  89.                         cout<<"完成!"<<endl;
  90.                         system("pause");
  91.                         system("cls");
  92.                 }
  93.                 if(ch=='4')
  94.                 {
  95.                         cout<<"请输入除的数量:";
  96.                         cin>>doing;
  97.                         number/=doing;
  98.                         cout<<"完成!"<<endl;
  99.                         system("pause");
  100.                         system("cls");
  101.                 }
  102.                 if(ch=='5')
  103.                 {
  104.                         cout<<"结果是"<<number<<endl;
  105.                         system("pause");
  106.                         system("cls");
  107.                         system("color 7A");
  108.                         return ;
  109.                  }
  110.         }
  111. }
  112. void store()
  113. {
  114.         system("cls");
  115.         cout<<"欢迎来到商品管理系统"<<endl;
  116.         cout<<"请输入商品名称:";
  117.         cin>>name;
  118.         cout<<"请输入商品价格:";
  119.         cin>>yuan;
  120.         if(yuan==0)
  121.         {
  122.                 cout<<"价格不能为空哦~"<<endl;
  123.                 system("pause");
  124.                 system("cls");
  125.         }
  126.         else
  127.         {
  128.                 a[name]=yuan;
  129.                 system("pause");
  130.                 system("cls");
  131.         }

  132. }
  133. void vfind()
  134. {
  135.         system("cls");
  136.         cout<<"欢迎进入商品查价系统!"<<endl;
  137.         cout<<"请输入需要查找的商品名称:";
  138.         cin>>name;
  139.         if(a[name]==0)
  140.         {
  141.                 cout<<"商品不存在哦~"<<endl;
  142.                 a[name]=yuan;
  143.                 system("pause");
  144.                 system("cls");
  145.         }
  146.         else
  147.         {
  148.                 cout<<"名称为 "<<name<<" 的价格为 "<<a[name]<<" 元"<<endl;
  149.                 system("pause");
  150.                 system("cls");
  151.         }
  152. }
  153. void vdel()
  154. {
  155.          system("cls");
  156.          char choose;
  157.          string vname;
  158.          system("color 4F");
  159.          cout<<"您已经进入商品删除系统,删除后无法恢复,确认操作(y/n):";
  160.          cin>>choose;
  161.          if(choose=='y')
  162.          {
  163.                  cout<<"请输入需要删除的商品:";
  164.                  cin>>vname;
  165.                  if(a[vname]==0)
  166.                  {
  167.                          cout<<"删除失败!商品不存在"<<endl;
  168.                          system("pause");
  169.                          system("cls");
  170.                          system("color 7C");
  171.                          return;
  172.                  }
  173.                  a[vname]=0;
  174.                  cout<<"删除成功!"<<endl;
  175.                  system("pause");
  176.                  system("cls");
  177.                  system("color 7C");
  178.                  return;
  179.          }
  180.          if(choose=='n')
  181.          {
  182.          system("color 7C");
  183.                  return ;
  184.          }
  185. }
  186. void yuanwrite()
  187. {
  188.         system("cls");
  189.         char choose;
  190.         double lsyuan;
  191.         cout<<"欢迎使用智能账本功能!"<<endl;
  192.         while(true)
  193.         {
  194.                 cout<<"请输入目前是收入/支出/查看价格/退出智能账本(命令为:s/z/f/e):";
  195.                 cin>>choose;
  196.                 if(choose =='s')
  197.                 {
  198.                         cout<<"请输入收入价格:" ;
  199.                         cin>>lsyuan;
  200.                         zj+=lsyuan;
  201.                         cout<<"成功!"<<endl;
  202.                         system("pause");
  203.                         system("cls");
  204.                 }
  205.                 else if(choose =='z')
  206.                 {
  207.                         cout<<"请输入支出价格:";
  208.                         cin>>lsyuan;
  209.                         zj-=lsyuan;
  210.                         if(zj<0)
  211.                         {
  212.                                 cout<<"余额为负数,余额为"<<zj<<"元"<<endl;
  213.                         }
  214.                         system("pause");
  215.                         system("cls");
  216.                 }
  217.                 else if(choose=='f')
  218.                 {
  219.                         cout<<"您的余额为"<<zj<<"元"<<endl;
  220.                         system("pause");
  221.                         system("cls");
  222.                 }
  223.                 else if(choose=='e')
  224.                 {
  225.                         cout<<"感谢使用!现在返回首页"<<endl;
  226.                         system("pause");
  227.                         system("cls");
  228.                         return ;
  229.                 }

  230.         }

  231.         
  232. }


  233. void close()
  234. {
  235.         system("color 4F");
  236.         system("cls");
  237.         char choose;
  238.         cout<<"确定关闭本系统?关闭后包括账本、商品的数据都会丢失!"<<endl;
  239.         cout<<"请问是否关闭(y/n):";
  240.         cin>>choose;
  241.         if(choose == 'y')
  242.         {
  243.                 cout<<"正在操作中..."<<endl;
  244.                 system("pause");
  245.                 exit(0);
  246.         }
  247.         else
  248.         {
  249.                 system("color 7C");
  250.                 return ;
  251.         }
  252. }
  253. void word()
  254. {
  255.         system("cls");
  256.         int choose;
  257.         string vword;
  258.         cout<<"---------------------意见反馈内容---------------------"<<endl;
  259.         cout<<"1.管理不当  2.发现bug  3.发展建议  4.其他反馈"<<endl;
  260.         cout<<"请输入您的选择:";
  261.         cin>>choose;
  262.         if(choose==1)
  263.         {
  264.                 cout<<"请输入具体内容,不支持多行文本:";
  265.                 cin>>vword;
  266.                 cout<<"请复制以下内容通知高山(系统不支持复制请右键点击程序标题,点击选择,复制):"<<endl;
  267.                 cout<<"意见反馈表"<<endl;
  268.                 cout<<"编号:1  类型:管理不当  版本:万能2.0"<<endl;
  269.                 cout<<"具体内容:"<<vword<<endl;
  270.                 cout<<"下面按下任意键后关闭"<<endl;
  271.                 system("pause");
  272.                 system("cls");
  273.                 return ;
  274.         }
  275.         if(choose==2)
  276.         {
  277.                 cout<<"请输入具体内容,不支持多行文本:";
  278.                 cin>>vword;
  279.                 cout<<"请复制以下内容通知高山(系统不支持复制请右键点击程序标题,点击选择,复制):"<<endl;
  280.                 cout<<"意见反馈表"<<endl;
  281.                 cout<<"编号:2  类型:发现bug  版本:万能2.0"<<endl;
  282.                 cout<<"具体内容:"<<vword<<endl;
  283.                 cout<<"下面按下任意键后关闭"<<endl;
  284.                 system("pause");
  285.                 system("cls");
  286.                 return ;
  287.         }
  288.         if(choose==3)
  289.         {
  290.                 cout<<"请输入具体内容,不支持多行文本:";
  291.                 cin>>vword;
  292.                 cout<<"请复制以下内容通知高山(系统不支持复制请右键点击程序标题,点击选择,复制):"<<endl;
  293.                 cout<<"意见反馈表"<<endl;
  294.                 cout<<"编号:3  类型:发展建议  版本:万能2.0"<<endl;
  295.                 cout<<"具体内容:"<<vword<<endl;
  296.                 cout<<"下面按下任意键后关闭"<<endl;
  297.                 system("pause");
  298.                 system("cls");
  299.                 return ;
  300.         }
  301.         if(choose==4)
  302.         {
  303.                 cout<<"请输入具体内容,不支持多行文本:";
  304.                 cin>>vword;
  305.                 cout<<"请复制以下内容通知高山(系统不支持复制请右键点击程序标题,点击选择,复制):"<<endl;
  306.                 cout<<"意见反馈表"<<endl;
  307.                 cout<<"编号:4  类型:其他反馈  版本:万能2.0"<<endl;
  308.                 cout<<"具体内容:"<<vword<<endl;
  309.                 cout<<"下面按下任意键后关闭"<<endl;
  310.                 system("pause");
  311.                 system("cls");
  312.                 return ;
  313.         }
  314. }
  315. void systemclose()
  316. {
  317.         system("cls");
  318.         system("color 4F");
  319.         char choose;
  320.         cout<<"确定关闭本电脑?关闭后包括账本、商品的数据都会丢失!"<<endl;
  321.         cout<<"请问是否关闭(y/n),输入操作前请保存未保存的工作:";
  322.         cin>>choose;
  323.         if(choose == 'y')
  324.         {
  325.                 system("pause");
  326.                 system("shutdown -s -t 10");
  327.         }
  328.         else
  329.         {
  330.                 system("color 7C");
  331.                 return ;
  332.         }
  333. }

  334. void vsay()
  335. {
  336.         system("cls");
  337.         cout<<"程序版本:万能系统版V3.0"<<endl;
  338.         cout<<"更新日志:"<<endl;
  339.         cout<<"-修复了部分bug"<<endl;
  340.         cout<<"-增加了账户功能"<<endl;
  341.         cout<<"-设置了账户的用户组"<<endl;
  342.         cout<<"-其他关于账户的功能"<<endl;
  343.         system("pause");
  344.         system("cls");
  345. }

  346. void newuser()
  347. {
  348.         system("cls");
  349.         string uname;
  350.         int upass,choose;
  351.         cout<<"您已经进入账户管理系统"<<endl;
  352.         cout<<"请输入想要添加的用户名(谨慎起名,目前不支持修改账户昵称):";
  353.         cin>>name;
  354.         cout<<"请输入 "<<name<<" 的密码(密码不能设置为0,否则无效):";
  355.         cin>>upass;
  356.         cout<<"请输入 "<<name<<" 的用户组"<<endl;
  357.         cout<<"1.管理团队 2.VIP用户 3.普通用户 4.禁止访问"<<endl;
  358.         cout<<"您的选择是:";
  359.         cin>>choose;
  360.         huser[name]=upass;
  361.         if(choose==1) vhuser[name]="管理团队";
  362.         if(choose==2) vhuser[name]="VIP用户";
  363.         if(choose==3) vhuser[name]="普通用户";
  364.         if(choose==4) vhuser[name]="禁止访问";
  365.         cout<<"新建成功!"<<endl;
  366.         system("pause");
  367.         system("cls");
  368. }

  369. void vdeluser()
  370. {
  371.          int yn2;
  372.          string vname;
  373.          system("cls");
  374.          system("color 4F");
  375.          cout<<"您已进入账户删除系统"<<endl;
  376.          cout<<"是否开始删除(是选择1,不是选择2):";
  377.          cin>>yn2;
  378.          if(yn2==2)
  379.          {
  380.                  system("color 7C");
  381.                  return ;
  382.          }
  383.         cout<<"请输入需要删除的用户名:";
  384.         cin>>vname;
  385.         if(huser[vname]==0)
  386.          {
  387.                  cout<<"账户不存在!"<<endl;
  388.                  system("pause");
  389.                  system("cls");
  390.                  return ;
  391.           }
  392.         huser[vname]=0;
  393.         vhuser[vname]="无效";
  394.         cout<<"删除成功!"<<endl;
  395.         system("pause");
  396.         system("cls");
  397.          system("color 7C");
  398. }
  399. void aduser()
  400. {
  401.          int ch1,newpass;
  402.          system("cls");
  403.          string vhname,newname;
  404.          cout<<"欢迎进入账户管理系统"<<endl;
  405.          cout<<"请输入需要管理的账户:";
  406.          cin>>vhname;
  407.          if(huser[vhname]==0)
  408.          {
  409.                  cout<<"账户不存在!"<<endl;
  410.                                  system("pause");
  411.                                  system("cls");
  412.                                  return ;
  413.           }
  414.          cout<<"账户名称:"<<vhname<<endl;
  415.          cout<<"账户密码:"<<huser[vhname]<<"  账户权限:"<<vhuser[vhname]<<endl;
  416.          cout<<"操作:"<<endl;
  417.          cout<<"1.修改昵称 2.修改密码 3.设为管理"<<endl;
  418.          cout<<"4.设为特权 5.设为普通 6.禁止访问"<<endl;
  419.          cout<<"7.不操作"<<endl;
  420.         cout<<"请输入您的选择:";
  421.         cin>>ch1;
  422.         if(ch1==1)
  423.         {
  424.                 cout<<"由于用户名混乱,本站目前不支持修改昵称!"<<endl;
  425.                 system("pause");
  426.                 system("cls");
  427.          }
  428.          if(ch1==2)
  429.          {
  430.                  cout<<"请输入 "<<vhname<<" 的新密码:";
  431.                  cin>>newpass;
  432.                  huser[vhname]=newpass;
  433.                  cout<<"修改成功!"<<endl;
  434.                 system("pause");
  435.                 system("cls");
  436.          }
  437.          if(ch1==3)
  438.          {
  439.                  vhuser[vhname]="管理团队";
  440.                  cout<<"设置成功!"<<endl;
  441.                  system("pause");
  442.                 system("cls");
  443.          }
  444.          if(ch1==4)
  445.          {
  446.                  vhuser[vhname]="VIP用户";
  447.                  cout<<"设置成功!"<<endl;
  448.                  system("pause");
  449.                 system("cls");
  450.          }
  451.          if(ch1==5)
  452.          {
  453.                  vhuser[vhname]="普通用户";
  454.                  cout<<"设置成功!"<<endl;
  455.                  system("pause");
  456.                 system("cls");
  457.          }
  458.          if(ch1==6)
  459.          {
  460.                  vhuser[vhname]="禁止访问";
  461.                  cout<<"设置成功!"<<endl;
  462.                  system("pause");
  463.                 system("cls");
  464.          }
  465.          if(ch==7)
  466.                  {
  467.                          return ;
  468.                   }
  469. }
  470. void namewrite()
  471. {
  472.          system("cls");
  473.          cout<<"抱歉,因为用户名混乱,本站不支持任何用户名修改!"<<endl;
  474.          system("pause");
  475.          system("cls");
  476. }

  477. void passwrite()
  478. {
  479.          int vnewpass;
  480.         int hpass2;
  481.         string vhname2;
  482.          system("cls");
  483.          cout<<"为了保证账户安全,您需要重新进行用户名、密码的验证"<<endl;
  484.          cout<<"请输入您的账号:";
  485.     cin>>vhname2;
  486.     cout<<"请输入您的密码:";
  487.     cin>>hpass2;
  488.     if(huser[vhname2] != hpass2)
  489.     {
  490.             cout<<"账户或密码错误!"<<endl;
  491.             system("pause");
  492.             system("cls");
  493.             return ;
  494.         }
  495.         cout<<"输入正确!请输入您的新密码:";
  496.         cin>>vnewpass;
  497.         huser[vhname2]=vnewpass;
  498.         cout<<"修改成功!"<<endl;
  499.         system("pause");
  500.         system("cls");
  501.         yesno='n';
  502.         return ;
  503. }
  504. void work1()
  505. {
  506.     int ch=0;
  507.     if(yesno='y')
  508.     {
  509.            
  510.         if(huser[vname] != pass )
  511.         {
  512.                 cout<<"账号或密码错误!"<<endl;
  513.                 system("pause");
  514.                 system("cls");
  515.                 yesno ='n';
  516.                 return ;
  517.         }
  518.         if(vhuser[vname] == "管理团队")
  519.         {
  520.             yesno='y';
  521.             ch=0;
  522.             cout<<"欢迎您回到首页,尊敬的用户 "<<vname<<",您的用户组为 "<<vhuser[vname]<<endl;
  523.             Sleep(1000);
  524.             system("cls");
  525.             cout<<"------欢迎来到商家助理 V3.0------"<<endl;
  526.             cout<<"请选择您需要使用的功能:"<<endl;
  527.             cout<<"1.计算功能 2.添加商品 3.商品查价"<<endl;
  528.             cout<<"4.删除商品 5.智能账本 6.意见反馈"<<endl;
  529.             cout<<"7.添加账户 8.删除账户 9.管理账户"<<endl;
  530.             cout<<"10.修改昵称 11.修改密码 12.退出账户"<<endl;
  531.             cout<<"13.升级日志 14.关闭程序 15.关闭电脑" <<endl;
  532.             cout<<"请输入您的选择:";
  533.             cin>>ch;
  534.             if(ch==1) clac();
  535.             if(ch==2) store();
  536.             if(ch==3) vfind();
  537.             if(ch==4) vdel();
  538.             if(ch==5) yuanwrite();
  539.             if(ch==6) word();
  540.             if(ch==7) newuser();
  541.             if(ch==8) vdeluser();
  542.             if(ch==9) aduser();
  543.             if(ch==10) namewrite();
  544.             if(ch==11) passwrite();
  545.             if(ch==13) vsay();
  546.             if(ch==14) close();
  547.             if(ch==15) systemclose();
  548.             if(ch==12)//12放在最后才能退出账户
  549.             {
  550.                 yesno='n';
  551.                 system("cls");
  552.                 return ;  
  553.                         }                        
  554.         }
  555.         if(vhuser[vname] == "VIP用户")
  556.         {
  557.             yesno='y';
  558.             ch=0;
  559.             cout<<"欢迎您回到首页,尊敬的用户 "<<vname<<",您的用户组为 "<<vhuser[vname]<<endl;
  560.             Sleep(1000);
  561.             system("cls");
  562.             cout<<"------欢迎来到商家助理 V3.0------"<<endl;
  563.             cout<<"请选择您需要使用的功能:"<<endl;
  564.             cout<<"1.计算功能 2.添加商品 3.商品查价"<<endl;
  565.             cout<<"4.删除商品 5.智能账本 6.意见反馈"<<endl;
  566.             cout<<"7.修改昵称 8.修改密码 9.退出账户"<<endl;
  567.             cout<<"10.升级日志" <<endl;
  568.             cout<<"请输入您的选择:";
  569.             cin>>ch;
  570.             if(ch==1) clac();
  571.             if(ch==2) store();
  572.             if(ch==3) vfind();
  573.             if(ch==4) vdel();
  574.             if(ch==5) yuanwrite();
  575.             if(ch==6) word();
  576.             if(ch==7) namewrite();
  577.             if(ch==8) passwrite();
  578.             if(ch==10) vsay();
  579.             if(ch==9)//9放在最后才能退出账户
  580.             {
  581.                 yesno='n';
  582.                 system("cls");
  583.                 return ;
  584.                         }                        
  585.         }
  586.         if(vhuser[vname] == "普通用户")
  587.         {
  588.             yesno='y';
  589.             ch=0;
  590.             cout<<"欢迎您回到首页,尊敬的用户 "<<vname<<",您的用户组为 "<<vhuser[vname]<<endl;
  591.             Sleep(1000);
  592.             system("cls");
  593.             cout<<"------欢迎来到商家助理 V3.0------"<<endl;
  594.             cout<<"请选择您需要使用的功能:"<<endl;
  595.             cout<<"1.计算功能 2.添加商品 3.商品查价"<<endl;
  596.             cout<<"4.智能账本 5.修改昵称 6.修改密码"<<endl;
  597.             cout<<"7.退出账户 8.升级日志" <<endl;
  598.             cout<<"请输入您的选择:";
  599.             cin>>ch;
  600.             if(ch==1) clac();
  601.             if(ch==2) store();
  602.             if(ch==3) vfind();
  603.             if(ch==4) yuanwrite();
  604.             if(ch==5) namewrite();
  605.             if(ch==6) passwrite();
  606.             if(ch==8) vsay();
  607.             if(ch==7)//9放在最后才能退出账户
  608.             {
  609.                 yesno='n';
  610.                 system("cls");
  611.                 return ;
  612.                         }                          
  613.         }
  614.         if(vhuser[vname] == "禁止访问")
  615.         {
  616.             ch=0;
  617.             cout<<"欢迎您回来,尊敬的用户 "<<vname<<",您的用户组为 "<<vhuser[vname]<<endl;
  618.             Sleep(1000);
  619.             system("cls");
  620.             cout<<"------欢迎来到商家助理 V3.0------"<<endl;
  621.             cout<<"提醒:您的账户已被封禁"<<endl;
  622.             cout<<"1.退出账户"<<endl;
  623.             cin>>ch;
  624.             if(ch==1)
  625.             {
  626.                 cout<<"1秒后即将退出账户,感谢您的使用"<<endl;
  627.                 Sleep(1000);
  628.                 system("cls");
  629.                 yesno='n';
  630.                 return ;
  631.             }
  632.         }
  633.     }
  634.         
  635. }
  636. int main()
  637. {
  638.     huser ["Admin"]=123456;
  639.     vhuser ["Admin"]="管理团队";
  640.     start();
  641.     vspeak();
  642.     hello();
  643.     while(true)
  644.     {
  645.             work1();
  646.     }
  647. }
复制代码

就是只在work1函数中的输入密码环节设置输入内容为“*”,后面输入完了就解除(不过不要那种按退格键或者回车键就自动加一个字符的那种)
抱歉,给大家添麻烦了
最佳答案
2023-1-2 17:47:51
本帖最后由 人造人 于 2023-1-2 17:50 编辑

我没有找到通用的方法
这个代码不知道windows能不能用
dev-cpp的话应该能用吧

  1. #include <stdio.h>
  2. #include <termios.h>
  3. #include <unistd.h>
  4. #include <stdbool.h>

  5. void echo(bool enable) {
  6.     struct termios attr;
  7.     tcgetattr(STDOUT_FILENO, &attr);
  8.     attr.c_lflag &= ~(ICANON | ECHO);
  9.     if(enable) attr.c_lflag |= ICANON | ECHO;
  10.     tcsetattr(STDOUT_FILENO, TCSANOW, &attr);
  11. }

  12. void get_passwd(char buff[], size_t size, bool display_star) {
  13.     if(size == 0) return;
  14.     echo(false);
  15.     for(size_t i = 0; i < size - 1; ++i) {
  16.         int ch = getchar();
  17.         if(ch == '\n' || ch == EOF) break;
  18.         *buff++ = ch;
  19.         if(display_star) putchar('*');
  20.     }
  21.     *buff = '\0';
  22.     putchar('\n');
  23.     echo(true);
  24. }

  25. int main(void) {
  26.     char buff[1024];
  27.     printf("请输入密码:");
  28.     get_passwd(buff, 1024, true);
  29.     puts(buff);
  30.     printf("请输入名字:");
  31.     scanf("%s", buff);
  32.     puts(buff);
  33.     return 0;
  34. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-1-2 17:06:42 | 显示全部楼层
本帖最后由 tommyyu 于 2023-1-2 17:14 编辑

可以使用getch函数来实现,但是局限性可能比较大

点评

具体?  发表于 2023-1-2 17:08
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-2 17:08:14 | 显示全部楼层
应该可以实现吧

点评

可以的,但都不适用于我的代码  发表于 2023-1-2 17:09
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-2 17:08:18 | 显示全部楼层
tommyyu 发表于 2023-1-2 17:06
可以使用getch函数来实现,但是局限性可能比较大

具体?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-2 17:10:21 | 显示全部楼层
个人认为可能是 cout, cin 的问题

点评

雀食有可能,所以该咋改?  发表于 2023-1-2 17:11
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-2 17:16:14 | 显示全部楼层
代码有点混乱,我整理整理
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-2 17:22:32 | 显示全部楼层
不说 work1 输入密码的问题,首先我感觉这个代码的逻辑特别奇怪,您可以顺着这个代码的逻辑模拟一遍,来排查一些问题吗?

点评

好吧,我KK  发表于 2023-1-2 17:23
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-2 17:24:04 | 显示全部楼层
yesno是干啥的?

点评

就是判断是否要输出登陆界面(因为第一次登录后就不用再登陆了嘛,这一跳到其它函数,再回来就会重新输出登陆界面,就为了防止这个的)  发表于 2023-1-2 17:28
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-2 17:31:13 | 显示全部楼层
本帖最后由 tommyyu 于 2023-1-2 17:32 编辑
  1. #include<conio.h>
  2. #include<string>
  3. using namespace std;
  4. int main()
  5. {
  6.         string password;
  7.         char c;
  8.         while((c = getch())) {
  9.                 if(c == '\r') break; //mac和windows是\r,linux是\n
  10.                 if(!('a' <= c && c <= 'z') && \
  11.                    !('A' <= c && c <= 'Z') && \
  12.                    !('0' <= c && c <= '9') && \
  13.                    c != '!' && c != '@' && c != '#' && c != '$' && c != '%' && c != '^' && c != '&' && c != '*' && c != '(' \
  14.                 && c != ')' && c != '[' && c != ']' && c != '{' && c != '}' && c != '_' && c != '-' && c != '+' && c != '=' \
  15.                 && c != '|' && c != '\\'&& c != '`' && c != '~' && c != ';' && c != ':' && c != '\''&& c != '"' && c != ',' \
  16.                 && c != '.' && c != '<' && c != '>' && c != '?' && c != '/' && c != 8) continue;
  17.                 else if(c == 8) {
  18.                         if(password.length() != 0) {
  19.                                 printf("\b");
  20.                                 printf(" ");
  21.                                 printf("\b");
  22.                                 password.erase(password.length()-1, 1);
  23.                         }
  24.                 }
  25.                 else {
  26.                         password += c;
  27.                     printf("*", c);
  28.                 }
  29.         }
  30.         printf("\n%s", password.c_str());
  31.         return 0;
  32. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-2 17:31:50 | 显示全部楼层
517行:
  1. if(yesno='y')
复制代码

一看即错

而且加上也不对,因为 yesno 一开始初始化为 'n' ,对吧,而且start,vspeak,hello不会影响 yesno, 所以 work1 什么都没有 work
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-2 17:33:19 | 显示全部楼层

楼主的意思是改这个代码,在不破坏本意的情况也达到那种星号的效果

不过我觉得改代码本身的bug就得占8成的时间了

点评

本身测试没有bug哦~  发表于 2023-1-2 17:45
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-2 17:34:07 | 显示全部楼层
zhangjinxuan 发表于 2023-1-2 17:33
楼主的意思是改这个代码,在不破坏本意的情况也达到那种星号的效果

不过我觉得改代码本身的bug就得占8 ...

我都懒得看源码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-2 17:39:23 | 显示全部楼层
tommyyu 发表于 2023-1-2 17:34
我都懒得看源码

不想改了,bug又多,格式又有点……



【给楼主说的话】
我的意思是说建议加一些注释
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-2 17:42:14 | 显示全部楼层
tommyyu 发表于 2023-1-2 17:40
大概看了看程序,好像没有设计登录/注册这一部分

注册有,登陆似乎也有,但是好像没有在适当的位置进行调用,也就导致了程序连密码都没有输入就歇菜了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-2 17:42:19 | 显示全部楼层
zhangjinxuan 发表于 2023-1-2 17:33
楼主的意思是改这个代码,在不破坏本意的情况也达到那种星号的效果

不过我觉得改代码本身的bug就得占8 ...

本身测试没有bug哦~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-2 17:47:51 | 显示全部楼层    本楼为最佳答案   
本帖最后由 人造人 于 2023-1-2 17:50 编辑

我没有找到通用的方法
这个代码不知道windows能不能用
dev-cpp的话应该能用吧

  1. #include <stdio.h>
  2. #include <termios.h>
  3. #include <unistd.h>
  4. #include <stdbool.h>

  5. void echo(bool enable) {
  6.     struct termios attr;
  7.     tcgetattr(STDOUT_FILENO, &attr);
  8.     attr.c_lflag &= ~(ICANON | ECHO);
  9.     if(enable) attr.c_lflag |= ICANON | ECHO;
  10.     tcsetattr(STDOUT_FILENO, TCSANOW, &attr);
  11. }

  12. void get_passwd(char buff[], size_t size, bool display_star) {
  13.     if(size == 0) return;
  14.     echo(false);
  15.     for(size_t i = 0; i < size - 1; ++i) {
  16.         int ch = getchar();
  17.         if(ch == '\n' || ch == EOF) break;
  18.         *buff++ = ch;
  19.         if(display_star) putchar('*');
  20.     }
  21.     *buff = '\0';
  22.     putchar('\n');
  23.     echo(true);
  24. }

  25. int main(void) {
  26.     char buff[1024];
  27.     printf("请输入密码:");
  28.     get_passwd(buff, 1024, true);
  29.     puts(buff);
  30.     printf("请输入名字:");
  31.     scanf("%s", buff);
  32.     puts(buff);
  33.     return 0;
  34. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-2 17:51:18 | 显示全部楼层
zhangjinxuan 发表于 2023-1-2 17:42
注册有,登陆似乎也有,但是好像没有在适当的位置进行调用,也就导致了程序连密码都没有输入就歇菜了

我是真没找到登陆在哪
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-2 17:52:00 | 显示全部楼层
那我还是忙我的帖子吧

点评

好滴(个人想法:这次更新先不更新隐藏密码了,下次再说吧) 不打扰了~  发表于 2023-1-2 17:53
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-2 17:56:59 | 显示全部楼层
tommyyu 发表于 2023-1-2 17:51
我是真没找到登陆在哪

好像是没有,我们好像都没有理解楼主的意思
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 00:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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