真正的从零开始学编程③——C PRIMER PLUS第四章(字符串和格式化输入/输出)小结

几天没上,居然有粉丝了??!!妈耶,真的是受宠若惊啊啊。短短两三天,就有两个粉丝了,那么按一天一个的速度来看,一个月30个…半年90个…一年就是365个……..哈哈哈~~~~……
呃…嗯嗯…咳咳,跑偏了,回归正题哈。


先再前面说一下,本人是新手,所以很有可能推理的结果是错误的,如果有错,请在评论区留言,谢谢!尽管我的文章没多少人看,但,我也不希望让那些人看到的答案是错误的,害人啊!所以我把我的推理用方框框起来了,便于你们寻找错误。 
 
  
   
   
嗯…这次想写的是C PRIMER PLUS第四章小结,这么说确实很局限,所以这里把本章题目写一下:字符串和格式化输入/输出,嗯…完美的把题目说了一遍,撑了不少字数。…嗯嗯,,那么,字符串和格式化输入/输出,是什么意思呢?
我简单说一下哈,字符串,就是一个或多个字符的序列。举个栗子,”我真帅”,其中里面的三个字就是字符串,好理解吧。所以,个人认为【printf输出的东西,其实大多数是字符串,像pfintf(“我真帅”),就是输出了字符串】,
好了,那后半句:格式化输入/输出是什么意思呢,【我认为,就是printf与scanf的一些格式。】
  
    
      
确实,听这么说确实很简单,但,书里实在讲的太细了,那我也在这里挑一些重要的东西写一下吧。
 
  
首先,是一个新函数strlen(),用途?目前只学到是用于strlen(name),那strlen是干啥的呢?
举个栗子

#include <stdio.h>
#include <string.h>
#define NAME "CHEN"
int main (void)
{
    printf("%d",strlen(NAME));
    getchar();

    return 0;
}

输出结果是4,显而易见,strlen就是测字符串中字符的字节的(我不知道这样描述是否标准),那说到strlen(),就不得不提sizeof(),sizeof()是干啥的呢?同样来举个栗子

#include <stdio.h>
#include <string.h>
#define NAME "CHEN"
int main (void)
{
    printf("%u,%u",strlen(NAME),sizeof(NAME));
    getchar();

    return 0;
}

输出结果是4,5
 
  
如果我们把CHEN改为QQQQQQ,那么输出结果就成了6,7。
这就见了鬼了,为什么sizeof总会比strlen多1呢?是因为C中的字符串一定以空字符结束
原谅我的画工,触摸板画图伤不起啊

所以strlen输出是4而sizeof输出是5
那么,sizeof的作用就是测整个字符串所占字节的(我不知道这样描述是否准确)。
 
  
   
接下来说一下有关printf与scanf的修饰符与标记,个人感觉有点意思的是“数字”,“.数字”,“*”,“-”
其中,前三个是修饰符,最后是标记。

  
分别解释一下,数字是指%4d,.数字是指%.4d,-是指%-d。*有点特别,我们另外说。

先说前三个,
%4d的4就是控制字符长度的
举例,name=chen,那么输出时,如果是%3d,%4d,%2d,%d,输出结果是chen
若是%5d,则是 chen(注意前面有一个空格,加起来占5个位置)

%.4d是指精度,这个大家都见过吧,
举例A = 2.3333,%.2f输出是2.33
%.3f输出是2.333
%.5f输出是2.33330
同理,若a = 2333 %.5d输出是02333

%-d是指将数据顶头输出的
举例,name=chen 那么%5d就是”空格chen”,但如果是%-5d,那就是”chen空格”

 
  
关于*,printf于scanf的用法都不同
printf中,起控制格式的作用,听起来很抽象,我们举个栗子

#include<stdio.h>
int main (void)
{
    int width,precision;
    float weight;
    printf("输入宽度与精度,用逗号隔开\n");
    scanf("%d,%d",&width,&precision);
    printf("\n输入体重\n");
    scanf("%f",&weight);
    printf("你的体重是%*.*f,输出的宽度与精确度都是你定的哦~",width,precision,weight);
    getchar();
    getchar();
    getchar();

    return 0;
}

嘛嘛,就是这样。

 
  
关于scanf中的*作用是让scanf()跳过相应的输出项,举个栗子

#include<stdio.h>
int main (void)
{
    int a;
    printf("输入三个数");
    scanf("%*d,%*d,%d",&a);
    printf("最后一个数是%d!对吧,哈哈我真厉害",a);

    getchar();
    getchar();
}

若输入时2,3,4,则输出是 最后一个数是4!对吧,哈哈我真厉害。

 
  
关于scanf的*,我个人有个小想法,就是让一个人输入他的名字,然后再缺字输出,造成一种娱乐效果,当再次输入名字是,又输出错误的名字,最后,输出正确的名字,做成一个小游戏,当然我也写出来了,以下是截图。这里没有图片描述
这里也没有图片描述
尴尬的是最后出BUG了,应该是老八仙,你的名字真好听,可惜了本想来个首尾呼应….

 
 
  
   
那么!这次的博客就到此结束啦,写了大概2,3个小时,好慢啊…啧啧,那下个博客我们再见吧,拜拜~(←醒醒吧又没有回头客看你的文章(鄙视脸))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值