You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:01:21