美文网首页
C语言学习 - 输入输出

C语言学习 - 输入输出

作者: Hyso | 来源:发表于2019-02-25 17:54 被阅读0次
输入输出的概念
  • 标准的输出指屏幕终端,标准的输入指键盘,其它的输入输出可以是文件、打印机、扫描仪等设备。
  • 在C语言中,所有的数据输入输出都是由库函数完成的,在使用标准输入输出函数库时要用到stdio.h文件,因此源文件开头要使用预处理指令#include将其包括进来:
    格式: #include <stdio.h>
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 <stdio.h>

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 <stdio.h>

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 <stdio.h>

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

    return 0;
}

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

#include <stdio.h>

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 <stdio.h>

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 <stdio.h>

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 <stdio.h>

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 <stdio.h>

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

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

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

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语言基础知识 | 实践篇

    C语言的数据类型 (1)输入输出 make && run (2)C语言方法的调用 make && run (3)C...

  • C++ 输入输出(cin 和 cout)

    在 C 语言中,我们通常会使用 scanf 和 printf 来对数据进行输入输出操作。在C++ 语言中,C 语言...

  • C语言学习 - 输入输出

    输入输出的概念 标准的输出指屏幕终端,标准的输入指键盘,其它的输入输出可以是文件、打印机、扫描仪等设备。 在C语言...

  • C语言文件输入和输出操作的学习心得(一)

    今天学习了C语言文件输入输出操作的相关知识。在此,向大家分享一下学习心得。 fopen() 首先介绍fopen()...

  • 认识一下C++ 《输入输出cin 和cout》

    在C语言中,通常会使用 printf 和 scanf 来对数据进行输入输出操作。 在C++语言中,C语言的这一套输...

  • 小朋友学C++(23):C与C++的文件输入输出

    一、fopen fopen是C语言中的标准输入输出函数,被包含在 中。C语言中,用fopen来打开文件。函数声明:...

  • C语言基础教程之输入输出

    C语言与计算机的沟通必备,C语言基础教程之输入输出,简单交流 C语言输入&输出 当我们提到输入时,这意味着要向程序...

  • C语言-运算符

    C语言运算符是说明特定操作的符号,它是构造C语言表达式的工具 。C语言的运算是非常丰富的,除了控制语句和输入输出...

  • c++标准输入输出流关系梳理

    输入输出是每一种编程语言必不可少的部分,c++也不例外,下面我们就来说明c++的标准输入输出的前世今生。 1.首先...

  • 2017.11.23

    今天是C语言课程的第一天培训,上午主要讲了C语言的内容,包括常量,输入输出语句,if else语句,for循环语...

网友评论

      本文标题:C语言学习 - 输入输出

      本文链接:https://www.haomeiwen.com/subject/mtvwyqtx.html