C语言入门与提升(1)——详解c语言main函数、printf函数与scanf函数,与va家族

前言:

为什么要学习C语言呢?C语言作为最古老的语言之一,走过了半个多世纪的风风雨雨,至今仍然长盛不衰,占据各大高校编程入门课的榜首,可以看出其重要性。作为面向过程语言,它与C++又可以以较小的代价接轨,所以在这里先讲清楚C语言,在C语言的基础上后期再分享数据结构和算法,以及C++编程。

最简单的也是最多的入门程序

#include<stdio.h>int main(){printf("hello world!\n");return 0;
}

那么稍微有点基础,懂得上csdn的同学肯定都知道这个是啥意思了吧,这里说明几个比较重要的点:

  1. #include表示添加头文件,实际在编译连接的过程中,就是体现在预编译阶段将头文件插入到该位置,所以我们就可以使用头文件 stdio.h 中写好的函数了。
  2. main函数是程序的入口,这里省略了参数 int argc, char *argv[],其中argc:是argument count 的缩写,保存运行时传递给main函数的参数个数。argv:是argument vector 的缩写,保存运行时传递main函数的参数,类型是一个字符指针数组,每个元素是一个字符指针,指向一个命令行参数。argv[0]指向程序运行时的全路径名;argv[1] 指向程序在命令行中执行程序名后的第一个字符串;以此类推直到argv[argc]......argv[argc] 在C++中指向nullptr,在C语言中指向NULL。
  3. 返回值是给到操作系统的,返回0,操作系统就认为你这个程序没有问题,相反,返回其他值就有问题,相应的值还会代表一些特殊的含义,比如说我们都熟知的404,表示服务器无法回应

再说明一下printf函数:

这个函数所在的头文件是stdio.h, 原型是int printf(const char *format, ...);

其中,format是格式控制字符串,也就是我们常用的%s, %d等,后边的省略号表示可变参数列表,也就是可以是任意长度的。至于我们自己写了可变参数后应该如何使用呢?就需要va家族了

va家族中有四个函数

1.va_list    先定义了一个指向可变参数列的参数;
2.va_start(xx,n)  表示开始对可变参数进行解析,第一个参数是va_list变量,第二个是指可变参数从这个n之后开始。
3.n1= va_arg(xx,int)表示将当前可变参数指针指向下一个可变参数,并将其以int形式返回给n1;
4.当遇到n<0的情况,便退出循环.
5.va_end(xx)停止解析,将可变参数指针清空.

当然,还有其余的va函数,但是记住这四个,基本的使用就足够了

除此之外,printf的返回值是int型,表示输出字符的数量,这个是平时大家可能不会注意的一个点。下面是一个范例,巧妙的利用了printf函数返回值,输出了数字n十进制的位数

#include<stdio.h>int main(){int n;scanf("%d",&n);n = printf("%d",n);printf(" has %d digits!\n",n);return 0;
}

与printf函数类似的,还有scanf函数

scanf也在头文件stdio.h中,原型是 int scanf(const char *format, ...);

与printf函数类似,但是scanf的返回值是成功读入参数的个数,如果读入两个参数,都成功的话,就返回2,读入一个返回1,读入零个就返回零,而读取的时候到了文件末尾,读到了“\0”就返回 end of file,读到文件错误时也会返回end of file 也就是EOF, 所以我们在写代码时,想要一直读取就可以这么写

while(scanf("%d",&a) != EOF){

......

}

那么有时候我们读取一行字符串,可能包含空格,应该怎么利用scanf读取呢?

/*************************************************************************> File Name: 17.yihuo.c> Author:Anran > Mail:An77777@88.com > Created Time: Thu 26 Nov 2020 02:47:38 PM CST************************************************************************/#include<stdio.h>int main(){int n;char str[100];scanf("%[^\n]",str);printf(" has %d digits\n",printf("%s",str));return 0;
}

那么到这里呢,这几个函数和va家族基本就解释完了,有什么问题可以在评论区讨论哈!

