4.1音频输出 (4.2数据的输入输出)

4.1输入和输出

本节必须掌握的知识点:

熟练使用在控制台输入输出

理解格式化字符串

理解转义字符

4.1.1【控制台输出】

使用printf函数可以直接在控制台输出数据。

例:在控制台输出"输出""Hello"数据,使用printf()函数实现。

代码示例CH04_1_1

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

printf("输出");

return 0;

}

4.2数据的输入输出,4.1音频输出

图4-1-1中,可以看出printf函数既可以输出中文,又可以输出英文。

在第三章3.4节中提到过printf函数,这里详细介绍printf函数。

printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。

printf()函数的调用格式为:

printf("<格式化字符串>", <参量表>);其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符,用来确定输出内容格式。

参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则将会出现意想不到的错误。自己可以动手验证,这里不再例举。

使用printf时注意事项:

1、使用printf时尽量使用英文,因为中文在计算机的世界里是一个很复杂的问题,涉及到编码问题。

2、编写printf()函数时,注意小括号内的内容,小括号内的内容是参数列表;其次注意双引号,双引号内的内容是格式化字符串,是显示在控制台窗口的内容;再者"\n","\n"代表换行,看图4-1-1中,"输出"和"Hello"不在同一行里,这是"\n"的作用。如果不写入"\n"输出的结果会很乱,比如,我们在控制台输出"student""school""cool"这几个字符串,如图4-1-2是没有换行的,图4-1-3是换行之后的,经对比可以看出"\n"存在的必要性。

代码示例CH04_1_2

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

printf("student\nschool\ncool");

system("pause");

return 0;

}

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

printf("student");

printf("school");

printf("cool");

system("pause");

return 0;

}

4.2数据的输入输出,4.1音频输出

4.2数据的输入输出,4.1音频输出

【printf函数下格式化字符串】

printf("<格式化字符串>", <参量表>);

1、 格式化规定符

字符 作用%d 十进制有符号整数

%u 十进制无符号整数

%f 浮点数

%s 字符串

%c 单个字符

%p 指针的值

%e 指数形式的浮点数

%x,%X 无符号以十六进制表示的整数

%0 无符号以八进制表示的整数

%g 自动选择合适的表示法

2、一些特殊规定字符

字符 作用

\n 换行

\f 清屏并换页

\r 回车

\t Tab符

\xhh表示一个ASCII码用16进表示,其中hh是1到2个16进制数。

自己动手完成下面的例题,看不懂没关系,此例题是为了让大家认识这些格式的书写形式。

例:

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

char c=41;

int a = 1;

float f=0.12;

double b=0.11112222333;

char s[20]="hello,www.bcdaren.com";

char *str ="www.bcdaren.com";

printf("a=%d\n",a);

printf("a=%u\n",a);

printf("a=%x\n",a);

printf("a=%o\n",a);

printf("c=%c\n",c);

printf("c=%x\n",c);

printf("f=%f\n",f);

printf("b=%b\n",b);

printf("s=%s\n",s);

printf("*str=%s\n",str);

}

下图是运行后的结果。

4.2数据的输入输出,4.1音频输出

4.1.2【控制台输入】

scanf()函数可以在控制台输入数据。scan表示扫描,f是format的首字母,表示格式化,scanf()函数是格式化输入函数, 它从标准输入设备(键盘) 读取输入的信息。

其调用格式为:

scanf("<格式化字符串>", <地址表>);

地址表是需要读入的所有变量的地址, 而不是变量本身。这与printf()函数完全不同, 要特别注意。各个变量的地址之间同","分开。这么看概念比较模糊,我们编写完下面代码,进入到调试状态下看,会比较清晰。

例:从控制台输入一个整数,并显示这个整数。

代码示例CH04_1_3

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

声明一个int类型的变量【在4.2节中会介绍到变量】

int i;

printf("请输入一个整数:");

scanf("%d",&i);

%d:表示十进制,&:表示取地址符【&符号在第8章指针会详细介绍】

printf("您输入的整数是:%d\n",i);

system("pause");

return 0;

}

在Visual C++中写入代码,按Ctrl+F5,如图4-1-4。

