2 qq 34556554 qq_34556554 于 2016.05.08 15:26 提问

编写了个 c语言程序有点问题,麻烦大神来看看~ 2C

#include"stdio.h"
#include"string.h"
int MAX;
char str[31],temp[31];
int o,p,q,r;
void main()
{
char m_name[MAX],sm_name[MAX];
char m_mima[MAX],sm_mima[MAX];
char *name=m_name,*s_name=sm_name;
char *mima=m_mima,*s_mima=sm_mima;
printf("注册您当前用账号和密码!\n");
printf("注册账号为:");
gets(s_name);
printf("注册密码为:");
gets(s_mima);
printf("注册完成!\n");
printf("请输入账号:");
gets(name);
printf("请输入密码:");
gets(mima);
printf(strcmp(s_name,name));
if (strcmp(s_name,name)==0 && strcmp(s_mima,mima)==0) printf("登录成功!\n");
else printf("登录失败!\n");
printf("请输入IP地址");
while(gets(str)!=NULL)
{
if(scanf(str,"%r.%r.%r.%r",&o,&p,&q,&r)==4

&& o>=0 && o<=255
&& p>=0 && p<=255
&& q>=0 && q<=255
&& r>=0 && r<=255) //IP地址每个字节的范围限制
{
printf(temp,"%r.%r.%r.%r",o,p,q,r);
if(strcmp(temp,str)==0)
{
printf("IP地址合法\n");
}
else
{
printf("IP地址不合法\n");
}
}
else
{
printf("IP地址不合法\n");
}
}
return 0;
}
这个c语言程序运行后,注册的用户名和密码后,为什么不管输入什么用户名和密码都能成功登陆,还有IP不管怎么输入都是不合法的?应该怎么改

4个回答

Mint6
Mint6   2016.05.08 16:04

strcmp(const char *s1,const char * s2)这里面只能比较字符串,不能比较数字等其他形式的参数。

codeforcer
codeforcer   2016.05.08 16:15

char *name=m_name,这个是的name和m_name都指向了同一个地址,你对这个地址的内容做任何改变,name和m_name都是相同的,你应该另外开一个内存给name。

qq_34556554
qq_34556554 应该改成怎么样呢
一年多之前 回复
qq423399099
qq423399099   Ds   Rxr 2016.05.08 20:16
 #include"stdio.h"
#include"string.h"
const int MAX = 64;
char str[31],temp[31];
int o,p,q,r;
void main()
{
    char m_name[MAX],sm_name[MAX];
    char m_mima[MAX],sm_mima[MAX];
    char *name=m_name,*s_name=sm_name;
    char *mima=m_mima,*s_mima=sm_mima;
    printf("注册您当前用账号和密码!\n");
    printf("注册账号为:");
    gets(s_name);
    printf("注册密码为:");
    gets(s_mima);
    printf("注册完成!\n");
    printf("请输入账号:");
    gets(name);
    printf("请输入密码:");
    gets(mima);
    //printf(strcmp(s_name,name));
    if (strcmp(s_name,name)==0 && strcmp(s_mima,mima)==0) printf("登录成功!\n");
    else printf("登录失败!\n");
    printf("请输入IP地址");
    while(gets(str)!=NULL)
    {
        if(sscanf(str,"%d.%d.%d.%d",&o,&p,&q,&r)==4
            && o>=0 && o<=255
            && p>=0 && p<=255
            && q>=0 && q<=255
            && r>=0 && r<=255) //IP地址每个字节的范围限制
        {
            sprintf(temp,"%d.%d.%d.%d",o,p,q,r);
            if(strcmp(temp,str)==0)
            {
                printf("IP地址合法\n");
            }
            else
            {
                printf("IP地址不合法\n");
            }
        }
        else
        {
            printf("IP地址不合法\n");
        }
    }
    return;
}

图片说明

mazegong
mazegong   2016.05.09 16:03

char *name=m_name,这个是的name和m_name都指向了同一个地址,你对这个地址的内容做任何改变,name和m_name都是相同的,你应该另外开一个内存给name。

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