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

C语言中scanf后printf无输出问题求助

问题原因及解决办法

你的问题出在输入缓冲区残留的换行符上:

  • 前面输入小数时,你输入完数字后按的回车(\n)会留在输入缓冲区里
  • 后续的scanf("%c", &gender)会直接读取这个残留的换行符,而不是你输入的M/F,导致printf输出的是换行,看起来像是没有内容

解决方法

在读取字符的scanf格式串前加一个空格,让scanf自动跳过缓冲区里的空白字符(包括换行、空格、制表符):

#include <stdio.h>
int main (void)
{
    printf("\n\nHello my name is Saikat Das");
    printf("Hope you are doing well...\n");
    printf("Its been nice meeting you, see you around\n\n\n");
    
    int num;
    printf("Enter a number : ");
    scanf("%d", &num);
    printf("\nYour number is : %d\n\n", num);

    float nu;
    printf("Enter a decimal number : ");
    scanf("%f", &nu);
    printf("\nYour number is : %f\n\n", nu);

    char gender;
    printf("\n\nEnter your gender M/F : ");
    scanf(" %c", &gender); // %c前添加空格跳过残留空白字符
    printf("\n\nYour gender is : %c\n\n", gender);
}

另外你原来的getchar()位置错误,现在不需要它,直接删掉即可。

原理补充

scanf的格式串中,%c是少数不会自动跳过空白字符的格式符之一,而%d、%f这类格式符会自动忽略前面的空白字符。在%c前加空格,相当于告诉scanf先跳过所有空白字符,再读取第一个非空白的字符,正好避开之前残留的换行符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 00:59:59