FengRockbox 发表于 2022-8-10 07:52:40

求助:有关do while语句和字符串的问题

我想用下面的代码来检测输入密码是否正确,正确输出,不正确继续输入
问题是:我输入正确密码之后,仍然跳不出循环,一直让我输入,我怀疑是字符串不能这样表示吧,还是别的啥
#include<stdio.h>

int main()
{
    char M[]={};
    do {
    printf("请输入密码:");
    scanf("%s",M);
    }
    while(M != "abc" );
   
    printf("输入正确\n");
    return 0;
}

aaron0919 发表于 2022-8-10 08:02:09

字符串,不要初始化

aaron0919 发表于 2022-8-10 08:02:43

char M[]={};改成
char M[];

wp231957 发表于 2022-8-10 10:07:21

这里错误太多了,
最显著的是,c里面不用用==来进行字符串的比较   M != "abc"

ba21 发表于 2022-8-10 10:48:27

楼上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:56:30

本帖最后由 一点点儿 于 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;
}

FengRockbox 发表于 2022-8-10 21:38:00

都很感谢!
页: [1]
查看完整版本: 求助:有关do while语句和字符串的问题