学习笔记---C语言中的输入与输出

C语言中的输入和输出:

输入:

主要使用scanf函数:

功能:从标准输入(一般是键盘)获得数据。

格式:scanf(格式描述串,变量地址);(如:int a; scanf("%d",&a);)

需求引用的库:stdio.h  (这也是为什么几乎所有C语言程序的开头总是一句"#include ")


格式控制符:

常见的格式控制符
格式控制符 作用 举例
%d  ,  %i  ,  %ld  ,  %hd 用来输入整型(int)数据,其中%ld(小写L)用于输入长整型,%hd用于输入短整型 int a;   scanf("%d",a);
%o  ,  %lo  ,  %ho 用来输入八进制整数,其中%lo用于输入长整型,%ho用于输入短整型 int a;   scanf("%o",a);
%x  ,  %X  ,  %lx  ,  %hx.... 用来输入十六进制整数,其中x的大小写决定输入的十六进制数中英文字母的大小写,l和h的作用同上 int a;   scanf("%x",a);
%u  ,  %lu.... 用来输入无符号十进制数,l和h的作用同上 unsigned int a;   scanf("%u",a);
%c 用来输入单个字符。 char a;   scanf("%c",a);
%f  ,  %lf 用来输入浮点数,其中%f用来输入单精度型数(float),%lf用来输入双精度型数(double) float a;   scanf("%f",a);


输入数据的分割:

代码1:

#include 
#include 
/*
这个程序用于测试识别输入数据的机制
*/
int main()
{
    int a,b,c,d;
    /*
    两个格式控制符中间用空格分隔
    */
    scanf("%d %d",&a,&b);
    printf("a=%d,b=%d\n",a,b);

    /*
    两个格式控制符中间不分隔
    */
    scanf("%d%d",&c,&d);
    printf("c=%d,d=%d",c,d);
    return 0;
}

结果1:

学习笔记---C语言中的输入与输出_第1张图片

学习笔记---C语言中的输入与输出_第2张图片

解析:

1.可以看到,scanf中的两个格式控制符中间留一个空格和不留的结果是一样的。

2.输入时两个数据间可以用空格,Tab键,Enter键隔开。


代码2:

#include 
#include 
/*
这个程序用于测试识别输入数据的机制
*/
int main()
{
    int a,b,c,d;
    /*
    两个格式控制符中间用空格分隔
    */
    scanf("%d and %d",&a,&b);
    printf("a=%d,b=%d\n",a,b);

    /*
    两个格式控制符中间不分隔
    */
    scanf("%d,%d",&c,&d);
    printf("c=%d,d=%d",c,d);
    return 0;
}

结果2:

学习笔记---C语言中的输入与输出_第3张图片

学习笔记---C语言中的输入与输出_第4张图片

学习笔记---C语言中的输入与输出_第5张图片


解析:

1.当scanf语句中两个格式控制符用非空格的任何字符间隔时,输入时也必须用那个字符来隔开输入的数据

2.当输入时出现错误,未被赋值的变量中将是随机的数。


不同数据类型的自然分割:

直接使用代码说明:

#include 
#include 
/*
这个程序用来测试C语言中输入数据自动分割的机制
*/
int main()
{
    int a,b,c;
    char op;
    int i;
    for(i=0;i<4;i++)
        {
            scanf("%d%c%d",&a,&op,&b);
    if(op=='+')
        {
            c=a+b;
            printf("会算%c,结果是:%d\n",op,c);
        }
    else
        {
            printf("不会算%c\n",op);
        }
        }

    return 0;
}
结果:

学习笔记---C语言中的输入与输出_第6张图片

解析:

1.当为前一个元素获取到了一个值之后,如果碰到下一个元素符合第二个格式控制符的要求,将直接结束第一个元素的获取并将第二个元素放入第二个变量。

2.注意,当输入3.14+3之后,输出的是不会算.而非会算+,或字符格式不正确!


数据缓存区基础概念:


代码:

#include 
#include 
/*
這個程序用來測試數據緩存區的存在
*/
int main()
{
    int i;
    for(i=0;i<4;i++)
        {
            int a,b,c;
            scanf("%d",&a);
            scanf("%d",&b);
            scanf("%d",&c);
            printf("%d %d %d\n",a,b,c);
        }


    return 0;
}

结果:

学习笔记---C语言中的输入与输出_第7张图片

解析:

1.第一次输入时,每输入一个数,就使用回车键将数据赋给变量。第二次输入时,一次性输入3个数据,然后一起赋给变量。

2.两次输入都得到了正确的结果,但第二次输入时。程序的每个个scanf()语句都能拿到正确的值,说明在第一个scanf语句拿完值之后,输入的数据并没有被弃置。而是被暂时存入了一个数据缓存区,之后次需要用到标准输入给变量赋值时,就优先从缓存区中拿取数据


