首页 > 编程语言 > 详细

【C语言】输入输出

时间:2020-07-08 00:40:17      阅读:175      评论:0      收藏:0      [点我收藏+]

输出

putchar(c):字符输出函数

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

#include <stdio.h>

字符输出函数

  • 格式:putchar(c)

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

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

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

  • 查询:

    • man putchar
    • int putchar(int c);

案例:

前置知识:ASCII表

大写A的ASCII值:65

小写a的ASCII值:65+32 = 97

 #include <stdio.h>

int main( )
{
    int a=97;
    char ch = ‘A‘;
    putchar(a);              // 通过ASCII表打印字符a
    putchar(‘\n‘); // 换行
    putchar(ch);             // 直接打印大写字符A
    return 0;
}

printf:格式(化)输出函数

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

  • 功能:按照指定格式向显示器输出数据
  • 输出表:要输出的数据
  • 格式控制串:包含两种信息
    • 格式说明:%[修饰符]格式字符,用于指定输出格式
    • 普通字符:原样输出
格式符号 作用
i, d 十进制整数
x, X 十六进制无符号整形
o 八进制无符号整型
u 无符号十进制整数
c 单一字符
s 字符串
e,E 指定形式浮点小数
f 小数形式浮点小数
g e和f中较短的一种
%% 百分号本身
修饰符 作用
m 输出数据域宽;当数据长度<m,左补空格;当数据长度>m,按照实际输出(失效)
.n 对于实数,指定小数点后位数,(末位)按照四舍五入规则;对于字符串,指定实际输出位数;
- 输出数据在域内左对齐(缺省右对齐)
+ 指定在有符号数的整数前显示正号
0 输出数值时,指定右边不使用的空位置自动填0
# 在八进制和十六进制数前显示导0,0x
l 在d,o,x,u前,指定输出;和整数转换说明符一起使用,表示一个long int或unsigned long int类型值
ll 在e,f,g前,指定输出精度为double型;和整数转换说明符一起使用,表示一个long long int或unsigned long long int类型值(C99)

输入

getchar字符输入函数

  • 格式:int getchar(void)

  • 功能:从键盘中读取一个字符

  • 返回值:

    • 正常时,返回读取的代码值;
    • 错误时,出错或者结束键盘输入,返回-1;
    • 手动结束:Ctrl + D,程序返回-1;
#include <stdio.h>

int main( )
{
    int ch; // 定义一个整形
    printf("#suomi:"); // 通过printf格式化输出函数,输出信息

    ch = getchar(); // 获取用户输入的一个字符
    putchar(ch);    // 输出用户的输入
    putchar(‘\n‘);       // 换行
    printf("ch=%d\n", ch); // 打印输入字符的ASCII值
    return 0;
}

scanf格式输入函数

格式:scanf("格式控制串",地址表);

  • 功能:按指定格式从键盘读入数据,存入地址表指定存储单元中,并按回车键结束输入
  • 返回值:
    • 正常:返回输入数据个数
    • 错误:0
    • 地址表:变量的地址,常用取地址运算符&

格式输入函数

格式符号 作用
格式符号 作用
i, d 十进制整数
x, X 十六进制无符号整形
o 八进制无符号整型
u 无符号十进制整数
c 单一字符
s 字符串
e 指定形式浮点小数
f 小数形式浮点小数

修饰符

修饰符 功能
h 用于d,o,x前,指定输入为short型整数
l 用于d,o,x前,指定输入为long型整数;用于e,f前,指定输入weidouble型实数
m 指定输入数据宽度,遇到空格或不可转换字符结束
* 抑制符,指定输入项读入后不赋值给变量

案例1

#include <stdio.h>

int main( )
{
    int ch, n; // 定义一个整形
    printf("#suomi:"); // 通过printf格式化输出函数,输出信息

    n = scanf("%d",&ch); // 获取用户输
    if (n > 0){ // 通过判断n的值判断是否输入成功
        // 错误处理
    }

    // 特别说明:
    n = scanf("please input pass:%x", &ch); // please input pass:为必须输入的值,输入示例: `please input pass:A`

    putchar(‘\n‘);       // 换行
    printf("%d  %d \n",n, &ch);    // 输出用户的输入
    return 0;
}

案例2:获取用户输入时间

#include <stdio.h>

int main() {
    int y, m, d;
    printf("#suomi:");

    // scanf("%d%d%d", &y, &m, &d); // 未优化的代码

    scanf("%4d%2d%2d", &y, &m, &d); // 优化后的代码

    printf("%d:%d:%d\n", y, m, d);
    return 0;
}

小知识总结:

  1. *修饰符:舍弃输入
scanf("%2d %*3d %2d", &a,&b);
// 若输入 12 345 67 则a为12, b为67, *3d表示舍去中间的3位数字
  1. %c格式符,空格和转义字符作为有效字符上输入
scanf("%c%c%c", &c1, &c2, &c3);

// 若输入a b c, %c获取空格和转义符号
// 则c1 为a, c2为空格, c3为b

输入函数留下的垃圾

输入整数+回车时,回车成为垃圾符号

#include <stdio.h>

int main() {
    int a;
    char x;

    printf("#suomi:");
    scanf("%d",&a);
    scanf("%c",&x);

    printf("%d:%c:%d\n", a,x,x);
    return 0;

}

技术分享图片

回收方法:

方法1:getchar()函数

#include <stdio.h>

int main() {
    int a;
    char ch;

    printf("#suomi:");
    scanf("%d",&a);
    getchar(); // 使用getchar()销毁空格
    ch = getchar();

    printf("%d:%c:%d\n", a,ch,ch);
    return 0;
}

方法2:用格式串空格或者%*c来销毁

// 空格:
int x;
scanf(" %c", &x);

技术分享图片

技术分享图片

字符串输入输出

字符串输入函数gets

格式:char * gets(char *s)

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

说明:

  • 输入串长度应该小于字符数组维数
  • scanf函数不同,gets函数并不以空格作为字符串输入结束标志
#include <stdio.h>

#define N 5

int main() {
    char s[N+1]; // 应该与目标输入多一个地址空间用于存放\0

    gets(s);
    printf("%s\n", s);
    return 0;
}

字符串输出函数puts

格式:int puts(const char *s);

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

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

#include <stdio.h>

#define N 5

int main() {
    char s[N+1]; // 应该与目标输入多一个地址空间用于存放\0

    gets(s);
    printf("%s\n", s);
    puts(s);
    return 0;
}

技术分享图片
技术分享图片

【C语言】输入输出

原文:https://www.cnblogs.com/liangchangyou/p/13263795.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!