| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1793 人关注过本帖
标题:strcmp的运行问题与字符数组初始化问题!
只看楼主 加入收藏
大C
Rank: 1
等 级:新手上路
帖 子:20
专家分:2
注 册:2012-12-9
结帖率:80%
收藏
已结贴  问题点数:10 回复次数:12 
strcmp的运行问题与字符数组初始化问题!
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
   int menunum=11;
   char c[7];
   int i;
   char mima[]={'8','8','8','1','6','8'};   /改为*mima[]={'8','8','8','1','6','8'};*/
   for(i=0;i<6;i++)
   {
   c[i]=getch();
   putchar('*');}
  if (strcmp(c,mima)!=0)
   {printf("密码输入错误");
       }
/*增添c[6]='\0';*/
   else
   { printf("\n\t\t\t   人力资源管理系统  (可输入汉字)\n");
     printf("    |^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");
     printf("    |1、输入员工数据\t\t2、修改员工数据\t\t3、查找        |\n");
     printf("    |4、排列员工数据\t\t5、打印员工资料\t\t6、删除员工数据|\n");
     printf("    |7、备份文件    \t\t8、恢复文件    \t\t9、清除已删数据|\n");   
     printf("    |10、统计各样员工数据       0、结束程序   \t\t\               |\n");
     printf("    |                                                                  |\n");
     printf("    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");
     printf("\n    操作方式:");
   }
   
   }
没改之前strcmp怎么都判断不对,而改了之后就正确了,字符数组后面不是会自动会自动生成\0吗?
搜索更多相关主题的帖子: mima include choice 汉字 
2013-01-21 22:31
大C
Rank: 1
等 级:新手上路
帖 子:20
专家分:2
注 册:2012-12-9
收藏
得分:0 
为什么没人解答分数少吗?
2013-01-21 23:13
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
收藏
得分:0 
字符数组初始化时,初值个数小于数组长度时,剩余的自动为空字符,即'\0',LZ。。你数组未定义长度。。
2013-01-21 23:18
大C
Rank: 1
等 级:新手上路
帖 子:20
专家分:2
注 册:2012-12-9
收藏
得分:0 
回复 3楼 yudeyinji198
听了你的建议 我把mima[]改成mima[7]还是不行。
2013-01-21 23:41
schenxi
Rank: 1
等 级:新手上路
帖 子:3
专家分:7
注 册:2013-1-21
收藏
得分:2 
你的那种写法就是不带\0的  想加入 只有手动输入追加一个字符 '\0'

只有 char *mima ="12345";  或者 char mima[6]="12345"; 才自动加入 \0
2013-01-22 00:02
tompobing
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:260
专家分:809
注 册:2012-12-9
收藏
得分:2 
#include "stdio.h"
#include <string.h>
#include <stdlib.h>
#include <conio.h>
 void main()
 {
   int menunum=11;
    char c[7];
    int i;
    char mima[10]="888168";   /*改为*mima[]={'8','8','8','1','6','8'};*/
    for(i=0;i<6;i++)
    {
    c[i]=getch();
    putchar('*');
    }
    c[6]='\0';
   if (strcmp(c,mima)!=0)
    {
       printf("密码输入错误");
    }
/*增添c[6]='\0';*/
    else
    { printf("\n\t\t\t   人力资源管理系统  (可输入汉字)\n");
      printf("    |^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");
      printf("    |1、输入员工数据\t\t2、修改员工数据\t\t3、查找        |\n");
      printf("    |4、排列员工数据\t\t5、打印员工资料\t\t6、删除员工数据|\n");
      printf("    |7、备份文件    \t\t8、恢复文件    \t\t9、清除已删数据|\n");   
      printf("    |10、统计各样员工数据       0、结束程序   \t\t\               |\n");
      printf("    |                                                                  |\n");
      printf("    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");
      printf("\n    操作方式:");
    }
   
 }




改好了,你自己试试看
2013-01-22 03:03
lxsjzbd
Rank: 4
来 自:河北省
等 级:业余侠客
帖 子:97
专家分:258
注 册:2012-3-31
收藏
得分:0 
用strncmp吧
2013-01-22 07:44
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
收藏
得分:3 
回复 4楼 大C
你第一个定义好了,你可以试着打印出来看最后是否乱码。
之所以比较不了是因为你第二个字符数组没有结束符,getch()这里,需要人为添上个结束符就可以比较了!
2013-01-22 23:13
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:3 
if (strcmp(c,mima)!=0)
c字符串和mima字符串都没有终止符'\0',这时当c与mima的字符串内容都相等时继续比较下去,因为没有遇到终止符
所以这种行为是未定义的
还有这里:
程序代码:
for(i=0;i<6;i++)
   {
   c[i]=getch();
   putchar('*');}
那不是固定读入6个字符,别人就能知道密码是六位数的,这可不太好:
程序代码:
do
{
  c[i] = getch();
}while(c[i++] != '\r' && i < 7); //因为c的最大容量为7,所以当c >= 7时内存耗光,结束读入



I have not failed completely
2013-01-22 23:27
h1023417614
Rank: 4
等 级:禁止访问
帖 子:211
专家分:237
注 册:2012-11-30
收藏
得分:0 
2013-01-22 23:51
快速回复:strcmp的运行问题与字符数组初始化问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033861 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved