鱼C论坛

 找回密码
 立即注册
查看: 1808|回复: 6

[已解决]求助:有关do while语句和字符串的问题

[复制链接]
发表于 2022-8-10 07:52:40 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

int main()
{
    char M[]={};
    do {
    printf("请输入密码:");
    scanf("%s",M);
    }
    while(M != "abc" );
   
    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[255]={'\0'}
把数组初始化为全\0


修改后的代码如下
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main() {
  4.         char M[255] = {'\0'};
  5.         do {
  6.                 printf("请输入密码:");
  7.                 scanf("%s", M);
  8.         } while (strcmp(M, "abc") != 0);

  9.         printf("输入正确\n");
  10.         return 0;
  11. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-10 08:02:09 | 显示全部楼层
字符串,不要初始化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2022-8-10 08:02:43 | 显示全部楼层
char M[]={};改成
char M[];
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2022-8-10 10:07:21 | 显示全部楼层
这里错误太多了,
最显著的是,c里面不用用==来进行字符串的比较   M != "abc"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-10 10:48:27 | 显示全部楼层
楼上2位有说对的,也有说的不对的。
1. 声明变量,最好先初始化。你这声明的是数组,不但要初始化,还要指定数组的大小。
2. 这里面确实存在很多问题 ,字符串比效不能用 < > == 。
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.     char M[255]={'\0'};
  6.    
  7.         do
  8.         {
  9.                 printf("请输入密码:");
  10.                 scanf("%s", M);
  11.     }
  12.     while( strcmp(M, "abc")!=0 );
  13.    
  14.     printf("输入正确\n");

  15.     return 0;
  16. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[255]={'\0'}
把数组初始化为全\0


修改后的代码如下
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main() {
  4.         char M[255] = {'\0'};
  5.         do {
  6.                 printf("请输入密码:");
  7.                 scanf("%s", M);
  8.         } while (strcmp(M, "abc") != 0);

  9.         printf("输入正确\n");
  10.         return 0;
  11. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-10 21:38:00 From FishC Mobile | 显示全部楼层
都很感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 14:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表