程序没有错误,请大侠们帮我改改,输入 验证码 进入 万年历系统

hzc543806053 2011-05-14 11:51:26
#include<stdio.h>
#include<string.h>
#include<stdio.h>
main()
{
int i,j,x;
char p[20],ch;
for(i=0;i<3;i++)
{
j=0;

srand(time(0));
x=rand()%10000;
printf("验证码:%d\n",x);

while(j<20&&(ch=getch())!='\r')
{
p[j++]=ch;
putchar('*');
}
p[j]='\0';
if(strcmp(p,"x")==0)
{
printf("\n进入万年历系统\n");
break;
}
else
printf("重新输入");
}
if(i>=3)
{
printf("输入次数过多,退出系统");
exit(0);
}
}
...全文
83 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzc543806053 2011-05-15
  • 打赏
  • 举报
回复
又没人知道啊
fukang258369 2011-05-15
  • 打赏
  • 举报
回复
/*
程序实现了:1)输入密码的时候显示“*”
2)将getch()返回的ASCII码转换成整数
3)用一个整数个十百千的数字组成一个整型数组
4)输入一个整数得到它的位数.
*/
#include<iostream>
#include<time.h>
#include<cmath>
#include<conio.h>
using namespace std;
const int max_input=3;//最大输入次数..

int main()
{
int i=0;
int p[10];
int x_[10];
for(int i=1;i<=max_input;i++)
{
srand((unsigned)time(NULL));
int x=rand()%10000;
cout<<"验证码:"<<x<<endl;
//从终端输入验证码..
int j=0;
char ch=_getch();
while(1)
{
if(ch==13)//windows平台下ENTER键会产生两个转义字符 \r\n,因此getch返回13(\r)..
break;
p[j++]=ch-'0';//得到的是输入字符的ascll值,转化成相应的整数..
putchar('*');
ch=_getch();
}

//把int类型的x转化成整型数组..
int n=(int)(log10(double(x))+1)-1;//log10(n)函数返回n以10为底的对数——得到x得到位数..
for(int i=n;i>=0;i--)
{
x_[i]=x%10;
x=x/10;
}
//比较是否输入正确..
int count=0;
for(int j=0;j<=n;j++)
if(p[j]==x_[j])
count+=1;
if(count==(n+1))
{
cout<<"\n进入万年历系统"<<endl;
break;
}
else
cout<<"重新输入"<<endl;
}
if(i>max_input)
cout<<"输入次数过多,退出系统"<<endl;
_getch();
return 0;
}
异常蛋疼,,继续找问题..
fukang258369 2011-05-15
  • 打赏
  • 举报
回复
哥们,把int类型的x转化成整型数组..那块还有问题。如果输入的是2011之类的话就出错..再改改吧。
fukang258369 2011-05-15
  • 打赏
  • 举报
回复
/*
程序实现了:1)输入密码的时候显示“*”
2)将getch()返回的ASCII码转换成整数
3)用一个整数个十百千的数字组成一个整型数组
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
int main()
{
int i,j,x,m,n,count=0;
char ch;
int p[10];
int x_[10];
for(i=0;i<3;i++)
{

srand((unsigned)time(NULL));
x=rand()%10000;
printf("验证码:%d\n",x);
//从终端输入验证码..
j=0;
ch=getch();
while(1)
{
if(ch==13)//windows平台下ENTER键会产生两个转义字符 \r\n,因此getch返回13(\r)..
break;
p[j++]=ch-'0';//得到的是输入字符的ascll值,转化成相应的整数..
putchar('*');
ch=getch();
}

//把int类型的x转化成整型数组..
n=0;
if(x/1000)
{
x_[n]=x/1000;
x=x%1000;
n++;
}
if(x/100)
{
x_[n]=x/100;
x=x%100;
n++;
}
if(x/10)
{
x_[n]=x/10;
x=x%10;
n++;
}
x_[n]=x;

//比较是否输入正确..
count=0;
for(m=0;m<=n;m++)
if(p[m]==x_[m])
count+=1;
if(count==(n+1))
{
printf("\n进入万年历系统\n");
break;
}
else
printf("重新输入");
}
if(i>=3)
printf("输入次数过多,退出系统");
return 0;
}

系新手,老鸟见谅。
AnYidan 2011-05-15
  • 打赏
  • 举报
回复
加一些注释,不要认为你写的程序你可以永远明白
newfarmerchi 2011-05-15
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<string.h>
#include<time.h>
#include<conio.h>
#include<stdlib.h>

void main()
{
int i,j,x;
char p[20],ch, temp[20];//here
for(i=0;i<3;i++)
{
j=0;

srand(time(0));
x=rand()%10000;
printf("验证码:%d\n",x);

while(j<20&&(ch=getch())!='\r')
{
p[j++]=ch;
putchar('*');
}
p[j]='\0';
itoa(x,temp,10);//<---------here
if(strcmp(p,temp)==0)
{
printf("\n进入万年历系统\n");
break;
}
else
printf("重新输入");
}
if(i>=3)
{
printf("输入次数过多,退出系统");
exit(0);
}
}



yezhiyaoni 2011-05-15
  • 打赏
  • 举报
回复
必要的头文件<stdlib.h>
<stdlib.h>
<time.h>
<conio.h>
最主要的你知道“x”是个什么东西吗 ?
难道有谁教过你可以这样用的吗/

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