C语言学习 - 输入输出

输入输出的概念
  • 标准的输出指屏幕终端,标准的输入指键盘,其它的输入输出可以是文件、打印机、扫描仪等设备。
  • 在C语言中,所有的数据输入输出都是由库函数完成的,在使用标准输入输出函数库时要用到stdio.h文件,因此源文件开头要使用预处理指令#include将其包括进来:
    格式: #include
printf函数
  • printf函数称为格式输出函数,其功能是按用户指定的格式把指定的数据输出。
  • printf函数是一个标准函数库,其函数原型声明在头文件stdio.h中。
  • printf函数语法:printf("格式控制字符串", 输出列表);
    I. 格式控制字符串用于指定输出格式,可由格式字符串和非格式字符串两种组成。
    II. 格式控制字符串是以%开头的字符串,在%后面跟各种格式字符,以说明输出数据的类型、形式、长度、小数位等,即:%[标志][输出最小宽度][.精度][长度]类型。
    【标志】:
    -:结果左对齐,右边填空格。
    +:输出符号(正号或负号)。
    空格:输出值为正时冠以空格,为负时冠以负号。
    #:对c、s、d、u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;对e、g、f类,当结果有小数时才给出小数点。
    【输出最小宽度】:
    用十进制整数来表示。
    若实际位数多于定义的宽度,则按实际位数输出,若实际位数小于定义的宽度,则补以空格或0,如:%05d(宽度5位,以0补全)、%5d(宽度5位,以空格补全)。
    【.精度】
    精度格式以.开头,后跟十进制整数。
    此项意义为:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分(四舍五入)。
    【长度】:
    格式符为h、l、L三种,h表示按短整型输出,l表示按长整型输出,L表示按长双精度型输出。
    【类型】:
    d:以十进制形式输出带符号整数(正数不输出符号)。
    o:以八进制形式输出无符号整数(不输出前缀0)。
    x,X:以十六进制形式输出无符号整数(不输出前缀Ox)。
    u:以十进制形式输出无符号整数。
    f:以小数形式输出单、双精度实数。
    e,E:以指数形式输出单、双精度实数。
    g,G:在%f和%e之间自动选择(选择较短的输出宽度)输出单、双精度实数。
    c:输出单个字符。
    s:输出字符串。
    III. 非格式字符串在输出时按照原样输出。
    IV. 输出列表中给出了各个输出项,格式控制字符串和各输出项在数量和类型上应该一一对应。
    *的用法:
#include 

int main(void)
{
    int a, b;
    float c = 555.555;

    scanf("%d%d", &a, &b);
 
    // 第一个*指变量a,表示输出最小宽度;第二个*指变量b,表示精度;0表示不满输出最小宽度时,以0补全
    printf("c:%0*.*f\n", a, b, c);

    return 0;
}

以上程序运行示例:

[root@izbp1ezvecfb1wm1s1l8ggz c_code]# gcc -Wall -O2 -o printf_test printf_test.c   
[root@izbp1ezvecfb1wm1s1l8ggz c_code]# ./printf_test   
9 4
c:0555.5550
scanf函数
  • scanf函数称为格式输入函数,其功能是按用户指定的格式从键盘上把数据输入到指定的变量之中。
  • scanf函数是一个标准函数库,其函数原型声明在头文件stdio.h中。
  • scanf函数语法:printf("格式控制字符串", 地址列表);
    I. 格式控制字符串用于指定输入格式。
    II. 格式控制字符串是以%开头的字符串,在%后面跟各种格式字符,以说明输入数据的宽度、长度、类型,即:%[输入数据宽度]长度]类型。
    【输入数据宽度】:
    用十进制整数来表示。
    若实际输入宽度超过指定宽度,则多余部分被截去。
    【长度】:
    格式符为h、l、L三种,h表示按短整型输入,l表示按长整型输入,L表示按长双精度型输入。
    【类型】:
    d:输入十进制整数。
    o:输入八进制整数。
    x,X:输入十六进制整数。
    u:输入无符号十进制整数。
    f,e,E,g,G:输入浮点数(以小数形式或者指数形式)。
    c:输入单个字符。
    s:输入字符串。
    III. 地址列表中给出各变量的地址,地址是由地址运算符&后跟变量名组成(数组不需要地址运算符&,数组名即是地址)。
    普通变量形式:
