鱼C论坛

 找回密码
 立即注册
查看: 3619|回复: 11

[已解决]新手求助

[复制链接]
发表于 2016-3-7 06:42:05 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
#include<conio.h>
extern int F();
extern int G();
extern int H(char x, char y);
extern char A[];
extern int B[];
extern int C[];

int main()
{
Doop:        int a, b;
        printf("请选择(相应的数字);\n");
        printf("1.设定密码;\n");
        printf("2.验证密码;\n");
        scanf_s("%d", &a);
        if (a == 1)
        {
                b = F();
Loop:    if (b == 1)
                {
                        printf("两次输入不同;请重新输入;");
                        goto Loop;
                }
                 printf("设定成功;\n");
        }

        else if (a == 2)
        {
Soop:                b = G();
                if (b == 1)
                {
                        printf("输入错误;请重新输入;");
                        goto Soop;
                }
                printf("输入正确");
        }
        else
        {
                printf("选择错误请重新选择;");
                        goto Doop;
        }
}

int F()
{
        printf("请设定密码:\n");
        int i,o;
        for (i = 0; i < 11; i++)//第一次输入密码
        {
                scanf_s("%c",A[i]);//获取字符
                if (A[i] = 13) break;//输入回车键跳出循环
                printf("*");
        }
        printf("请再次输入密码:\n");
        for (i = 0; i < 11; i++)//再次输入密码
        {
                scanf_s("%c",&B[i]);//获取字符
                if (B[i] = 13) break;//输入回车键跳出循环
                printf("*");
        }
        for (i = 0; i < 11; i++)
        {
                o = H(A[i], B[i]);//判断两次输入是否相等;
                if(o == 1) return 1;//不相等时的返回值;
        }
        return 0;
}


int G()
{
        printf("请输入密码");
        int i,o;
                for (i = 0; i < 11; i++)//
                {
                        scanf_s("%c", &C[i]);//获取字符
                        if (C[i] = 13) break;//输入回车键跳出循环
                        printf("*");
                }
                for (i = 0; i < 11; i++)
                {
                        o = H(A[i], C[i]);
                        if (o == 1) return 1;
                }
                return 0;
}


int H(char x,char y)
{
        int i;
        for (i = 0; i < 11; i++)
        {
                if (x != y) return 1;
        }
        return 0;
}





