标题:注册之后登陆错误,我试了一下注册时的两个数组输入后存储的是乱码,求大神 ...
只看楼主
我爱南京
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-5-24
结帖率:0
已结贴  问题点数:20 回复次数:6 
注册之后登陆错误,我试了一下注册时的两个数组输入后存储的是乱码,求大神指正代码哪里错了
#include <stdio.h>
#include <string.h>
#include <windows.h>
void welcome ()
{
 system ("color F9");
 printf ("\n\n\n\n\n\n");
 printf ("                    ======================================\n");
    printf ("                    ===============考试系统===============\n");
 printf ("                    ======================================\n");
 Sleep (2000);
}
void myregister(char username[30],char password[30])
{
 system ("cls");
  printf ("                    ======================================\n");
    printf ("                    ===============用户注册===============\n");
 printf ("                    ======================================\n");
 Sleep (1000);
 printf ("请先注册再使用本系统!\n");
 printf ("请输入用户名\n");
 scanf ("%s",&username);
 printf ("请输入密码\n");
 scanf ("%s",&password);
 Sleep (1000);
}
void mylogin (char username[30],char password[30])
{
  char username1[30];
     char password1[30];
  system ("cls");
  printf("注册成功!请登录!\n");
  while(1)
   {
    printf ("请输入用户名\n");
    scanf ("%s",&username1);
    printf ("请输入密码\n");
    scanf ("%s",&password1);
    getchar ();
    if (strcmp(username,username1)==0&&strcmp(password,password1)==0)
     {
      printf ("登陆成功\n");
      printf ("欢迎使用本系统!\n");
      Sleep (1000);
      system ("cls");
      break;
     }
     else {
      printf ("用户名或密码错误,请重新登陆\n");
      Sleep (1000);
      system ("cls");
     }
   }
}
int examin (char exam[5][7][100])
{
 int j,i,score;
 printf ("C语言考试开始\n");
  Sleep (3000);
  for (j=0;j<5;j++)
 {for (i=0;i<5;i++)
  printf ("%s\n",exam[j][i]);
  printf ("请输入答案:\n");
  gets (exam[j][6]);
 if (strcmp(exam[j][5],exam[j][6])==0)
  {
   printf ("回答正确\n");
   score=score+20;
  }
  else printf ("回答错误\n");
 Sleep (2000);
 system ("cls");
 }
 return score;
}
int main(int argc, char *argv[])
{
 int i,score=0,j;
 char username[30];
 char password[30];
 char exam[5][7][100]={
   {{"1 以下叙述中错误的是(    )"},
        {"A.使用三种基本结构构成的程序只能解决简单问题"},
        {"B.结构化程序由顺序、分支、循环三种基本结构组成"},
        {"C.C语言是一种结构化程序设计语言"},
        {"D.结构化程序设计提倡模块化的设计方法"},
        {"A"},
        {""}},
       {{"2 以下选项中关于程序模块化的叙述错误的是(    )"},
        {"A.可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序"},
        {"B.把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块"},
        {"C.把程序分成若干相对独立的模块,可便于编码和调试"},
        {"D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序"},
        {"A"},
        {""}},
       {{"3 关于算法,以下叙述中错误的是(    )"},
        {"A.某个算法可能会没有输入"},
        {"B.某个算法可能会有零个或多个输入"},
        {"C.一个算法对于某个输入的循环次数是可以事先估计出来的"},
        {"D.任何算法都能转换成计算机高级语言的程序,并在有限时间内运行完毕"},
        {"D"},
        {""}},
       {{"4 C语言程序的模块化通过以下哪个选项来实现(    )"},
        {"A.变量"},
        {"B.函数"},
        {"C.程序行"},
        {"D.语句"},
        {"B"},
        {""}},
       {{"5 以下不能用于描述算法的是(    )"},
        {"A.文字叙述"},
        {"B.程序语句"},
        {"C.伪代码和流程图"},
        {"D.E-R图"},
        {"D"},
        {""}}
      };
 welcome ();
 myregister(username,password);
 mylogin (username,password);
 score=examin (exam);
 printf ("考试结束,您的成绩为:%d\n",score);
 return 0;
}
搜索更多相关主题的帖子: 注册 输入 printf char 模块 
2018-05-24 15:03
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:10 
scanf("%s", username);//去掉取址
2018-05-24 15:12
我爱南京
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-5-24
得分:0 
回复 2楼 grmmylbs
感谢!!!那为什么把所有代码都写在主函数里面,加上取地址就是正确的。
#include <stdio.h>
#include <string.h>
#include <windows.h>
int main(int argc, char *argv[])
{
 int i,score=0,j;
 char username[30];
 char password[30];
 char username1[30];
 char password1[30];
 char exam[5][7][100]={
   {{"1 以下叙述中错误的是(    )"},
        {"A.使用三种基本结构构成的程序只能解决简单问题"},
        {"B.结构化程序由顺序、分支、循环三种基本结构组成"},
        {"C.C语言是一种结构化程序设计语言"},
        {"D.结构化程序设计提倡模块化的设计方法"},
        {"A"},
        {""}},
       {{"2 以下选项中关于程序模块化的叙述错误的是(    )"},
        {"A.可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序"},
        {"B.把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块"},
        {"C.把程序分成若干相对独立的模块,可便于编码和调试"},
        {"D.可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序"},
        {"A"},
        {""}},
       {{"3 关于算法,以下叙述中错误的是(    )"},
        {"A.某个算法可能会没有输入"},
        {"B.某个算法可能会有零个或多个输入"},
        {"C.一个算法对于某个输入的循环次数是可以事先估计出来的"},
        {"D.任何算法都能转换成计算机高级语言的程序,并在有限时间内运行完毕"},
        {"D"},
        {""}},
       {{"4 C语言程序的模块化通过以下哪个选项来实现(    )"},
        {"A.变量"},
        {"B.函数"},
        {"C.程序行"},
        {"D.语句"},
        {"B"},
        {""}},
       {{"5 以下不能用于描述算法的是(    )"},
        {"A.文字叙述"},
        {"B.程序语句"},
        {"C.伪代码和流程图"},
        {"D.E-R图"},
        {"D"},
        {""}}
      };
 system ("color F9");
 printf ("\n\n\n\n\n\n");
 printf ("                    ======================================\n");
    printf ("                    ===============考试系统===============\n");
 printf ("                    ======================================\n");
 Sleep (2000);
 system ("cls");
 printf ("\n\n\n\n\n\n");
  printf ("                    ======================================\n");
    printf ("                    ===============用户注册===============\n");
 printf ("                    ======================================\n");
 Sleep (1000);
 system ("cls");
 printf ("请先注册再使用本系统!\n");
 printf ("请输入用户名\n");
 scanf ("%s",&username);
 printf ("请输入密码\n");
 scanf ("%s",&password);
 Sleep (1000);
 system ("cls");
 printf("注册成功!请登录!\n");
  while(1)
   {
    printf ("请输入用户名\n");
    scanf ("%s",&username1);
    printf ("请输入密码\n");
    scanf ("%s",&password1);
    getchar ();
    if (strcmp(username,username1)==0&&strcmp(password,password1)==0)
     {
      printf ("登陆成功\n");
      printf ("欢迎使用本系统!\n");
      Sleep (1000);
      system ("cls");
      break;
     }
     else {
      printf ("用户名或密码错误,请重新登陆\n");
      Sleep (1000);
      system ("cls");
     }
   }
 printf ("C语言考试开始\n");
 Sleep (3000);
 for (j=0;j<5;j++)
 {for (i=0;i<5;i++)
  printf ("%s\n",exam[j][i]);
  printf ("请输入答案:\n");
  gets (exam[j][6]);
 if (strcmp(exam[j][5],exam[j][6])==0)
  {
   printf ("回答正确\n");
   score=score+20;
  }
  else printf ("回答错误\n");
 Sleep (2000);
 system ("cls");
 }
 printf ("考试结束,您的成绩为:%d\n",score);
 return 0;
}
2018-05-24 15:19
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:0 
个人理解:
对数组名取址,得到的是整个数组的首地址,比如username + 1 和(&username)+1偏移量应该是不同的。
但传给函数时是以指针形式传递,你再对指针取址,那么改变的是指针地址的值,不是内容的值。
2018-05-24 15:44
我爱南京
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-5-24
得分:0 
回复 4楼 grmmylbs
感谢!
2018-05-24 15:47
应惜红颜
Rank: 2
等 级:论坛游民
帖 子:35
专家分:27
注 册:2018-5-20
得分:10 
这个成绩算出来是正确的吗?score是不是在最开始要让他等于0

[此贴子已经被作者于2018-5-24 16:16编辑过]


嶙峋
2018-05-24 16:13
我爱南京
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-5-24
得分:0 
回复 6楼 应惜红颜
对,要赋0,我在定义的时候就已经给赋值0了
2018-05-25 07:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-487230-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.343588 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved