C语言学习(二)数据输入输出
1、C语言本身不提供输入输出语句,输入和输出操作是由C函数库中的函数来实现的
字符输入函数: getchar 字符输出函数:putchar
格式输入函数: scanf 格式输出函数: printf
字符串输入函数:gets 字数串输出函数:puts
1.1、字符输入输出
字符输出函数putchar(c)
#include<stdio.h> void main() { char a,b,c; a=‘B’;b=‘O’;c=‘Y’; putchar(a); putchar(b); putchar(c); putchar(‘\n’); }
字符输入函数getchar()
#include<stdio.h> void main() { char c; c=getchar(); putchar(c); putchar(‘\n’); }
1.2-1、格式输出
%d:以带符号的十进制形式输出整数 %o:以八进制无符号形式输出整数 %x:以十六进制无符号形式输出整数 %u:以无符号十进制形式输出整数 %c:以字符形式输出,只输出一个字符 %s:输出字符串 %f:以小数形式输出单,双精度数,隐含输出六位小数 %e:以指数形式输出实数 %g:选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0
1.2.1、d格式
1.%d: 按十进制整型数据的实际长度输出。 2.%md: m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。 例: printf(″%4d,%4d″,a,b); 若a=123,d=12345,则输出结果为 123,12345 3.%ld:输出长整型数据。 例: long a=135790;/* 定义a为长整型变量*/ printf(″%ld″,a);
1.2.2、o格式
1.输出的数值不带符号,符号位也一起作为八进制数的一部分输出。 例:int a=-1; printf("%d,%o",a,a); -1在内存单元中的存放形式(以补码形式存放)如下: 1111111111111111 输出为: -1,177777 2.不会输出带负号的八进制整数。对长整数(long型)可以 3.用“%lo”格式输出。还可以指定字段宽度, 例:printf("%8o",a); 输出为: 177777。 (数字前有2个空格)
1.2.3、x格式
以十六进制数形式输出整数。同样不会出现负的十六进制数。 例:int a=-1; printf(″%x,%o,%d″,a,a,a); 输出结果为: ffff,177777,-1 可以用“%lx”输出长整型数,也可以指定输出字段的宽度 例: “%12x”
1.2.4、u格式
用来输出unsigned型数据.
一个有符号整数(int型)也可以用%u格式输出
一个unsigned型数据也可以用%d格式输出
unsigned型数据也可用%o或%x格式输出
1.2.5、c格式
c格式符,用来输出一个字符,也可指定宽度用空格填充
1.2.6、s格式
1.%s,输出字符串
例如: printf(″%s″,″CHINA″) 输出字符串“CHINA”(不包括双引号)。 2.%ms,输出的字符串占m列,若串长大于m,则全部输出,若串长小于m,则左补空格。 3.%-ms,若串长小于m,字符串向左靠,右补空格。 4.%m.ns,输出占m列,只取字符串中左端n个字符,输出在m列的右侧,左补空格。 5.%-m.ns,n个字符输出在m列的左侧,右补空格,若n〉m,m自动取n值。
1.2.7、f格式
1.%f。不指定字段宽度,由系统自动指定字段宽度,使整数部分全部输出,并输出6位小数。应当注意,在输出的数字中并非全部数字都是有效数字。单精度实数的有效位数一般为7位
2.%m.nf。指定输出的数据共占m列,其中有n位小数。如果数值长度小于m,则左端补空格
3.%-m.nf与%m.nf基本相同,只是使输出的数值向左端靠,右端补空格
1.2.8、e格式
1.%e。不指定输出数据所占的宽度和数字部分的小数位数. 例: printf(″%e″,123.456); 输出: 1.234560 e+002 所输出的实数共占13列宽度。(注:不同系统的规定略有不同) 2.%m.ne和%-m.ne。 m、n和“-”字符的含义与前相同 此处n指拟输出的数据的小数部分(又称尾数)的小数位数 若f=123.456,则: printf("%e %10e %10.2e %.2e %-10.2e",f,f,f,f,f); 输出如下: 1.234560e+002 1.234560e+002 1.23e+002 1.23e+002 1.23e+002 13列 13列 10列 9列 10列
1.2.9、g格式
根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的零。 例:若f=123.468,则 printf(″%f %e %g″,f,f,f); 输出如下: 123.468000 1.234680e+002 123.468 10列 13列 10列
1.2-2、格式输入
按照变量在内存的地址将变量值存进去
#include<stdio.h> void main() { int a,b,c; scanf(“%d%d%d”,&a,&b,&c); printf(“%d,%d,%d\n”,a,b,c); }
说明:
1.对unsigned型变量所需要的数据,可以用%u,%d或%o,%x格式输入 2.可以指定输入数据所占的列数,系统自动按它截取所需数据 3.如果在%后有一个“*”附加说明符,表示跳过它指定的列数 4.输入数据时不能规定精度
注意:
(1)scanf函数中的“格式控制”后面应当是变量地址,而不应是变量名 (2) 如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时在对应位置应输入与这些字符相同的字符 (3) 在用“%c”格式输入字符时,空格字符和“转义字符”都作为有效字符输入 (4) 在输入数据时,遇以下情况时认为该数据结束 ① 遇空格,或按“回车”或“跳格”(Tab)键; ② 按指定的宽度结束,如“%3d”,只取3列; ③ 遇非法输入
1.3 字符串输入输出
字符数组的输入输出可以有两种方法:
1. 逐个字符输入输出。用格式符“%c”输入或输出一个字符。
2. 将整个字符串一次输入或输出。用“%s”格式符,意思是对字符串的输入输出
用puts函数输出的字符串中可以包含转义字符
char str[]={″China\nBeijing″}; puts(str);
gets(字符数组) 其作用是从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。
gets(str) 等待键盘录入:
注意:scanf不能接受空格、回车、制表符Tab,而gets可以接受。相同点:字符串接受结束后自动添加‘\0’