C语言中'\0'的分析,以及我怎么实现用户修改密码问题

#include"stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"

void num()
{ char A[7];
int i,flag=0;

R: system("cls");

printf("\t******欢迎进入登录系统******\n");

printf("\n");
printf("\n");

printf("***********用户名:hellow\n");

printf("***********密码:");

for(i=0;i<=5;i++)

{
A[i]=getch();

printf("*");

}

A[6]='\0';

getchar();
getchar();

if(strcmp(A,"123456")==0)

{
printf("\t\t密码正确正在登录系统....\n");

printf("\t\t请输入回车键继续\n");

getchar();

}

else

{
flag++;

printf("你还有%d次机会\n",3-flag);

printf("\t\t请输入回车键继续\n");

getchar();

if(flag<3)

{
goto R;
}

}

}

void main()
{
int a;

printf("*********欢迎**********\n");

printf("\n");
printf("\n");

printf("\t*******1登录*******\n");

printf("\n");
printf("\n");
printf("\n");

scanf("%d",&a);

switch (a)
{
case 1:
num();
break;

}

}
在这个程序中, A[6]='\0';应该是表示字符串结束的操作,我不清楚它内部是如何执行的,我删除这个语句后,在运行时第一次输入正确密码后按回车他就跳到else语句了(请各位回答getchar()的执行流程),第二次输入正确密码后要按两次回车才跳到else语句(我可以认为是受getchar()影响吗,请各位回答第一二次回车getchar()执行的流程)第三次和第二次输入情况一样的;

然后考虑A[6]='\0';我交换了getchar()和A[6]='\0';的先后顺序,发现输入密码时只有
getchar();
getchar();
A[6]='\0';
是要输入四次回车的:1换行;2执行if语句;3Press any key to continue;4跳出程序;

其他顺序是:1执行if语句;2Press any key to continue;3跳出程序;

请解释原因;
我不明白A[6]='\0';是说明A只接收6个字符吗?那A的最高限度是7个字符吧,还剩了怎么办(\0是否限定了A的范围,6个字符后默认不接受了)那么我可否用\0规定A的接收范围呢?例如在A里我让它接收的第二个和第五个里面的字符行吗?这个如何实现的;

还有A[6]='\0';没有了之后,strcmp()接收A时是不是123456后面一个默认为无意义的值呢,我想研究字符串时,我把for()和getchar()和strcmp()删除掉后,用scanf()和printf()测试时发现都是无意义的乱码,我把getchar()和strcmp()删除掉后,输出时出了两个乱码,我觉得这是我对字符串的长度不理解;

我听了郝斌的C语言,但读这个程序时出现上述问题,请问我应该看什么视频来提高了

第1个回答  2015-06-13
第一:getchar()以及scanf()这两个函数涉及到文件I/O,不知你是否知道,scanf()这个函数是有bug,我们通常少用,如果要用的话必须写相应代码来优化(涉及到I/O流操作),否则只能按照输入正确的格式输入,如果不是,那么下次输入就会出现乱码,具体怎么处理可以百度scanf这个函数。你的程序问题应该就出现在scanf这个函数的bug上
第二:A[6] = '\0'; '\0'只是一个字符串结束符,在你的程序中应该是预防A[6]这个数组不是存的一个字符串
第三:C语言在你什么不懂的时候可以看视频,明白了一些基本的语法知识后应该大量的写代码,调试,在调试会有很多问题的,遇到问题解决问题才能学到真正的知识。不是看就能会的。还有什么不懂可以继续交流···追问

第一:我测试时用的是scanf();嗯等我有时间我会处理的;
第二:初始状态是数组A[7];表示该数组有7个字符串元素;\0使A在输入第六个元素时终止,对不对,这个程序怎么是预防它存放的是字符串呢,有什么意义,目前我只懂得字符得用‘a’,字符串用“a”输入;不知道数字是否是字符;
第三:哪个人的视频呢?

追答

我就没明白你第二个问题,getchar()这个函数就是从标准输入(说白了就是键盘)获得一个字符,你循环6次获得6个字符,把每一个字符依次存放在A这个数组。可是这个时候还仅仅是字符数组,根本不是字符串,所以要加一个字符串结束符A[6] = ‘\0’,这样数组A就是一个字符串数组了,这样你进行字符串的操作,比如后面的strcmp()函数。再去看看C语言字符串相关内容。。。你现在还处于问题都还不会问的阶段

第三:链接:http://pan.baidu.com/s/1dDGqESL 密码:j133
这个是我百度云盘上C语言视频,我没看过,不知道怎么样,你有兴趣可以下载下来看看,希望会有帮组

第2个回答  2015-06-13
A[6]='\0' 表示字符串结束!字符串定义长度为7,第七位,就是 A[6],"\0"是一个字符!是个空标志!

getchar() 表示从键盘输入一个字符

for(i=0;i<=5;i++)

{
A[i]=getch();

printf("*");

}
这一段代码,表示你已经利用键盘输入了6个字符,如果按你说的,进行调换,那么第7个字符就不再是"\0"标志位,而是你从键盘输入的那一个字符,所以,调试程序时会出错!

具体的一些东西,你可以查看一下,C语言中关于字符串存放的一些知识!上面有详细的解释!追问

getchar()你说得不对吧,getchar();
getchar();
A[6]='\0';调换后,执行后没有出错,多了个回车;

追答

getchar()这个函数,我在编程中用的不多!所以,没法给出比较理想的答案!

我在编程过程中,getchar(),我只在 实现“按任意键继续”这个功能时用到!

关于 C语言的函数,在网上有好多解释,多百度一下,应该会有你所需要的!

本回答被网友采纳
相似回答