• 1900
    2020-01-28
    其实还可以这样理解:
    scanf做的是从控制台console取数据,存入相应的变量中,sscanf就是从字符串(C语言没有字符串类型,故这里的字符串其实就是字符数组)中取数据,存入相应的变量中;
    同理,printf做的是将变量中的数据输出到控制台console,sprintf就是将变量中的数据输出到字符串中。

    综上,只需要将scanf和printf中提到的控制台换成字符串,然后对应sscanf和sprintf,这样就好理解了。

    作者回复: 对的!

    
     2
  • Makihao
    2020-01-17
    老师,你好 我是还不知道学习什么语言的时候看到你这篇文章,我是小白,有些部分感觉看的还不是太懂,比如课程里的“一起动手,搞事情”这一栏,能否在每次更新的一栏分享上一期你的思路代码,不然没有参考 感觉不懂越来越多 感谢老师

    作者回复: 后面的文章会集中答疑,别着急,动手搞事情不会做的话,就往后看看。以及先学习一些其他知识,记住,采用螺旋式上升的学习方法。

     1
     2
  • Geek_Andy_Lee00
    2020-01-17
    思考题(1)实现了,了解到原来sprintf返回的就是字符串的长度,思考题(2)没有想到,老师能指点一下迷津吗?

    作者回复: 今晚会发布题解,可以关注一下。

     1
     2
  • 奔跑的八戒
    2020-01-16
    sscanf 和 sprintf 函数,本质上在做的是以字符串为中间值,做各种数据类型之间的转换。自学c语言的时候,还真没怎么重视。

    作者回复: d(^_^o)

    
     2
  • Geek_Andy_Lee00
    2020-01-17
    老师,思考题(2)我想了下,代码如下,但是并没有输出单个字符,麻烦老师有时间也帮忙看下。(也是零基础,可能会有比较多的问题麻烦老师)
    int main(){
        char str[100];
        int i;
        sprintf(str, "%s", "I love China.");
        printf("%s", str);
        while (str[i] != '\0') printf("%s\n", str[i]);
        return 0;    
    }
    展开

    作者回复: 你其中两个问题,第一i没有初始化0,第二循环内部,i没有自增,一直是同一个值。

    
     1
  • bug
    2020-01-17
    思考题目:sprintf的返回值为字符串占用空间的长度,减去1就是strlen(仅限英文字符)。
    遍历的话,就用while循环,判断获取到的某个字符是否有字符,没有就退出循环

    作者回复: 第一个,有个问题,仔细想想,sprintf返回值到底是什么?是字符串占用的空间么?
    第二个也有个问题,如何判断还有字符?

     1
     1
  • 徐洲更
    2020-01-16
    今天的作业(不包括思考题): https://github.com/xuzhougeng/learn-c-in-JKSJ/blob/master/jksj-06-sprintf-sscanf.c

    /* 知识点:
     * 1. 格式输入中, 为了表示一个%, 需要用%%
     * 2. sprintf: 将原本输出到屏幕的内容,保存到变量中
     * 3. sscanf: 将原本从屏幕接受的字符串输入,从字符串数组中读取
     * 4. 字符串数组需要以'\0'表示字符串的结束
     */
    收获: printf, scanf家族原来那么强大。不仅仅可以从屏幕中读取/输出信息,其实还可以对字符串数组中, 文件进行读取和写入
    展开

    作者回复: 不错,作业完成的很不错,不过要是能在主函数中加入一个 return 0; 就更完美了。

     1
     1
  • 月泉
    2020-02-09
    我也是第一次用到sscanf()和sprintf(),很赞👍

    作者回复: d(^_^o)

    
    
  • 信念
    2020-02-07
    不是说“hello world”这个字符串内容,长度是 11;“字符串占用空间”应该是 12。那为什么至少要定义长度为12的数组呢?不应该是11吗?

    char str[12] = "hello world";
    printf("%s", str);

    作者回复: 12,占用空间12,也就是说需要在存储空间中占12个存储单元。

     1
    
  • 不便明言
    2020-01-29
    老师,思考题1如下对吗?
    #include<stdio.h>
    void main()
    {
        char c[1];
        int s=0;
        printf("请输入一串字符:\n");
        scanf("%s",&c);
        s=sprintf(c,"%s",c);
        printf("%d\n",s);
        
        system("pause");
        return 0;
    }
    展开

    作者回复: 不对啊,你c那个字符数组怎么才1位呢?1位的字符数组,只能存字符串的结束符啊。

     1
    
  • 潮汐
    2020-01-21
    用\0判断字符数组是否到达尾部作终止条件,while循环,思考题1和2一下就可以通用相同思路。看到上面Lee0的代码一下子想通!
    看了评论说到sprintf返回值就是操作的字符串的长度的话,就可以更直接模拟strlen了。回去实验一下。
    给老师的课程点赞。学到了很多基础的知识。

    作者回复: 也给你坚持学习的精神点赞👍

    
    
  • 信念
    2020-01-17
    3.14159260000000006840537025709636509418487548828125000000000000000000000000000000
    这是当我将3.1415926 2保留80位小数点的结果,这是一个比较出人意料的结果,不过我觉得暂时也还没必要去了解它为什么是这样,因为我现在也有和上面的同胞一样的感觉,感觉思考题不会做,不过,我也愿意采纳胡老师的建议先学一些其他知识,回头再看看它,说不定我就会了,就理解了

    作者回复: 这个就要讲到浮点数的IEEE的标准表示法了。你可以先简单的理解成,任何数据底层都是二进制表示的,而有些数字没办法用二进制精确表示。例如0.4

     1
    
我们在线,来聊聊吧