指定宽度的输入:

代码:

#include 
#include 
/*
这个程序用来测试指定宽度的输入
*/
int main()
{
    int a,b;
    scanf("%2d%3d",&a,&b);
    printf("%d %d\n",a,b);

    return 0;
}

结果:


学习笔记---C语言中的输入与输出_第8张图片

解析:

1.通过在格式控制符中加入数字,形成诸如:%2d,%3f.之类的指定宽度的格式控制符,可以使其一次性只从数据缓存区中拿取被指定的宽度的数据(缓存区剩余的数据会继续保存留待下次使用)


其他的注意点:

1.当输入的是一个double型数据时,格式控制符必须使用%lf而非%f.

2.当用scanf 给指针变量赋值时,指针变量前不加取地址符(scanf("%d",p)而非scanf("%d",&p))因为p本身代表的就是变量的地址。


输出:

主要使用printf函数:

功能:用标准输出(一般是输出到显示器)输出信息。

格式:printf(格式描述串,[其他参数]);(如:int a=5; printf("%d",a);)

需求引用的库:stdio.h  (这也是为什么几乎所有C语言程序的开头总是一句"#include ")

格式描述串:

常用的格式描述串
转换描述 实现的转换 对应参数的类型
%d 将参数按整数形式转换输出 int
%ld 将参数按长整数形式转换输出 long
%f 将参数按带小数点数形式转换输出 double(不是float!)
%Lf 将参数按带小数点形式转换输出 long double
%c 输出一个字符 表示字符的编码

注意:

1.格式描述串和格式控制符有很多共同点,但应明确的记住他们的区别!

2.%lf和%f虽然不是对应float型的,但可以用他们输出float型的变量(默认保留小数点后6位)。

3.格式描述串也能指定输出的宽度等格式,指定方式和格式控制符相同。(当输出浮点型时,%lf/%f中加入10.8代表总宽度10位,小数点后的数据占8位)


整型输出格式描述串扩展:

常用的输出整型的格式描述串
格式控制 实际输出形式 参数
%d  ,  %i 带符号的十进制形式整数 int
%o 无符号八进制表示的整数,没有先导的0 int
%x  ,  %X 无符号十六进制整数,没有先导的0x或0X int
%u 无符号十进制整数 int

测试代码:

#include 
#include 
/*
这个程序用来测试常用的输出整型的格式描述串
*/
int main()
{
    printf("%d\n",1234);
    printf("%6d\n",1234);
    printf("%o\n",1234);
    printf("%x\n",1234);
    printf("%X\n",1234);
    printf("%u\n",1234);
    printf("%u\n",-1234);
    return 0;
}
结果:

学习笔记---C语言中的输入与输出_第9张图片
解析:

1.当用%6d输出1234时,可以看到1234前空了两格,这是因为输出格式要求宽度为6.而空出的两格中是用于填充的空格。(可以人为修改用其他符号或数据来代替空格进行填充工作,感兴趣可以自己去查找相关资料)

2.当用%u(无符号十进制)输出-1234时,输出的数明显过于巨大了。这是因为负整型用二进制存储在计算机中时,二进制的第一位是用于存储符号的。而当整数为负时,第一位就是1。而如果我们使用无符号整型输出这个二进制数,解析时就会把首位的1认为是数据的一部分而非符号表示位。所以得到的数会大的反常(如想详细了解,可以去搜索整型在计算机中的存储原理)



浮点型数输出格式描述串扩展:

常用的用于输出浮点型数的格式描述串
格式控制 实际输出格式 参数
%f 一般实数形式,用%m.n形式控制宽度与小数点后位数 double
%e  ,  %E 科学计数形式 double
%g  ,  %G 灵活形式(当指数小于-4或大于等于精度描述用%e或%E的形式输出,否则用%f的形式输出) double

测试代码:

#include 
#include 
/*
这个程序用来测试浮点型数据的格式描述串
*/
int main()
{
    printf("%f\n",1234.56);
    printf("%10.3f\n",1234.56);
    printf("%e\n",1234.56);
    printf("%E\n",1234.56);
    printf("%G\n",1234.56);
    printf("%g\n",1234567.56);
    return 0;
}
输出:

学习笔记---C语言中的输入与输出_第10张图片


解析:

无特异点,参照上方表格方面理解。


注意点:

1.如果输出时参数少于前方定义的格式描述串,缺少的部分会输出随机的数据。

2.如果输出时参数多于前方定义的格式描述串,多余的部分会被自动舍弃(但某些情况下可能会影响程序的运行,所以应该尽量避免这种情况)。

3.如果输出时参数数据类型和格式描述串不匹配,会输出奇怪的东西。




你可能感兴趣的:(学习笔记,C语言,基础)