c语言输入输出

c语言输入输出

1. 数据输出

c语言无I/O语句,I/O操作由函数实现:

#include <stdio.h>

1.1 字符输出函数: 

格式:putchar(c)

参数:c为字符常量、变量或表达式

功能:把字符c输出到显示器上

返值:正常,为显示的代码值

#include <stdio.h>
int main(int argc,char *argv[])
{
    int a=65;
    char ch='B';
    putchar(a);
    putchar('\n');
    putchar(ch);

    return 0;
}

 打开帮助手册,发现putchar里面是int 类型的字符,int里面认为的是ASCII码值,为什么不是char类型的,因为char类型的变量是-128~127范围而ASCII码的是0~255。

1.2 格式输出函数 

格式:printf(“格式控制串”,输出表)

功能:按指定格式向显示器输出数据

输出表:要输出的数据

格式控制串:包含两种信息

格式说明:%【修饰符】格式字符,用于指定输出格式

普通字符:原样输出

格式符

作用

i,d

十进制整数

x,X

十六进制无符号整数

o

八进制

u

无符号十进制整数

c

单一字符

s

字符串

e,E

指数形式浮点小数

f

小数形式浮点小数

g

e和f中较短的一种

%%

百分号本身

#include <stdio.h>
int main(int argc,char *argv[])
{
    int a=254;
    char ch='A';
    char s[]="adwdada";
    float f1=567.12;

    printf("%d %x %o\n",a,a,a);
    printf("%c %d\n",ch,ch);
    printf("%s\n",s);
    printf("%f %e %g\n",f1,f1,f1);
    return 0;
}

附加格式说明符:

修饰符

功能

m

输出数据域宽,数据长度

.n

对实数,指定小数点后位数(四舍五入)

对字符串。指定实际输出位数

-

输出数据在域内左对齐(缺省右对齐)

+

指定在有符号数的正数前显示正号(+)

0

输出数据时指定左面不使用的空位置自动填0

#

在八进制和十六进制前显示前导0,0x

|

在d,o,x,u前,指定输出精度为long型

在e,f,g前,指定输出精度为double

#include <stdio.h>
int main(int argc,char *argv[])
{
        int a=254;
        float f1=12.3456;
        char ch='a';
        char s[]="Hello,World!";
        printf("%15s\n%15.5s\n%2.5s\n%.5s\n",s,s,s,s);        
        printf("%8d\n%2d\n",a,a);
        printf("%9f\n%9.3f\n%.2f\n",f1,f1,f1);
        printf("ch=%5c\n",ch);
        printf("%08d\n%0+8d\n",a,a);
        return 0;
}

1.3 字符串输出函数puts

格式:int puts(const char*s)

功能:向显示器输出字符串(输出完,换行)

说明:字符数组必须以‘\0’结束

#include <stdio.h>
int main(int argc,char *argv[])
{
        char s[5];
        gets(s);
        printf("s:%s",s);
        printf("****\n");
        puts("$$$$");
        puts(s);
        return 0;
}

数组在后面会有讲解 ,也可以自己先在网上查一下定义

 

2. 数据输入

2.1字符输入函数getchar:

格式:getchar()

功能:从键盘读一字符

返值:正常,返回读取的代码值;出错或结束键盘输入,返回(Ctrl+d)。

注意: 输入数据时,遇以下情况认为该数据结束: 遇空格、TAB、或回车 遇非法输入 遇宽度结束

#include <stdio.h>
int main(int argc,char *argv[])
{
        int ch;
        printf(">");
        ch=getchar();
        putchar(ch);
        putchar('\n');
        return 0;
}

2.2格式输出函数: 

格式:scanf(“格式控制串”,地址表)

功能:按指定格式从键盘读入数据,存入地址表指定

存储单元中,并按回车键结束

返值:正常,返回输入数据个数

地址表:变量的地址,常用取地址运算符&

格式符

作用

i,d

十进制整数

x,X

十六进制无符号整数

o

八进制

u

无符号十进制整数

c

单一字符

s

字符串

e

指数形式浮点小数

f

小数形式浮点小数

#include <stdio.h>
int main(int argc,char *argv[])
{
        int a;
        printf("请输入:");
        scanf("%x",&a);
        printf("%d\n",a);
        return 0;
}

注意这里我输入的是十六进制的数,输出的是十进制的数,不懂的可以看看之前的文章怎么转换或者在网上搜 

scanf函数支持的格式说明符可以带以下修饰符

修饰符

功能

h

用于d,o,x前,指定输出为short型整数

l

用于d,o,x前,指定输出为long型整数

用于e,f前,指定输出为double型整数

m

指定输入数宽度,遇空格或不可转换字符结束

*

抑制符,指定指定输入项读入后不赋给变量

#include <stdio.h>
int main(int argc,char *argv[])
{
        int a,b,c;
        scanf("%4d%2d%2d",&a,&b,&c);
        printf("%d,%d,%d\n",a,b,c);
    
        scanf("%4d%*2d%2d",&a,&c);
        printf("%d,%d\n",a,c);
        return 0;
}

抑制符可以理解为你输入的值被吞掉了。 

用“%c”格式符时,空格和转义符作为有效字符输入

#include <stdio.h>
int main(int argc,char *argv[])
{
        char a,b,c;
        scanf("%c%c%c",&a,&b,&c);
        printf("%d,%d,%d\n",a,b,c);
        return 0;
}

总结,输入数据时,遇到以下情况认为该数据结束:

遇空格,Tab键,回车键

遇到非法输入

遇到宽度结束

2.3 输入函数的“垃圾”

 为什么只输出了一个值,但是最后ch也有值,这是因为当输入5之后,按下回车键本意是按下回车键结束输入,但是这个回车键被当成了字符输入值。这个就叫输入函数的“垃圾”。

解决方法:加入getchar();

解决方法:用格式串中空格或“%*c”来“吃掉”

 

#include <stdio.h>
int main(int argc, const char *argv[])
{
    char a;
    char b;
    char c;
//回收垃圾方式的三种方式
//方法1:空格、若干空格、tab、\n
#if 0
    scanf("%c %c %c", &a, &b, &c);
    #endif
//方法2:%*c 回收任何一个字符, tab 键 ,空格键,\n
#if 0
//%*c 回收任何一个字符, tab 键 ,空格键,\n
    scanf("%c%*c%c", &a, &b);
#endif
//方法3:getchar()回收
#if 0
    scanf("%c", &a);
    getchar(); //吃一个字符
    scanf("%c", &b);
#endif
    printf("a=%c b=%c c=%c\n", a, b, c);
    return 0;
}

注意:在第一种方法中,scanf中的格式控制串中你可以插入几个空格或者一个空格隔开,当输入数据时你不管数据之间空了几个都算做一个。

 2.4字符串输入函数gets

格式:char*gets(char*s)

功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加‘\0’

说明1:输入串长度应小于字符数组维数

说明2:与scanf函数不同,gets函数并不以空格作为字符串输入结束标志。

#include <stdio.h>
int main(int argc,char *argv[])
{
        char s[5];
        gets(s);
        printf("%s\n",s);
        return 0;
}

注意:因为数组的大小限制(数组会在后面有讲解,也可以自行在网上了解定义)如果输出超过了四个字符,就不行。(初学者,如果有错误欢迎各位指正,一起学习一起进步)

  • 30
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习嵌入式学习每一天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值