#include 

int main(void)
{
    int a, b;
    printf("please input height and width:");
    scanf("%d%d", &a, &b);
    printf("a:%d \n", a);
    printf("b:%d \n", b);

    return 0;
}

数组形式:
注意:使用scanf函数无法读取带空格的输入字符串,若需读取带空格的输入字符串,可以使用fgets函数。

#include 

int main(void)
{
    char a[20];
    printf("please input a word:");
    scanf("%s", a);
    printf("a:%s \n", a);

    return 0;
}

一次输入多个值(多个值之间使用空格分隔):

#include 

int main(void)
{
    char a, b;

    printf("please input two character:");
    // 两个%c之间需使用空格隔开,或者第二个字符将读取两个输入值之间的空格符
    scanf("%c %c", &a, &b);

    printf("a:%c\n", a);
    printf("b:%c\n", b);

    return 0;
}

输入多次内容:

#include 

int main(void)
{
    int a;
    char b;

    printf("please input a number:");
    scanf("%d", &a);
    // 因第一次输入完成后会按回车,因此这里需要使用getchar函数读取回车\n,否则将把回车\n直接赋给变量b
    getchar();
    printf("please input a character:");
    scanf("%c", &b);

    printf("a:%d\n", a);
    printf("b:%c\n", b);

    return 0;
}

*的用法:

#include 

int main(void)
{
    int a;

    // 这里的*表示跳过,因此这里将跳过前2个的输入数据,将第三个输入数据复制给变量c
    scanf("%*d %*d %d", &a);

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

    return 0;
}

以上程序运行示例:

[root@izbp1ezvecfb1wm1s1l8ggz c_code]# gcc -Wall -O2 -o printf_test printf_test.c   
[root@izbp1ezvecfb1wm1s1l8ggz c_code]# ./scanf_test                          
1
2
3
a:3
[root@izbp1ezvecfb1wm1s1l8ggz c_code]# ./printf_test 
1 2 3
a:3
fgets函数
  • fgets函数功能是从指定的流stream读取一行,并把它存储在指定的字符串内。当读取(n-1)个字符,或者读取到换行符,或者到达文件末尾时,它会停止,具体视情况而定。
  • fgets函数是一个标准函数库,其函数原型声明在头文件stdio.h中。
  • fgets函数语法:fgets("字符数组地址", "最多字符数", "从中读取字符的流");
    【字符数组地址】:
    数组名即是字符数组地址
    【最多字符数】:
    用十进制整数来表示。
    通常使用字符数组的长度。
    【从中读取字符的流】
    可以是指向FILE对象的指针,或者标准输入stdin。
#include 

int main(void)
{
    char a[20];
    printf("please input a sentence:");
    // stdin指标准输入,一般是从输入设备如键盘的缓冲区输入
    fgets(a, sizeof(a)-1, stdin);
    printf("a:%s \n", a);

    return 0;
}

以上程序运行示例:

[root@izbp1ezvecfb1wm1s1l8ggz c_code]# gcc -Wall -O2 -o printf_test printf_test.c   
[root@izbp1ezvecfb1wm1s1l8ggz c_code]# ./fgets_test   
please input a sentence:This is a dog.
a:This is a dog.
 

注意:因为输入完成后按回车表示结束,因此最后打印了一行空行。

getchar函数
  • getchar函数是键盘输入函数,从键盘上输入一个字符,通常再将其赋予一个字符变量。
  • getchar函数是一个标准函数库,其函数原型声明在头文件stdio.h中。
  • getchar函数只能接受单个字符,若输入的是数字,也按字符处理;输入多于一个字符时,只接受第一个字符。
  • getchar函数使用:char 字符变量 = getchar()
#include 

int main(void)
{
    char a = getchar();

    printf("a:%c\n", a);

    return 0;
}
putchar函数
  • putchar函数是字符输出函数,在屏幕终端上输出单个字符,并且返回输出的字符。
  • putchar函数是一个标准函数库,其函数原型声明在头文件stdio.h中。
  • getchar函数使用:
#include 

int main(void)
{
    char a;
    
    printf("please input a character\n");
    a = getchar();

    char b = putchar(a);
    // 输出换行符时必须使用单引号包括
    putchar('\n');

    printf("b:%c\n", b);

    return 0;
}

你可能感兴趣的:(C语言学习 - 输入输出)