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 应该改成怎么样呢
大约 2 年之前 回复
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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
BCH编译码c语言实现
本资源给出了bch码的编译码的c语言代码,可以通用
java中继承与多态的题目
java的题目 继承的测试题大神大神来看看
C语言程序的三种结构
C语言程序的三种结构: 1.顺序结构:程序从上往下依次执行就叫顺序结构 2.分支结构:程序有选择的执行某段代码或者不执行某段代码 3.循环结构:程序重复的执行某段代码重点是分支结构和循环结构1.分支结构有两大类语句:一种是if 一种是switchif语句1.第一种形式:语法:if(表达式){ 语句块; }语义:如果表达
算法分析——Hanoi塔问题(还是写不出来啊!)
上图为 3 阶 Hanoi 塔 假设有三个命名为 A B C 的塔座 ,在塔座A上插有n个直径大小不相同,由小到大编号为1 ,2 ,3 ,··· ,n的圆盘,要求将A座上的圆盘移至塔座C 并按同样的顺序叠排 圆盘移动必须遵守下列规则: 1:每次只能移动一个圆盘 2:圆盘可以插在任意一个塔座上 3:任何时刻都不能将一个较大的圆盘放在一个较小的圆盘上   该问题的复
编写大规模的C语言程序
为了支持大规模C程序的开发,往往需要把程序分割为一定数量的源文件。C语言的源文件包括两类,一类是实现文件(.c),一类是头文件(.h)。一般地,实现文件主要包括函数和变量的定义,而头文件的作用是在多个定义文件中共享函数原型、宏定义和类型定义、变量声明等信息。
某人写了n封信和n个信封,如果所有的信都装错了信封。求所有的信都装错信封共有多少种不同情况?
我这里用两种方法: 1.第一种是高中的全错位排列公式:S=n!(1-1/1!+1/2!-1/3!+...(-1)^n/n!) C++代码如下: #include using namespace std; int main() { int n; cout<<"请输入n:"; cin>>n; int t=1, s=1, sum=0; for(int
zjnu 1450 - 迷宫(BFS)解题报告
迷宫 Case Time Limit:1000MS Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 48   Accepted: 23 Description 小C最近在研究机器人,他想看看自己的机器人够不够智能,于是他将机器人放在一个n*m的迷宫中,看看机器人
[置顶]终于完成了Josephus的C语言实现啦~~
/*以下程序用来解决Josephus问题,现在只是完成了M>N的情况,2015-08-20 22:22:20*//*发现一个问题:数组的赋值问题:char People[N]={1};并不代表所有的元素都是1啊,要确保全都是1,务必使用char People[N]={1,1,1,1};或者采用循环给数组赋值*/#include #include #define N 10 //#define M 3
C语言程序编码规范(V1.00)
北京朗新信息系统有限公司的《C语言程序编码规范(V1.00)》,虽然有点老了,借来看看
C语言程序设计经典例子
适用于初学者    经典c程序100例==11--20 【程序11】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月    后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 2.程序源代码: #include "stdio.h" #include "conio.h" main() { long f1,f2; int i; f1=f2=1; for(i=1;i<=20;i++) { printf("%12ld %12ld",f1,f2); if(i%2==0) printf("\n"); /*控制输出,每行四个*/ f1=f1+f2; /*前两个月加起来赋值给第三个月*/ f2=f1+f2; /*前两个月加起来赋值给第三个月*/ } getch(); } ============================================================== 【程序12】 题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,       则表明此数不是素数,反之是素数。        2.程序源代码: #include "stdio.h" #include "conio.h" #include "math.h" main() { int m,i,k,h=0,leap=1; printf("\n"); for(m=101;m<=200;m++) { k=sqrt(m+1); for(i=2;i<=k;i++) if(m%i==0) { leap=0; break; } if(leap) { printf("%-4d",m); h++; if(h%10==0) printf("\n"); } leap=1; } printf("\nThe total is %d",h); getch(); } ============================================================== 【程序13】 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数    本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 2.程序源代码: #include "stdio.h" #include "conio.h" main() { int i,j,k,n; printf("'water flower'number is:"); for(n=100;n<1000;n++) { i=n/100;/*分解出百位*/ j=n/10%10;/*分解出十位*/ k=n%10;/*分解出个位*/ if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) printf("%-5d",n); } getch(); } ============================================================== 【程序14】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,  重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 2.程序源代码: /* zheng int is divided yinshu*/ #include "stdio.h" #include "conio.h" main() { int n,i; printf("\nplease input a number:\n"); scanf("%d",&n); printf("%d=",n); for(i=2;i<=n;i++) while(n!=i) { if(n%i==0) { printf("%d*",i); n=n/i; } else break; } printf("%d",n); getch(); } ============================================================== 【程序15】 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,    60分以下的用C表示。 1.程序分析:(a>b)?a:b这是条件运算符的基本例子。 2.程序源代码: #include "stdio.h" #include "conio.h" main() { int score; char grade; printf("please input a score\n"); scanf("%d",&score); grade=score>=90?'A':(score>=60?'B':'C'); printf("%d belongs to %c",score,grade); getch(); } ============================================================== 【程序16】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析:利用辗除法。 2.程序源代码: #include "stdio.h" #include "conio.h" main() { int a,b,num1,num2,temp; printf("please input two numbers:\n"); scanf("%d,%d",&num1,&num2); if(num1<num2)/*交换两个数,使大数放在num1上*/ { temp=num1; num1=num2; num2=temp; } a=num1;b=num2; while(b!=0)/*利用辗除法,直到b为0为止*/ { temp=a%b; a=b; b=temp; } printf("gongyueshu:%d\n",a); printf("gongbeishu:%d\n",num1*num2/a); getch(); } ============================================================== 【程序17】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 1.程序分析:利用while语句,条件为输入的字符不为'\n'.        2.程序源代码: #include "stdio.h" #include "conio.h" main() { char c; int letters=0,space=0,digit=0,others=0; printf("please input some characters\n"); while((c=getchar())!='\n') { if(c>='a'&&c<='z'||c>='A'&&c<='Z') letters++; else if(c==' ') space++; else if(c>='0'&&c<='9') digit++; else others++; } printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, space,digit,others); getch(); } ============================================================== 【程序18】 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时    共有5个数相加),几个数相加有键盘控制。 1.程序分析:关键是计算出每一项的值。 2.程序源代码: #include "stdio.h" #include "conio.h" main() { int a,n,count=1; long int sn=0,tn=0; printf("please input a and n\n"); scanf("%d,%d",&a,&n); printf("a=%d,n=%d\n",a,n); while(count<=n) { tn=tn+a; sn=sn+tn; a=a*10; ++count; } printf("a+aa+...=%ld\n",sn); getch(); } ============================================================== 【程序19】 题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程    找出1000以内的所有完数。 1. 程序分析:请参照程序<--上页程序14. 2.程序源代码: #include "stdio.h" #include "conio.h" main() { static int k[10]; int i,j,n,s; for(j=2;j<1000;j++) { n=-1; s=j; for(i=1;i<j;i++) { if((j%i)==0) { n++; s=s-i; k[n]=i; } } if(s==0) { printf("%d is a wanshu",j); for(i=0;i<n;i++) printf("%d,",k[i]); printf("%d\n",k[n]); } } getch(); } ============================================================== 【程序20】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在    第10次落地时,共经过多少米?第10次反弹多高? 1.程序分析:见下面注释 2.程序源代码: #include "stdio.h" #include "stdio.h" main() { float sn=100.0,hn=sn/2; int n; for(n=2;n<=10;n++) { sn=sn+2*hn;/*第n次落地时共经过的米数*/ hn=hn/2; /*第n次反跳高度*/ } printf("the total of road is %f\n",sn); printf("the tenth is %f meter\n",hn); getch(); }