c语言scanf后面不执行,c语言为什么scanf直接跳过去了

  c语言scanf后面不执行,c语言为什么scanf直接跳过去了

  在的第一篇博文中

  最近学习C语言遇到一个问题,就是在运行scanf函数的时候什么都不做。结果它直接跳过了我输入的数据。代码如下:

  #包含stdio.h

  int main()

  {

  int a;char c;

  scanf(%d ,

  scanf(%c ,

  printf(%d %c ,a,c);

  返回0;

  }

  按照我原来的设想,程序运行后,我会在键盘上输入一个数字0,再输入一个字符A然后回车。结果应该如下图所示。

  但实际上我在键盘上输入了一个数字0,输入后直接变成了如下图所示。没有进入第二个scanf功能,程序结束。

  经过调试,我发现程序结束后实际执行了第二个scanf函数,符号变量C的值从 \ 000 (ASCII值为 \ 000 为10)变成了 \ n (ASCII值为10),如下图所示。

  经过查阅,我终于发现出现这种现象是因为我们在使用scanf进行数据类型化时,数据并不是直接赋给变量,而是先存储在一个缓冲区中。当我们按下回车键时,我们从缓冲区读取数据,并将其分配给变量。当我们使用scanf函数时,按回车键会自动生成一个换行符 \ n (这就是为什么当我们使用scanf输入数据时,按回车键会自动换行)。这个换行符

  当我们执行第一个scanf的时候,没有影响,但是当我们执行第二个scanf函数的时候,我们会在按enter键之后,在缓冲区中读取前一个scanf函数生成的 \ n ,然后赋给变量C,直接跳过我们第二个数据输入的过程,所以我们可以看到最后会有一个换行符。

  我觉得 \ n 是用单引号括起来的字符,在格式上和我们定义的变量C数据类型一样属于单个字符,所以会被误读,因为我发现如果第二条scanf语句的输入数据的数据类型是整数、字符串或者浮点,就不会出现这种现象。

  具体解决方案:

  1.将第二个scanf语句改为scanf ("%c "),并在%c前面键入一个空格,如下所示。

  #包含stdio.h

  int main()

  {

  int a;char c;

  scanf(%d ,

  scanf( %c ,

  printf(%d %c ,a,c);

  返回0;

  }

  2.将getchar语句添加到第一个scanf语句的下一行,以消耗换行符,如下所示。

  #包含stdio.h

  int main()

  {

  int a;char c;

  scanf(%d ,

  getchar();

  scanf(%c ,

  printf(%d %c ,a,c);

  返回0;

  }

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: