为什么出错, char *p=user_name;.*p++为空? 热? 400 报错
void login_user() { char *loguser_name="#tb1234#"; char *loguser_pwd="123456";
char* user_name=NULL; printf("请输入你的账号<以#号键结束>\n"); scanf("[%s]\n",user_name);
char* user_pwd=NULL; //scanf("[%s]\n",user_name); char *p=user_name;
while ( *p++!='\0' && 'a'<*p++ && *p++<'z'|| '1'<*p++ && *p++>'9')//p指向user_name,调试为空 { if(strcmp(p,loguser_name)==0) { printf("user login successful\n"); break; } else { printf("请输入正确的账号\n"); } }
有什么问题呢,输入为什么,老是出错,函数scanf在0x0地址输入一段字符串,直接被清掉了,取p当然就是0,解决办法是char user_name[128];######char user_name[128];也不行呀,p为空######你这段代码错误很多:
第一:请你好好查看下scanf()函数的格式,你这么写是错误的。
第二:比如char p = "something";这样的语句,something是常量,是不能对其做一些类似于对数组的操作的。
第三:while循环里面的判别式写的太罗嗦,而且还有的地方还写错了。
第四:break语句不能放在if语句里面,这样是错误的,break只能在循环里面起作用。
第五:这只是一个建议...如果你想在程序中保持变量的值不变,请考虑加上const关键字,比如这里:char loguser_name = “#tb1234#".完全可以写出const char* loguser_name = ”#tb1234#"这样别人一看就知道这个值不希望被改变。。。
如有回答不对的地方,请指出,谢谢。。。
勿喷!!!
######前面也有人说了在if 里用break 有什么意义吗? 如果你想从while 循环里跳出那么尝试在while结尾处放一个break######谁说 break不能放在if里?? 难道if在循环中也不行????######木有分配空间######对呀,没分配空间,输入的字符串没地方存######你的user name已经是指针了,再取一次指针意义就不对了。你应该直接在username上操作######user_name已经赋值了######第一,第四,此言差矣。######user_name是常量,往里写值未定义。循环中一次 ++ 那么多次???确定不是未定义行为?而且还在 && 和 || 联合的情况下######哪一次++有没有被 短路都很难看出来。######
scanf("[%s]\n",user_name);
scanf表示这个中括号很为难,所以他只好将user_name赋值为NULL了
scanf("[%s]\n",user_name);
scanf表示这个中括号很为难,所以他只好将user_name赋值为NULL了
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。