c语言中的printf()函数 和 scanf() 函数可以说是用得最多的函数,分别是输入/输出函数,也简称 I/O函数,两个函数的工作原理几乎相同,都使用格式字符串和参数列表,今天我们就好好聊聊这两个函数。
printf() 函数
printf() 函数的格式:
printf(格式字符串,待打印项1,待打印项2.....);
待打印项都是要打印的项,可以是常量、变量,甚至可以是需要计算的表达式。
而格式字符串则需要包含每个待打印项的转换说明。
补充一下什么是转换说明,就是用来把数据(待打印项的内容)转换成可显示的形式(数据所呈现出来的样子),下面是一些常见的转换说明。
转换说明 | 输出 |
---|---|
%c | 单个字符 |
%d | 整数 |
%s | 字符串 |
%f | 浮点数 |
%p | 指针 |
%% | 打印一个百分号 |
举个例子,
printf("You look great in %s\n",color);
其中第一个双引号里面的内容就是格式字符串,color就是待打印项列表,%s表示显示的内容是一个字符串,如果color的值是yellow,那么到时候代码运行之后的结果就是:
You look great in yellow.
要注意的是格式字符串中的转换说明一定要与后面的每个项相匹配,否则可能会报错。
如果只打印短语或句子,也就是常量,就不需要用转换说明。如:
printf("hello world!");
printf("我有100块钱");
在c语言中,大部分的函数都有一个返回值,printf() 函数也有返回值,它返回的是打印字符的个数,如果输出错误,printf() 则返回一个负值。举个例子:
程序用 rv = printf(…); 的形式把printf()的返回值赋给rv,该语句执行了两项任务,打印信息和给变量赋值,其次注意针对所有字符数,包括空格和换行符也计算在里面。
scanf() 函数
scanf()和printf() 类似,使用格式字符串和参数列表。scanf()中的格式字符串表明字符输入流的目标数据类型。两个函数主要的区别在参数列表中。printf()函数使用常量、变量和表达式,而scanf() 函数使用指向变量的指针。不懂指针也没关系,记住下面两条规则就行:
如果用scanf() 读取基本变量类型的值,在变量名前面加上一个&
如果用scanf() 把字符串读入字符数组中,不要使用&
举个例子:
如果运行代码提示scanf没有返回值可以像作者一样改为scanf_s;另外如果代码没错运行出错的话参考文章:http://t.csdnimg.cn/xz5nI
从scanf() 角度看输入
接下来我们将更详细地研究scanf() 怎样读取输入。假设scanf()根据一个%d转换说明读取一个整数。scanf() 函数每次读取一个字符,跳过所有的空白字符,直至遇到第1个非空白字符才开始读取。因为要读取整数,所以scanf()希望发现一个数字字符或者一个符号(+或-)。如果找到一个数字或符号,它便保存该字符,并读取下一个字符。如果下一个字符是数字,它便保存该数字并读取下一个字符。scanf()不断地读取和保存字符,直至遇到非数字字符(包括空白)。如果遇到一个非数字字符,它便认为读到了整数的末尾。然后,scanf()把非数字字符放回输入。这意味着程序在下一次读取输入时,首先读到的是上一次读取丢弃的非数字字符。最后,scanf()计算已读取数字(可能还有符号)相应的数值,并将计算后的值放入指定的变量中。
而如果第1个非空白字符是A而不是数字,scanf() 将停在那里,并把A放回到输入中,不会把值赋给指定变量。程序在下一次读取输入时,首先读到的字符是A。
如果程序只使用%d 转换说明,scanf() 就一直无法越过A读取下一个字符。另外,如果使用带多个转换说明的scanf() ,C规定在第一个出错的地方停止读取输入。
用其它数值匹配的转换说明读取输入和用%d 的情况相同。
如果使用%s 转换说明,scanf() 会读取除空白以外的所有字符。这意味着你输入的是一个用空白的句子,最后得到的是一个字符串,去除空白的字符串。还有一点要注意的是,当scanf() 把字符串放进指定数组时,会自动在字符序列的末尾加上’\0‘,让数组中的内容成为一个C字符串。
格式字符串中的普通字符
scanf()函数允许把普通字符放在格式字符串中,除了空白字符外其余的必须与输入字符串严格匹配。
scanf("%d,%d",&m,&n);
scanf()函数读取到的:用户输入了一个数字,一个逗号,再输入一个数字。也就是说用户必须像下面这样进行输入两个整数:
23,45
scanf的返回值
scanf()函数返回成功读取的项数。如果没有读取任何项,且需要读取一个数字而用户输入一个非数值字符串,scanf() 便返回0。
以上的全部内容就是C语言中输入和输出函数的一些简单介绍,写得不好的地方请大家多多包涵,如果有错误的地方欢迎各位大佬指正!!!