求助:有关do while语句和字符串的问题
我想用下面的代码来检测输入密码是否正确,正确输出,不正确继续输入问题是:我输入正确密码之后,仍然跳不出循环,一直让我输入,我怀疑是字符串不能这样表示吧,还是别的啥
#include<stdio.h>
int main()
{
char M[]={};
do {
printf("请输入密码:");
scanf("%s",M);
}
while(M != "abc" );
printf("输入正确\n");
return 0;
} 字符串,不要初始化 char M[]={};改成
char M[]; 这里错误太多了,
最显著的是,c里面不用用==来进行字符串的比较 M != "abc" 楼上2位有说对的,也有说的不对的。
1. 声明变量,最好先初始化。你这声明的是数组,不但要初始化,还要指定数组的大小。
2. 这里面确实存在很多问题 ,字符串比效不能用 < > == 。
#include <stdio.h>
#include <string.h>
int main()
{
char M={'\0'};
do
{
printf("请输入密码:");
scanf("%s", M);
}
while( strcmp(M, "abc")!=0 );
printf("输入正确\n");
return 0;
} 本帖最后由 一点点儿 于 2022-8-10 14:58 编辑
while(M != "abc" );这句有问题,比较两个字符串不能用!=运算符比较,两个字符串不能用C语言的运算符进行比较,
比较两个字符串可以用strcmp()函数
示例:strcmp(str1, str2)
如果两个字符串完全一致,strcmp()函数返回0
while(M != "abc" ) 应改为while(strcmp(M,"abc") != 0)
还有,要使用strcmp()函数,程序开头应加上 #include <string.h>
另外
声明数组需要指明数组元素的数量,数组初始化式完全为空也不行
char M[]={} 可以改为 char M={'\0'}
把数组初始化为全\0
修改后的代码如下
#include <stdio.h>
#include <string.h>
int main() {
char M = {'\0'};
do {
printf("请输入密码:");
scanf("%s", M);
} while (strcmp(M, "abc") != 0);
printf("输入正确\n");
return 0;
}
都很感谢!
页:
[1]