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

C语言编写密码系统时Yes/No确认环节无法输入自动执行问题求解

C语言密码系统问题修复方案

核心错误原因

  • 输入缓冲区残留换行符:第一次调用scanf("%d", &password)读取密码后,用户输入的换行符\n残留在输入缓冲区,第二个scanf("%c", answer)会直接读取该换行符,不会等待用户手动输入,这是确认环节无法输入的直接原因。
  • 变量类型与格式符不匹配:password、answer定义为char类型仅能存储单个字符,既无法存储完整的密码,也无法存储Yes/No这类多字符内容;用%d格式符读取char类型变量还会导致内存越界。
  • 语法与逻辑错误:
    1. 第二个scanf读取answer时未加取地址符&,无法将输入写入变量内存
    2. 'Yes'是非法多字符字符常量,C语言中字符串需用双引号包裹,且字符串比较不能直接用==,需要调用string.h库的strcmp函数
    3. 分支语法错误:else (answer == 'No');写法不合法,带条件判断需用else if,且条件后不能加多余分号,否则分支逻辑不会生效
    4. printf("\nAnswer is %c");未传入要输出的变量,会输出乱码

修复后可运行代码

#include <stdio.h>
#include <string.h> // 导入字符串处理库,用于strcmp比较

int main ()
{
  // 定义字符数组存储密码,最长支持19位密码
  char password[20];
  printf ("Hello User.\n");
  printf ("Please type in your password:");
  // %s格式符读取字符串,数组名本身是地址无需加&
  scanf ("%s", password);
  // 吃掉缓冲区残留的换行符
  getchar();
  
  // 定义字符数组存储Yes/No回答,最长支持3位字符
  char answer[4];
  printf ("\nAre you sure? Do you want this password? Enter Yes or No: \n");
  scanf ("%s", answer);
  printf ("\nAnswer is %s", answer);
  
  // 比较字符串,返回0代表内容相等
  if (strcmp(answer, "Yes") == 0) {
    printf ("\nConfirmed.");
  } else if (strcmp(answer, "No") == 0) {
    printf ("\nOK. Thank you.");
    // 清空密码
    memset(password, 0, sizeof(password));
  }
  
  return 0;
}

内容的提问来源于stack exchange,提问作者Prasanna Jetty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:09:01