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

C语言字符串空格输入问题:输入姓名后程序终止无法输入国家

问题原因及修正方案

核心问题分析

  • 变量类型错误:name和country是字符串类型,你却声明为float(浮点型),这会导致内存越界、数据错乱,scanf无法正确写入字符串,直接触发未定义行为,程序可能提前终止。
  • scanf格式符错误:读取含空格的字符串应该用%[^\n],你写成了%[s^\n],错误的格式符会让scanf匹配失败,直接跳过后续输入操作。
  • 输入缓冲区残留换行符:输入年龄后按下的回车键(\n)会留在输入缓冲区中,直接用%[^\n]读取姓名时,会把这个换行符当作输入结束,导致姓名读取为空,后续流程异常。

修正后的代码

#include <stdio.h>

int main()
{
    int age;
    char name[100], country[100]; // 用char数组存储字符串,指定足够长度

    printf("Age:");
    scanf("%d", &age);

    printf("Name:");
    scanf(" %[^\n]", name); // 格式符前加空格跳过残留换行,读取到换行为止

    printf("Country:");
    scanf("%s", country);

    // 输出验证
    printf("\n你的信息:\n");
    printf("年龄:%d\n", age);
    printf("姓名:%s\n", name);
    printf("国家:%s\n", country);

    return 0;
}

补充说明

  • 声明字符串时要指定足够的数组长度,避免输入过长导致缓冲区溢出。
  • %[^\n]的作用是读取所有字符直到遇到换行符,这样就能捕获包含空格的完整姓名。格式符前加空格,会自动跳过输入缓冲区中的空白字符(包括换行、空格、制表符),解决残留换行的问题。
  • 如果需要更安全的输入,可以使用fgets替代scanf,避免缓冲区溢出风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:20:47