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

C语言使用fgets接收用户输入无法得到正确结果问题求助

代码问题分析

  • 第一版代码错误原因:
    printf的格式符使用不匹配:%c用于输出单个char类型字符,你传入的i是字符数组名,本质是数组首元素的内存地址,程序会把地址值强制转为ASCII码输出,因此出现乱码。
  • 第二版修改后代码错误原因:
    同样是格式符与参数不匹配:%s要求传入字符串的首地址(char*类型),而i[0]是数组第一个元素的字符值(比如输入qwerty时i[0]就是字符'q',对应ASCII值113),程序会把这个字符值当成内存地址去读取字符串,触发非法内存访问,属于C语言的未定义行为,会直接导致程序卡顿、崩溃退出。

修复方案

要实现最长80字符输入、倒序输出的功能,你可以按以下逻辑调整代码:

  1. 引入<string.h>头文件,使用strlen函数获取输入字符串的实际长度;
  2. 注意fgets会把用户输入末尾的换行符\n也存入数组,倒序前可以先去除这个换行符;
  3. 从字符串最后一个有效下标开始倒序遍历,逐个输出字符即可。

完整可运行代码如下:

#include <stdio.h>
#include <string.h>
int main()
{
    char input_buf[80];
    printf("Input:\n");
    fgets(input_buf, 80, stdin);

    // 去除fgets读入的末尾换行符
    int len = strlen(input_buf);
    if (len > 0 && input_buf[len - 1] == '\n') {
        input_buf[len - 1] = '\0';
        len--;
    }

    // 倒序输出
    printf("Reverse output:\n");
    for (int i = len - 1; i >= 0; i--) {
        printf("%c", input_buf[i]);
    }
    printf("\n");
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:06:06