西电图图 发表于 2016-3-16 21:26:03

怎样消除因按回车键被scanf_s指令当做字符放在数组中的错误

#include<stdio.h>
void main()
{
        int c = 0;
        char cLine[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        char cAimline = "0000";
s:        printf("请输入您需要加密的密码:\n");
        for (c=0;c<7;c++)
        {
                scanf_s("%c",&cAimline);
                if ((cAimline<'A') || (cAimline>'Z'))
                {
                        printf("你输入的字符有错误\n");
                        goto s;
                }
        }
       
        for (c=0;c<7;c++)
        {
                if ((cAimline<'A') || (cAimline>'Z'))
                {
                        printf("你输入的第%d字符有错误\n",c+1);
                }
        }

        for (c = 0; c < 7; c++)
        {
                if ((cAimline != 'Y') && (cAimline != 'Z'))
                {
                        cAimline = cAimline + 2;
                }
                else
                {
                        if (cAimline = 'Y')
                        {
                                cAimline = 'A';
                        }
                        else
                        {
                                cAimline = 'B';
                        }
                }
        }
        printf("您获得的密令如下:\n");
        for (c = 0; c < 7; c++)
        {
                printf("%c",cAimline);
        }
       
        printf("\n");
}

夜雨de街灯 发表于 2016-3-16 21:26:04

你是想要输入8位密码,然后把它翻译为向前两位吧~
A变C,B变D......Y变A,Z变B~

#include<stdio.h>
void main()
{
      int c = 0;
      char cLine[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";//这句话没引用过...可以删
      char cAimline = "0000";      //要初始化直接"0",后面数组的数,系统直接默认0
s:      printf("请输入您需要加密的密码:\n");
      for (c=0;c<7;c++)                //你要8位的密码,那7就改成8,或者c<=7
      {
                scanf_s("%c",&cAimline);//直接用scanf
                if ((cAimline<'A') || (cAimline>'Z'))
                {
                        printf("你输入的字符有错误\n");
                        goto s;
                }
      }
      
      for (c=0;c<7;c++)               //这句也没用,前面的循环语句已经确定了没有错误才接着运行这句循环语句,所以这句没用了
      {
                if ((cAimline<'A') || (cAimline>'Z'))
                {
                        printf("你输入的第%d字符有错误\n",c+1);
                }
      }

      for (c = 0; c < 7; c++)         //你要8位的密码,那7就改成8,或者c<=7
      {
                if ((cAimline != 'Y') && (cAimline != 'Z'))
                {
                        cAimline = cAimline + 2;
                }
                else
                {
                        if (cAimline = 'Y')
                        {
                              cAimline = 'A';
                        }
                        else
                        {
                              cAimline = 'B';
                        }
                }
      }
      printf("您获得的密令如下:\n");
      for (c = 0; c < 7; c++)          //你要8位的密码,那7就改成8,或者c<=7
      {
                printf("%c",cAimline);
      }
      
      printf("\n");
}

laoniyouxi123 发表于 2016-3-17 11:30:37

scanf_s("%c",&cAimline);改为 scanf_s("%c",&cAimline,c);
你试试

laoniyouxi123 发表于 2016-3-17 11:31:15

第三个参数是数组的缓冲区

laoniyouxi123 发表于 2016-3-17 11:33:01

不好意思,我弄错了
scanf_s("%c",&cAimline);
应改为 scanf_s("%c",&cAimline,8);
你试试,

laoniyouxi123 发表于 2016-3-17 11:34:27


很抱歉,新手初来乍到,犯错误了,最后一次改正
scanf_s("%c",&cAimline);
应改为 scanf_s("%c",&cAimline,7);

西电图图 发表于 2016-3-17 16:11:46

laoniyouxi123 发表于 2016-3-17 11:34
很抱歉,新手初来乍到,犯错误了,最后一次改正
scanf_s("%c",&cAimline);
应改为 scanf_s("%c",&cA ...

问题解决了,能回答一下为什么是7而不是8吗

laoniyouxi123 发表于 2016-3-19 13:41:36

这说明你的数组基础没过关
char cAimline = "0000";
你使用该语句开辟了8个数组元素,即 cAimline='0', cAimline='0',........ cAimline='0'
for (c=0;c<7;c++)                //你要8位的密码,那7就改成8,或者c<=7
而这个语句是从 0 开始的,,0到6,总共就是7个数,所以是7

laoniyouxi123 发表于 2016-3-27 04:00:23

{:10_257:}
页: [1]
查看完整版本: 怎样消除因按回车键被scanf_s指令当做字符放在数组中的错误