C语言代码调整:替换Y/N为Yes/No并实现问题循环重试
优化并调整后的C语言代码
原代码存在变量类型错误、函数调用不规范、流程逻辑不符合需求等问题,以下是调整优化后的版本,完全满足你的要求:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <windows.h> // Windows系统需引入,Linux/macOS请替换为<unistd.h>,并将Sleep改为sleep(单位为秒) #define MAX_INPUT_LEN 50 // 限制输入长度,避免缓冲区溢出 int main(void) { char username[MAX_INPUT_LEN]; char password[MAX_INPUT_LEN]; char confirm[4]; // 存储Yes/No,预留足够空间存字符串结束符 // 用户名输入与确认循环 while (1) { printf("Enter Username: \n"); scanf("%s", username); printf("Is your username \"%s\"? Enter Yes or No\n", username); scanf("%s", confirm); // 匹配Yes则退出循环,如需忽略大小写可改用stricmp if (strcmp(confirm, "Yes") == 0) { break; } // 输入非Yes时自动回到用户名输入步骤 printf("\n"); } Sleep(1000); printf("Username confirmed\n"); Sleep(2000); // 密码输入与确认循环 while (1) { printf("Enter your password: \n"); scanf("%s", password); printf("Is your password \"%s\"? Enter Yes or No\n", password); scanf("%s", confirm); if (strcmp(confirm, "Yes") == 0) { break; } // 输入非Yes时自动回到密码输入步骤 printf("\n"); } printf("Success!"); Sleep(1000); return 0; }
关键修改与优化说明:
- 变量类型修复:将原代码中错误用
int存储字符串的name/pass,改为字符数组username/password,字符串必须用字符数组存储,否则会触发内存访问错误。 - 提示文本调整:所有输入确认提示中的
Y or N替换为Yes or No,符合需求。 - 循环逻辑重构:用
while(1)构建无限循环,仅当输入Yes时跳出循环,输入非Yes时自动回到对应输入步骤,不再打印"Try again.."后退出。 - 代码结构优化:统一用户名和密码的确认逻辑,减少重复代码,提升可读性。
- 安全防护:定义
MAX_INPUT_LEN限制输入长度,避免超长输入导致的缓冲区溢出问题。 - 函数调用修正:将原代码错误的
exit调用(缺少括号)替换为规范的return 0,主函数返回更符合C语言标准。 - 头文件完善:补充必要的头文件,适配不同系统的休眠函数(Windows用
Sleep,Linux/macOS用sleep)。
内容的提问来源于stack exchange,提问作者Intelcorpse
相关产品推荐
相关产品推荐

