cache存储,为啥不能手动输入(语言-c语言)

img


scanf有啥语法要求嘛,为啥我输出一直是跳过手动,而且调用的子函数也是错误的

你地址流是一个整数,但你 输入了 很多整数【它们是空格分隔的】,这就是下面的输入为啥被接收的原因

img

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/224377
  • 这篇博客也不错, 你可以看下【C-函数】scanf函数原理
  • 同时,你还可以查看手册:c语言-scanf() 中的内容
  • 除此之外, 这篇博客: c语言scanf用法详解中的 3.1 例1 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • char*p = NULL;
    int n = 0;
    scanf("Hello%2$10ms%3$n",0,&p,&n);
    

    解析流程:

    1. scanf会从格式串的第一个字符开始遍历,若字符不是%,那么与读入的字符相比较,相同的话,遍历下一个字符。
    2. 当scanf遇到%的时候,之后读取到了2,读取到$后,scanf会把数据保存在第二个参数
    3. 继续解析10 ,这个10的含义就是,从输入的内容中最多读取10个字符。
    4. 解析到m,scanf会自己创建一个缓冲区,把从输入的内容中转换的结果写到这个缓冲区内,最后把缓冲区地址写到参数指定的位置
    5. 解析到s,scanf之后将会读取字符串到指定的buffer内.
    6. 后面的%3 $n同理,scanf会把前面已经读取的字符数写到第三个参数指定的地址处。

    接着我们输入 HelloAAAAAAAAAAAA
    Hello与格式串中开始位置的Hello相匹配,继续看后面
    %2$10ms,最多读取10个字符,并且自己创建缓冲区,把字符串,也就是10个A读到自己创建的缓冲区内,并把地址写到第二个参数指定的位置。
    %3 $n ,前面读取了15个字符,所以这里会把15写到第三个参数指定的位置
    运行看一下:
    在这里插入图片描述

    再输入内容 Helaaaaaa看一下,匹配成功三个字符,然后第四个失败,scanf结束,最后p 任然是0,n任然为0

    在这里插入图片描述

  • 您还可以看一下 李南江老师的零基础学会C语言课程中的 scanf函数注意点(掌握)小节, 巩固相关知识点