#define _CRE_SECURE_NO_WARNINGS #include <stdio.h> #include<string.h> int main() { //int ch = 0; /*while ((ch = getchar() != EOF)) { putchar(ch); }*/ printf("请输入密码"); //ch = getchar(); char pass1[20] = { 0 }; char pass2[20] = { 0 }; int y = 0; scanf("%s", &pass1); printf("请确认密码"); printf("输入y继续,n不确认"); y = getchar(); if (y == 'y') { printf("接收确认"); scanf("%s", pass2); if (pass1 == &pass2) { printf("密码确认成功"); } else { printf("确认失败"); } } else { printf("不确认密码"); } return 0; }
时间: 2023-06-20 09:10:07 浏览: 50
这段代码存在几个问题:
1. 第一行应该是 #define _CRT_SECURE_NO_WARNINGS,而不是 #define _CRE_SECURE_NO_WARNINGS。
2. 在输入密码时,应该使用 scanf("%s", pass1) 而不是 scanf("%s", &pass1),因为 pass1 已经是一个数组名了,不需要再取它的地址。
3. 在确认密码前,使用 getchar() 读取输入缓冲区中的回车符,导致 y 的值为回车符。应该在读取 y 前先使用 getchar() 将回车符消耗掉。
4. 在比较两个字符串是否相等时,应该使用 strcmp() 函数而不是简单地使用 == 运算符。
以下是修改后的代码:
```c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char pass1[20] = { 0 };
char pass2[20] = { 0 };
int y = 0;
printf("请输入密码:");
scanf("%s", pass1);
printf("请确认密码,输入 y 继续,n 不确认:");
getchar(); // 消耗掉输入缓冲区中的回车符
y = getchar();
if (y == 'y')
{
printf("接收确认\n");
scanf("%s", pass2);
if (strcmp(pass1, pass2) == 0)
{
printf("密码确认成功\n");
}
else
{
printf("确认失败\n");
}
}
else
{
printf("不确认密码\n");
}
return 0;
}
```