2 wocao58 wocao58 于 2017.01.03 19:12 提问

C语言程序问题,关于验证码编程的。

程序思路:程序用一个函数来将两个随机数相加(因为一个随机数变化不大,所以就用两个随机数相加)后打印出来,然后让用户输入数字,比较这两个数字,相等就提示正确! 不想等就重新输入,当验证码错误3次后等待十秒,然户重新输入。

请大神拷回去运行一下,我运行的时候,在三次失败等待10秒后输入正确的验证码总是错误的,求大神帮忙看一下 附代码。

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

int random_num(void);
int bi_jiao(int num1, int num2);

int main(void)
{   
    int countdown;
    int c = 1;
    int a = 3;//输入按错计数
    int num;
    int number;

    while (c)
    {
        num = random_num();
        printf("\n");
        printf("请输入上面的数字:\n");
        scanf_s("%d", &number, 10);
        c = bi_jiao(num, number);
        if (c == 1)
        {
            --a;
            puts("验证码错误,请重新输入!");
            printf("剩余次数%d\n", a);
            _getch();
            system("cls");
        }
        if (a == 0)
        {
            a = 3;
            printf("请等候10秒。\n");
            Sleep(1000);
            for (countdown = 10; countdown > 0; countdown--)
            {
                system("cls");
                printf("%d", countdown);
                Sleep(1000);
            }
        }
    }


    system("cls");
    puts("正确!");
    _getch();
    return 0;
}

int random_num(void)//产生随机数
{
    int num1;
    int num2;

    srand((unsigned)time(NULL));
    num1 = rand();
    num2 = rand();
    printf("%d", num1 + num2);
    return (num1 + num2);
}
int bi_jiao(int num, int number)//与生成的随机数作比较
{
    if (num == number)
        return 0;
    else
        return 1;
}

4个回答

KinoluKaslana
KinoluKaslana   2017.01.03 19:35
已采纳

为啥?应为你注意看你的

  for (countdown = 10; countdown > 0; countdown--)
            {
                system("cls");
                printf("%d", countdown);
                Sleep(1000);
            }
```循环,是不是显示了1就忘记清除了?

wocao58
wocao58 果然是这个1没有请掉 谢谢大神
12 个月之前 回复
KinoluKaslana
KinoluKaslana   2017.01.03 19:33

显示的问题吧,加个system("cls");在 srand((unsigned)time(NULL));前面

Fate_Dream
Fate_Dream   2017.01.03 19:39

#include
#include

int rand_data()
{
srand((unsigned)time(NULL));
int a=rand()%100;
int b=rand()%100;
printf("a:%d b:%d\n",a,b);
return a+b;
}

int compare(int m,int n)
{
return m==n ? 1:0;
}

int main()
{
int a,i=0;
int num=rand_data();
while(1)
{
fflush(stdin);//清空输入缓冲区,防止输入非整形数据时,程序出现意外的错误结果。
printf("please input data:\n");
scanf("%d",&a);
if(compare(num,a))
{
printf("input data equal to rand num!\n");
break;
}
else
{
i++;
if(i==3)
{
i=0;
printf("please wait 10s again\n");
sleep(10);
}
}
}

return 0;

}


Fate_Dream
Fate_Dream 回复wocao58: 我也不知道,这是回复后·出现的问题,那个是#inlude <stdio.h>和#include <time.h>
12 个月之前 回复
wocao58
wocao58 怎么没有头文件的呢?
12 个月之前 回复
qq_31003665
qq_31003665   2017.01.04 14:18
  在  num = random_num();加一句     system("cls");

#include
#include
#include
#include
#include

int random_num(void);
int bi_jiao(int num1, int num2);

int main(void)
{

int countdown;
int c = 1;
int a = 3;//输入按错计数
int num;
int number;

while (c)
{
    system("cls");
    num = random_num();
    printf("\n");
    printf("请输入上面的数字:\n");
    scanf_s("%d", &number, 10);
    c = bi_jiao(num, number);
    if (c == 1)
    {
        --a;
        puts("验证码错误,请重新输入!");
        printf("剩余次数%d\n", a);
        _getch();
        system("cls");
    }
    if (a == 0)
    {
        a = 3;
        printf("请等候10秒。\n");
        Sleep(1000);
        for (countdown = 10; countdown > 0; countdown--)
        {
            system("cls");
            printf("%d", countdown);
            Sleep(1000);
        }
    }
}


system("cls");
puts("正确!");
_getch();
return 0;

}

int random_num(void)//产生随机数
{
int num1;
int num2;

srand((unsigned)time(NULL));
num1 = rand();
num2 = rand();
printf("%d", num1 + num2);
return (num1 + num2);

}
int bi_jiao(int num, int number)//与生成的随机数作比较
{
if (num == number)
return 0;
else
return 1;
}


Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!