求告知我哪错了。。。我就是运行不了
最佳答案
2016-3-7 10:05:02
  1. #include<stdio.h>
  2. #include<conio.h>
  3. extern int F();
  4. extern int G();
  5. extern int H(char x, char y);
  6. //extern char A[];
  7. //extern int B[];
  8. //extern int C[];
  9. char A[12] = {0};                // MODIFY BY n0noper NOTE:这里你只给了这一个文件,我们没法用,方便调试所以改了
  10. char B[12] = {0};
  11. char C[12] = {0};

  12. int main()
  13. {
  14. Doop:        int a, b;
  15.         printf("请选择(相应的数字);\n");
  16.         printf("1.设定密码;\n");
  17.         printf("2.验证密码;\n");
  18.         scanf_s("%d", &a);
  19.         if (a == 1)
  20.         {
  21. Loop:                b = F();
  22.             if (b == 1)                        // MODIFY BY n0noper NOTE: Loop标识上移
  23.                  {
  24.                          printf("两次输入不同;请重新输入;");
  25.                          goto Loop;
  26.                  }
  27.                  printf("设定成功;\n");
  28.         }

  29.         else if (a == 2)
  30.         {
  31. Soop:                b = G();
  32.                 if (b == 1)
  33.                 {
  34.                         printf("输入错误;请重新输入;");
  35.                         goto Soop;
  36.                 }
  37.                 printf("输入正确");
  38.         }
  39.         else
  40.         {
  41.                 printf("选择错误请重新选择;");
  42.                 goto Doop;
  43.         }
  44. }

  45. int F()
  46. {
  47.         printf("请设定密码:\n");
  48.         fflush(stdin);                        // ADD BY n0noper NOTE: 清除输入缓存,防止上次输入结果的影响
  49.         int i,o;
  50.         for (i = 0; i < 11; i++)//第一次输入密码
  51.         {
  52.                 A[i] = (char)getch();        //                scanf_s("%c", &A[i]);//获取字符                                // MODIFY BY n0noper NOTE:&A[i] -> A[i]
  53.                 if (13 == A[i])        break;        //                if (A[i] = 13) break;        //输入回车键跳出循环        // MODIFY BY n0noper NOTE:下次注意!
  54.                 printf("*");
  55.         }
  56.         printf("请再次输入密码:\n");
  57.         fflush(stdin);                        // ADD BY n0noper NOTE: 清除输入缓存,防止上次输入结果的影响
  58.         for (i = 0; i < 11; i++)//再次输入密码
  59.         {
  60.                 B[i] = (char)getch();        //                scanf_s("%c",&B[i]);//获取字符                                // MODIFY BY n0noper NOTE:scanf不会自动停止
  61.                 if (13 == B[i]) break;        //                if (B[i] = 13) break;//输入回车键跳出循环                // MODIFY BY n0noper NOTE:下次注意!
  62.                 printf("*");
  63.         }
  64.         for (i = 0; i < 11; i++)
  65.         {
  66.                 o = H(A[i], B[i]);//判断两次输入是否相等;
  67.                 if(o == 1) return 1;//不相等时的返回值;
  68.         }
  69.         return 0;
  70. }


  71. int G()
  72. {
  73.         printf("请输入密码:");
  74.         fflush(stdin);                        // ADD BY n0noper NOTE: 清除输入缓存,防止上次输入结果的影响
  75.         int i,o;
  76.         for (i = 0; i < 11; i++)//
  77.         {
  78.                 C[i] = (char)getch();        //                scanf_s("%c", &C[i]);//获取字符                                // MODIFY BY n0noper
  79.                 if (C[i] = 13) break;//输入回车键跳出循环
  80.                 printf("*");
  81.         }
  82.         for (i = 0; i < 11; i++)
  83.         {
  84.                 o = H(A[i], C[i]);
  85.                 if (o == 1) return 1;
  86.         }
  87.         return 0;
  88. }


  89. int H(char x,char y)
  90. {
  91.         int i;
  92. //        for (i = 0; i < 11; i++)                        // NOTE:这个循环不要闹
  93.         {
  94.                 if (x != y) return 1;
  95.         }
  96.         return 0;
  97. }

  98. // 有什么问题,再讨论。
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-3-7 10:05:02 | 显示全部楼层    本楼为最佳答案   
  1. #include<stdio.h>
  2. #include<conio.h>
  3. extern int F();
  4. extern int G();
  5. extern int H(char x, char y);
  6. //extern char A[];
  7. //extern int B[];
  8. //extern int C[];
  9. char A[12] = {0};                // MODIFY BY n0noper NOTE:这里你只给了这一个文件,我们没法用,方便调试所以改了
  10. char B[12] = {0};
  11. char C[12] = {0};

  12. int main()
  13. {
  14. Doop:        int a, b;
  15.         printf("请选择(相应的数字);\n");
  16.         printf("1.设定密码;\n");
  17.         printf("2.验证密码;\n");
  18.         scanf_s("%d", &a);
  19.         if (a == 1)
  20.         {
  21. Loop:                b = F();
  22.             if (b == 1)                        // MODIFY BY n0noper NOTE: Loop标识上移
  23.                  {
  24.                          printf("两次输入不同;请重新输入;");
  25.                          goto Loop;
  26.                  }
  27.                  printf("设定成功;\n");
  28.         }

  29.         else if (a == 2)
  30.         {
  31. Soop:                b = G();
  32.                 if (b == 1)
  33.                 {
  34.                         printf("输入错误;请重新输入;");
  35.                         goto Soop;
  36.                 }
  37.                 printf("输入正确");
  38.         }
  39.         else
  40.         {
  41.                 printf("选择错误请重新选择;");
  42.                 goto Doop;
  43.         }
  44. }

  45. int F()
  46. {
  47.         printf("请设定密码:\n");
  48.         fflush(stdin);                        // ADD BY n0noper NOTE: 清除输入缓存,防止上次输入结果的影响
  49.         int i,o;
  50.         for (i = 0; i < 11; i++)//第一次输入密码
  51.         {
  52.                 A[i] = (char)getch();        //                scanf_s("%c", &A[i]);//获取字符                                // MODIFY BY n0noper NOTE:&A[i] -> A[i]
  53.                 if (13 == A[i])        break;        //                if (A[i] = 13) break;        //输入回车键跳出循环        // MODIFY BY n0noper NOTE:下次注意!
  54.                 printf("*");
  55.         }
  56.         printf("请再次输入密码:\n");
  57.         fflush(stdin);                        // ADD BY n0noper NOTE: 清除输入缓存,防止上次输入结果的影响
  58.         for (i = 0; i < 11; i++)//再次输入密码
  59.         {
  60.                 B[i] = (char)getch();        //                scanf_s("%c",&B[i]);//获取字符                                // MODIFY BY n0noper NOTE:scanf不会自动停止
  61.                 if (13 == B[i]) break;        //                if (B[i] = 13) break;//输入回车键跳出循环                // MODIFY BY n0noper NOTE:下次注意!
  62.                 printf("*");
  63.         }
  64.         for (i = 0; i < 11; i++)
  65.         {
  66.                 o = H(A[i], B[i]);//判断两次输入是否相等;
  67.                 if(o == 1) return 1;//不相等时的返回值;
  68.         }
  69.         return 0;
  70. }


  71. int G()
  72. {
  73.         printf("请输入密码:");
  74.         fflush(stdin);                        // ADD BY n0noper NOTE: 清除输入缓存,防止上次输入结果的影响
  75.         int i,o;
  76.         for (i = 0; i < 11; i++)//
  77.         {
  78.                 C[i] = (char)getch();        //                scanf_s("%c", &C[i]);//获取字符                                // MODIFY BY n0noper
  79.                 if (C[i] = 13) break;//输入回车键跳出循环
  80.                 printf("*");
  81.         }
  82.         for (i = 0; i < 11; i++)
  83.         {
  84.                 o = H(A[i], C[i]);
  85.                 if (o == 1) return 1;
  86.         }
  87.         return 0;
  88. }


  89. int H(char x,char y)
  90. {
  91.         int i;
  92. //        for (i = 0; i < 11; i++)                        // NOTE:这个循环不要闹
  93.         {
  94.                 if (x != y) return 1;
  95.         }
  96.         return 0;
  97. }

  98. // 有什么问题,再讨论。