4.2数据的输入输出,4.1音频输出

图4-1-4控制台窗口中显示出了"请输入一个整数:" 此时在控制台窗口光标处键入一个整数即可,输入10后点击键盘上的回撤"Enter"键,查看效果如图4-1-5所示。

4.2数据的输入输出,4.1音频输出

关闭控制台窗口,在"int i"这一行代码按F9下断点,并调出内存窗口,如图4-1-6所示。

4.2数据的输入输出,4.1音频输出

在Watch里Name下输入i,在Memory里Address对应的窗口输入i,并按回撤。

4.2数据的输入输出,4.1音频输出

图4-1-7中,当前变量i的值是一个很大的数值,这是由于定义的变量没有初始化,编译器给我们分配了不确定的值,看内存窗口,变量i的内存地址在0x0012FF7C,而0x0012FF7C存储的数据0xCCCCCCCC。【变量初始化问题会在4.2节变量和常量中详细介绍】。

按F10单步执行,输入10,直行完"scanf("%d",&i);"这一行代码。再查看变量i的值,如图4-1-8。

4.2数据的输入输出,4.1音频输出

图4-1-8是执行完"scanf("%d",&i);"这一行代码后的界面,我们看到&i对应的值是0x0012FF7C,而0x0012FF7C存储的数据是0xA,转化成10进制是10。所以这就是scanf函数怎么寻找定义的变量。而地址表则是当输入显示多个变量的地址形成的地址表。

注意:使用scanf函数时,变量名前加&符号。

【scanf格式化字符串】

1、格式化规定符

字符 作用%d 十进制有符号整数

%u 十进制无符号整数

%f 浮点数

%s 字符串

%c 单个字符

%p 指针的值

%e 指数形式的浮点数

%x,%X 无符号以十六进制表示的整数

%0 无符号以八进制表示的整数

%g 自动选择合适的表示法

2、空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。

3、非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。

4.1.3【转义字符】

所有的ASCII码都可以用"\"加数字(一般是八进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。【ASCII码表详见附录B】
 转义字符 意义 		ASCII码值(十进制) 
 \a	 响铃(BEL) 	007 (蜂鸣,响铃 ) 
 \b 	 退格(BS) 		008 (回退:向后退一格)
 \f	 换页(FF) 		012 		 (换页)
 \n 	 换行(LF)		010 		 (换行,光标到下行行首)
 \r	 回车(CR)		013 (回车,光标到本行行首 )
 \t	 水平制表(HT)	009 		 (水平制表 )
 \v	 垂直制表(VT) 	011 		 (垂直制表)
 \\	 反斜杠 		092 		 (反斜杠)
 \?	 问号字符 		063 		 (问号 )
 \'	 单引号字符 	039 		 (单引号)
 \"	 双引号字符 	034 (双引号)
 \0	 空字符(NULL) 	000 (空字符(NULL),什么都不做 )
 \ddd 	 任意字符 		 		 (三位八进制 )
\xhh 	 任意字符 	 (二位十六进制 )

这么空白的说概念,肯定认识模糊,我们以例题为例。

例:使用C语言发出2次响铃。

示例代码CH04_1_4

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

printf("\a\a\n");

\a 响铃

system("pause");

return 0;

}

4.2数据的输入输出,4.1音频输出

【注:有可能不会发出响铃。因为主板可能缺失蜂鸣器。】

某种环境

下节介绍变量和常量。

练习:

1、 使用printf()函数输出自己的名字。

2、 使用printf()函数,在控制台窗口中输出以下字符串,输出效果如下图所示。

白莲(唐代 陆龟蒙)

素蘤多蒙别艳欺,此花真合在瑶池。

无情有恨何人觉?月晓风清欲堕时。

4.2数据的输入输出,4.1音频输出

3、 在介绍scanf()函数时,声明变量i且并没有赋值,查看变量i的内存地址时,内存地址存储的数据为0xCCCCCCCC为什么?如图所示。【思考题】

4.2数据的输入输出,4.1音频输出

4、把列出的格式化规定符、转译字符,自己动手做实验理解它们各自的用法。

4.2数据的输入输出,4.1音频输出