我做了一个c语言的编程,是编写一个输入密码问题,但是总是提示错误,那位高手指点一下谢谢了。 20
#include<stdio.h>#include<string.h>intmain(){inti=0;charc,ch1[10]={"hello"},ch2[]={0,...
#include<stdio.h>
#include<string.h>
int main()
{
int i=0;
char c,ch1[10]={"hello"},ch2[]={0,0,0,0,0,0,0,0,0,0}; /*数组元素的初始值都为0(串结束标识符),在程序执行过程中可以改变其内容,同时也说明了数组ch2[]的大小为10*/
printf("请输入密码,按enter键结束:\n");
while((c=getch())&&c!=13) /*回车换行符的ASCII码值为13*/
{
putchar('*');
ch2[i++]=c;
}
if(strcmp(ch1,ch2)==0)
printf("密码正确!\n");
else
printf("密码错误!\n");
}
这个是一个只能输入一次的,并且是对的。下面的程序是我想输入可以输入三次。我加了一个do while的一个循环但是有错误,请高手指教。
#include<stdio.h>
#include<string.h>
int main()
{
int i=0;
int a=0;
char c,ch1[10]={"hello"},ch2[]={0,0,0,0,0,0,0,0,0,0}; /*数组元素的初始值都为0(串结束标识符),在程序执行过程中可以改变其内容,同时也说明了数组ch2[]的大小为10*/
do
{printf("请输入密码,按enter键结束:\n");
while((c=getch())&&c!=13) /*回车换行符的ASCII码值为13*/
{
putchar('*');
ch2[i++]=c;
}
if(strcmp(ch1,ch2)!=0)
{ a++;
printf("密码错误\n");
}
else
printf("密码正确\n");
break;
}while (a<3);
if (i<4)
printf("OK.\n");
return 0;
} 展开
#include<string.h>
int main()
{
int i=0;
char c,ch1[10]={"hello"},ch2[]={0,0,0,0,0,0,0,0,0,0}; /*数组元素的初始值都为0(串结束标识符),在程序执行过程中可以改变其内容,同时也说明了数组ch2[]的大小为10*/
printf("请输入密码,按enter键结束:\n");
while((c=getch())&&c!=13) /*回车换行符的ASCII码值为13*/
{
putchar('*');
ch2[i++]=c;
}
if(strcmp(ch1,ch2)==0)
printf("密码正确!\n");
else
printf("密码错误!\n");
}
这个是一个只能输入一次的,并且是对的。下面的程序是我想输入可以输入三次。我加了一个do while的一个循环但是有错误,请高手指教。
#include<stdio.h>
#include<string.h>
int main()
{
int i=0;
int a=0;
char c,ch1[10]={"hello"},ch2[]={0,0,0,0,0,0,0,0,0,0}; /*数组元素的初始值都为0(串结束标识符),在程序执行过程中可以改变其内容,同时也说明了数组ch2[]的大小为10*/
do
{printf("请输入密码,按enter键结束:\n");
while((c=getch())&&c!=13) /*回车换行符的ASCII码值为13*/
{
putchar('*');
ch2[i++]=c;
}
if(strcmp(ch1,ch2)!=0)
{ a++;
printf("密码错误\n");
}
else
printf("密码正确\n");
break;
}while (a<3);
if (i<4)
printf("OK.\n");
return 0;
} 展开
4个回答
展开全部
注意循环体内对ch2[]的修改,若第一次输入密码长度大于第二次输入密码长度,strcmp(ch1,ch2)的返回值可能不是程序希望的意图,即第一次输入123456,第二次输入hello,那么ch2[]里的字符串便是hello6而不是输入的hello。此外,外层的do-while循环每次执行的时候,请对i重新初始化为0,否则可能存在数组访问越界问题,并且与程序意图不符合。
更多追问追答
追问
不好意思我是初学者,您能不能帮我修改下啊,这样说我听不太懂,谢谢了。
追答
do
{
printf("请输入密码,按enter键结束:\n");
i = 0;
while((c=getch())&&c!=13) /*回车换行符的ASCII码值为13*/
{
putchar('*');
ch2[i++]=c;
}
ch2[i] = '\0';
if(strcmp(ch1,ch2)!=0)
{ a++;
printf("密码错误\n");
}
else
printf("密码正确\n");
break;
}while (a<3);
if (i<4)
printf("OK.\n");
return 0;
}
同时请自行保证输入密码的长度不超过9个普通字符。
展开全部
如果用do while 先执行循环体,然后判断循环条件,是否成立,你这样写不对。
追问
那里不对呢不能不对啊。
追答
do后边是循环体,你把循环体放在while后面了不对
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一个简单的问题不用写那么复杂额,试试下面的:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int a=0;
char c[20];
do{
printf("请输入密码,按enter键结束:\n");
scanf("%s",c);
if(strcmp(c,"hello")!=0){
a++;
printf("密码错误\n");
}
else{
printf("密码正确\n");
break;
}
}while(a<3);
if(a<3)
printf("OK.\n");
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int a=0;
char c[20];
do{
printf("请输入密码,按enter键结束:\n");
scanf("%s",c);
if(strcmp(c,"hello")!=0){
a++;
printf("密码错误\n");
}
else{
printf("密码正确\n");
break;
}
}while(a<3);
if(a<3)
printf("OK.\n");
return 0;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
else
{ printf("密码正确\n");
break;}// 呵呵,这两句应当是在大括号里,按我写的改过来试一下
{ printf("密码正确\n");
break;}// 呵呵,这两句应当是在大括号里,按我写的改过来试一下
追问
不行啊
追答
怎么不行呢,你的break在else 外,肯定循环一次就执退出啊 ,显示什么错误啊
奥,我明白了
再在这里修改一下就行
if(strcmp(ch1,ch2)!=0)
{ a++;
i=0;//再加这一句,要不然ch2数组会把前面你输入的错误密码加到字符串里
printf("密码错误\n");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询