程序不会停在scanf("%c",&ch)行上,为什么?

 墨镜小靖 发布于 2023-02-13 16:48

程序不会在scanf("%c",&ch)行停止.为什么它会发生sombody可以请向我解释这个

#include
#include

struct list {
   char val;
   struct list * next;
};

typedef struct list item;

void main()
{
    char ch;
    int num;

    printf("Enter [1] if you want to use linked list or [2] for realloc\n");  
    scanf("%d", &num);
    if(num == 2)
    {
        scanf("%c", &ch); 
        printf("%c", ch);
    }
}

Paul92.. 15

假设您在读取num时输入2.实际输入流将是2 \n(\n是换行符).2进入num,并且仍然是\n,进入ch.要避免这种情况,请在格式说明符中添加空格.

scanf(" %c", &ch); 

这将忽略任何空格,换行符或制表符.

2 个回答
  • 假设您在读取num时输入2.实际输入流将是2 \n(\n是换行符).2进入num,并且仍然是\n,进入ch.要避免这种情况,请在格式说明符中添加空格.

    scanf(" %c", &ch); 
    

    这将忽略任何空格,换行符或制表符.

    2023-02-13 16:51 回答
  • 这背后的原因是\n前一个scanf按下Enter键时留下的换行符,用于下一次读取scanf.当声明

    scanf("%c", &ch);   
    

    执行然后它读取前一个\n留下的scanf.
    要吃掉它,\n你可以在%c说明符之前使用空格.%c说明符之前的空格可以占用任意数量的空白字符.

    scanf(" %c", &ch);   
           ^ a space
    

    2023-02-13 16:51 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有