复制代码


评分

参与人数 1荣誉 +3 鱼币 +5 收起 理由
~风介~ + 3 + 5 感谢楼主无私奉献!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2016-3-7 12:57:01 | 显示全部楼层

谢谢。。。不过还是有错误。。我用vs2015编译。。有三个错误。。。
严重性        代码        说明        项目        文件        行        禁止显示状态
错误        C4996        'getch': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _getch. See online help for details.        ConsoleApplication2        c:\users\administrator\desktop\新建文件夹\consoleapplication2\consoleapplication2\consoleapplication2.cpp        61       
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-7 12:58:41 | 显示全部楼层

//谢谢。。。不过还是有错误。。我用vs2015编译。。有三个错误。。。
严重性        代码        说明        项目        文件        行        禁止显示状态
错误        C4996        'getch': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _getch. See online help for details.        ConsoleApplication2        c:\users\administrator\desktop\新建文件夹\consoleapplication2\consoleapplication2\consoleapplication2.cpp        61        


//什么原因了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-7 13:03:43 | 显示全部楼层
qq738320472 发表于 2016-3-7 12:58
//谢谢。。。不过还是有错误。。我用vs2015编译。。有三个错误。。。
严重性        代码        说明   ...

那就把getch()换成_getch(); 前边加上一个下划线,都是VS太智(liu)能(mang)···
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-7 18:23:02 From FishC Mobile | 显示全部楼层
谢谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-7 18:24:04 From FishC Mobile | 显示全部楼层
n0noper 发表于 2016-3-7 13:03
那就把getch()换成_getch(); 前边加上一个下划线,都是VS太智(liu)能(mang)···

太感谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-7 18:34:26 From FishC Mobile | 显示全部楼层
n0noper 发表于 2016-3-7 13:03
那就把getch()换成_getch(); 前边加上一个下划线,都是VS太智(liu)能(mang)···

A[i] = (char)getch();         //          scanf_s("%c", &A[i]);//大神。这两个区别在哪?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-8 08:29:45 | 显示全部楼层
qq738320472 发表于 2016-3-7 18:34
A = (char)getch();         //          scanf_s("%c", &A);//大神。这两个区别在哪?

_getch()只读取一个character,但是scanf_s就不一样了,它虽然只接受一个,但是你可以输入任意多个···

1. 使用_getch()   -- 你输入的每一个字符都可以用*代替,因为它不回显(without echo),所以更方便;
2. 使用scanf_s()   -- 你可以输入一大堆东西("aabbccdd")并且给你显示出来,但是他直接第一个('a')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-9 08:34:47 From FishC Mobile | 显示全部楼层
n0noper 发表于 2016-3-8 08:29
_getch()只读取一个character,但是scanf_s就不一样了,它虽然只接受一个,但是你可以输入任意多个··· ...

再次感谢。能运行了。不雅
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-9 08:37:30 From FishC Mobile | 显示全部楼层
n0noper 发表于 2016-3-8 08:29
_getch()只读取一个character,但是scanf_s就不一样了,它虽然只接受一个,但是你可以输入任意多个··· ...

大神。我还有个问题。如何让输入的密码。保存下来。让下一次可以调用?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-9 09:38:07 | 显示全部楼层
qq738320472 发表于 2016-3-9 08:37
大神。我还有个问题。如何让输入的密码。保存下来。让下一次可以调用?

要么,全局变量 - (这种方法只是在程序没关闭之前有用)
要么,写文件 - (写配置文件了,注册表了)

你既然想"下一次可以调用",肯定是写文件了。(C语言 - 文件操作)
尝试一下,有问题再讨论。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-22 00:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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