初学,求助do-while循环问题(或是其他原因?)
本帖最后由 纪叶 于 2022-9-11 22:38 编辑初学求助,题目是:写一个验证用户密码的程序。
我一开始也是跟着教程用getchar()的,后来发现实现不了我想要的结果,换成了scanf(),还是一样有问题,开始迷糊了,为什么最后输出的效果达不到理想效果。是逻辑的问题,还是我对do-while函数理解有问题?
#include <stdio.h>
int main(void)
{
char secret,secret_ng;
printf("请输入密码。\n");
scanf("%c",&secret);
do
{
printf("请再次输入密码。\n");
scanf("%c",&secret_ng);
}
while(secret_ng == secret);
printf("密码正确");
return 0;
}
输出结果:(不会添加图片见谅)
输入:abcdef,输出“请再次输出密码”后,直接返回密码正确。(跳过了“第二次输入及对比两次输入异同”的步骤)
求指教
再去看了一遍scanf函数的用法后,将%c改成了%s。
现在输出的结果变成了:输入abcdef,再次输入abcdefg,返回密码正确。
试了其他两串完全不同的密码,同样会返回密码正确.....
{:10_266:}
不是do while的问题,而是因为密码是字符串
#include <stdio.h>
#include <string.h>
int main(void)
{
char secret,secret_ng;
printf("请输入密码。\n");
scanf("%s",secret);
do
{
printf("请再次输入密码。\n");
scanf("%s",secret_ng);
}
while(strcmp(secret_ng,secret)==0);
printf("密码正确");
return 0;
}
临时号 发表于 2022-9-11 23:14
不是do while的问题,而是因为密码是字符串
我本来想研究一下大佬的代码的
但是复制过去devc实践发现 大佬的代码同样也会出现 输入两串不同密码,但返回“密码正确”的情况
{:10_285:} 纪叶 发表于 2022-9-11 23:44
我本来想研究一下大佬的代码的
但是复制过去devc实践发现 大佬的代码同样也会出现 输入两串不同密码,但 ...
#include <stdio.h>
#include <string.h>
int main(void)
{
char secret,secret_ng;
printf("请输入密码。\n");
scanf("%s",secret);
do
{
printf("请再次输入密码。\n");
scanf("%s",secret_ng);
}
//while(strcmp(secret_ng,secret)==0);
while(strcmp(secret_ng,secret));
printf("密码正确");
return 0;
}
人造人 发表于 2022-9-11 23:54
WORK!!
我先自己研究一下为什么这么写
谢谢大佬!
本帖最后由 临时号 于 2022-9-12 00:33 编辑
纪叶 发表于 2022-9-11 23:59
WORK!!
我先自己研究一下为什么这么写
谢谢大佬!
哦对,我忘了,strcmp匹配两个字符串时如果正确会返回0,不好意思电脑不在身边,没法测试代码 纪叶 发表于 2022-9-11 23:59
WORK!!
我先自己研究一下为什么这么写
谢谢大佬!
这么说来,楼主对do-while循环的理解还是有问题的,do-while循环中的条件是维持循环的条件,而不是结束循环的条件 临时号 发表于 2022-9-12 00:25
哦对,我忘了,strcmp匹配两个字符串时如果正确会返回0,不好意思电脑不在身边,没法测试代码
啊没事没事 谢谢大佬出手相助才对!
不过关于对do-while的理解上,do-while的条件既是维持循环的条件也是跳出循环继续执行下一步的条件不是吗?
那么是作为维持循环的条件与结束循环的条件之间是否需要做一定的区分(?)
{:10_245:} 纪叶 发表于 2022-9-12 22:21
啊没事没事 谢谢大佬出手相助才对!
不过关于对do-while的理解上,do-while的条件既是维持循环的条件 ...
do-while括号中的条件只是维持循环的条件
你所说的跳出循环继续执行下一步的条件大概是这种情况
#include <stdio.h>
#include <string.h>
int main(void)
{
char secret,secret_ng;
printf("请输入密码。\n");
scanf("%s",secret);
do
{
printf("请再次输入密码。\n");
scanf("%s",secret_ng);
// 这才是循环退出的条件
if (strcmp(secret_ng,secret)==0)
{
break;
}
}
// 这是维持循环的条件
while(1);
printf("密码正确");
return 0;
} 临时号 发表于 2022-9-12 22:56
do-while括号中的条件只是维持循环的条件
你所说的跳出循环继续执行下一步的条件大概是这种情况
噢噢噢 谢谢大佬指教!
页:
[1]