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

C语言用户名密码程序开发求助:代码无响应问题排查

问题排查与代码修正

你的程序之所以没有响应,是因为代码里存在逻辑死循环和多个语法/逻辑错误,咱们一步步拆解问题:

核心问题分析

  • 死循环陷阱:你用goto loop1直接跳回while(a[i]!='\r'),但此时i的值始终是0(第一次进入for循环时i=0,执行a[i]=getch()后立刻跳转,for循环的i++根本没机会执行)。而且a[0]是未初始化的随机值,大概率不等于'\r',导致程序一直在while和goto之间无限循环,完全无法进行后续操作。
  • 语法错误:puts('*')是错误的,puts()函数需要传入字符串(双引号包裹),单引号的'*'是字符类型,类型不匹配,应该改为puts("*")或者用printf("*")更合适。
  • 数组越界风险:你定义的char a[10]最多能存9个字符加一个结束符'\0',但循环条件i<=10会访问a[10],这属于数组越界,会导致未定义行为。
  • 未初始化问题:数组a没有被初始化,初始值都是随机垃圾值,while(a[i]!='\r')的判断毫无意义。
  • 非标准写法:main()没有返回值类型声明,标准C要求int main();另外conio.h是Windows平台特有的头文件,getch()在某些编译器(比如GCC)下可能无法使用,不过咱们先解决核心逻辑问题。

修正后的代码

下面是修复了所有问题、符合需求的代码:

#include <stdio.h>
// 如果是Windows平台,保留conio.h;如果是Linux/macOS,可以用ncurses库,这里先按Windows场景处理
#ifdef _WIN32
#include <conio.h>
#else
// 非Windows平台的替代方案,需要先安装ncurses库,编译时加-lncurses
#include <ncurses.h>
#define getch() getch()
#endif

int main() {
    char username[11];  // 最多10位,留一位存结束符
    char password[11];
    int i = 0;
    char ch;

    // 获取用户名
    printf("请输入用户名(最多10位):");
    fgets(username, 11, stdin);
    // 去掉fgets读取的换行符
    if (username[strcspn(username, "\n")] == '\n') {
        username[strcspn(username, "\n")] = '\0';
    }

    // 获取密码,输入时显示*
    printf("请输入密码(最多10位):");
    while (i < 10) {
        ch = getch();
        // 判断是否按下回车(兼容Windows和类Unix系统)
        if (ch == '\r' || ch == '\n') {
            break;
        }
        password[i++] = ch;
        printf("*");  // 每输入一个字符显示一个*
    }
    password[i] = '\0';  // 添加字符串结束符,保证输出正常

    // 输出结果
    printf("\n\n用户名:%s\n", username);
    printf("密码:%s\n", password);
    printf("密码长度:%d\n", i);

    return 0;
}

代码说明

  • 用户名输入用fgets(),可以安全读取最多10位字符,同时处理换行符,避免缓冲区溢出。
  • 密码输入部分:循环读取每个字符,判断是否是回车(兼容Windows的'\r'和类Unix的'\n'),每输入一个字符就输出一个*,直到输入回车或达到10位限制。
  • 给密码数组添加了字符串结束符'\0',保证后续printf能正常输出字符串。
  • 处理了跨平台的getch()问题,注释里说明了不同平台的适配方式。

内容的提问来源于stack exchange,提问作者Ma8hths Indou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 08:47:41