详解c语言main函数、printf函数、scanf函数与va家族相关推荐

  1. C语言中get_put函数详解,C语言第五课之getchar函数和putchar函数

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 getchar函数也就是键盘输入函数,这个函数和scanf函数不一样!getchar函数没有scanf函数灵活.下面就给大家介绍下getchar函数的介绍 ...

  2. C语言scanf输入a3,【C语言】04 printf和scanf函数

    1.printf函数 这是在stdio.h中声明的一个函数,因此使用前必须加入#include ,使用它可以向标准输出设备输出数据 1.用法 1> printf(字符串) printf(&quo ...

  3. c语言复杂函数转换,详解C语言常用的一些转换工具函数.pdf

    详详解解C语语言言常常用用的的一一些些转转换换工工具具函函数数 1..字字符符串串转转十十六六进进制制 代码实现: void StrToHex(char *pbDest, char *pbSrc, i ...

  4. c语言 字符串 strncpy,详解c语言中的 strcpy和strncpy字符串函数使用

    详解c语言中的 strcpy和strncpy字符串函数使用 strcpy 和strcnpy函数--字符串复制函数. 1.strcpy函数 函数原型:char *strcpy(char *dst,cha ...

  5. c语言malloc用法 数组,详解C语言用malloc函数申请二维动态数组的实例

    详解C语言用malloc函数申请二维动态数组的实例 C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { c ...

  6. 你是真的“C”——详解C语言函数模块知识(上篇)

    详解C语言函数模块知识(上篇)

  7. C语言输入和输出(printf和scanf函数、putchar和getchar函数)

    printf和scanf函数.putchar和getchar函数 输入输出操作都是由C标准函数库中的函数来实现的,要在程序文件开头用预处理指令#include把有关文件放在本程序中#include&l ...

  8. php 有indexof函数吗,详解PHP处理字符串类似indexof的方法函数

    详解PHP处理字符串类似indexof的方法函数 这里有新鲜出炉的 PHP 设计模式,程序狗速度看过来! PHP 开源脚本语言 PHP(外文名: Hypertext Preprocessor,中文名: ...

  9. C语言printf与scanf函数

    在程序开发中,经常会进行一些输入.输出操作 C语言中,提供了printf()和scanf()函数 Printf()函数,用于向控制台输出字符 Scanf()函数,用于读取用户的输入 Printf()函 ...

最新文章

  1. 限流算法(记录cyc大佬的专栏)
  2. thread安全性(写的不错)
  3. Spring 集成web环境
  4. Socket通信 客户端加密数据,传递数据密文到服务端,服务端解密密文 输出明文
  5. hdata datax交流总结
  6. VSCode如何关闭右侧预览功能 - 截图示下
  7. 男子刷机多次拒绝来电 维修师傅的做法被网友怒赞
  8. 服务器虚拟化的意思,服务器虚拟化存储的好处以及作用
  9. xcode Cornerstone 拷贝项目 提示框架头文件找不到的问题
  10. 新装的电脑执行maven install命令一直报Could not find artifact jdk.tools:jdk.tools:jar:1.7
  11. 百万级访问量网站的技术准备工作
  12. 移动机械硬盘测试软件,硬盘检测工具HDTune使用教程
  13. VS2013安装教程
  14. VFP_全面控制EXCEL
  15. 5g理论速度_5G手机用4G套餐速度达300M每秒,其原因令人费解,西瓜视频聊科技...
  16. 京东11万蓝领和1万白领,折射的是整个中国互联网
  17. c语言程序设计陈世清上海交通大学出版社,C语言程序设计
  18. 数值计算笔记之插值(四)三次样条插值
  19. Win10下C:\Users\John以账户名称命名的系统文件夹用户名的修改
  20. sas统计分析学习笔记(六)

热门文章

  1. 解决视频切片转码后无法无法快进的问题
  2. 国标GB/T28181协议下EasyGBS互联网无插件直播服务器对接华为VCN平台接入EasyGBS视频自动停止传输
  3. 《神经网络与深度学习》邱希鹏 学习笔记 (1)
  4. 在同一台机运行多个mysql 服务 多个主/从在同一主机_[ 原创 ]在同一台机运行多个Mysql 服务 多个主/从在同一主机...
  5. 2021年东莞高新企业补贴政策
  6. 用汇编语言写51单片机程序开头为什么一般都这样:ORG 0000H LJMP MAIN ORG 0030H
  7. 关于微信小程序在部分PC设备无法打开的问题
  8. java配置dsf,基于Spring-DM实现分布式服务框架(DSF)(一)
  9. 随机生成车牌号【python实现】
  10. kubeadm快速部署一套K8S集群