C语言从头学45——I/O函数(二)

本文继续学习I/O函数,并延续前文的编号。

(三)、sscanf() 函数

sscanf() 函数与scanf() 有些相似,不同之处sscanf() 是从已有的字符串里面获取数据;这个函数也是定义在stdio.h中。

功能:处理已经输入到计算机中的字符串,从其中提取有用的数据

格式:sscanf(参1,参2,参3)

参1 字符串指针变量或字符串常量

参2 占位符字符串(指出从参1中解析出什么数据)

参3 接收变量地址

返回值:解析字符串成功,返回值是成功赋值的变量个数,如果解析失败,没解析出内容返回0,如果解析的是"\n"或"\0"或空格等则返回-1。

说明:

a.函数sscanf 在解析字符串时,需要占位字符串中的占位符类型、个数与接收变量的一致;占位符字符串中的间隔符号与源字符串中的间隔符号也要匹配。

b.函数sscanf 的数据来源是储存在变量中的,所以可以反复使用,一次不能解析出来可以二次解析,甚至多次完成;这点不同于scanf 是流数据,过去就完了。

c.函数sscanf 在使用时和scanf 一样,系统也会报警该函数不够安全导致不能编译,如想取消报警,可在程序头部添加语句:#define _CRT_SECURE_NO_WARNINGS。

(四)、getchar() 函数

这个函数我们一直在用,以往使用它的目的是为了阻塞程序的运行,使我们能够看到程序运行的结果(打回车结束程序)。实际上这个函数是用于键盘输入的函数,每调用一次getchar,函数就从键盘读入一个字符。getchar函数定义在头文件 stdio.h中。

功能:获得键盘输入的一个字符

使用格式:getchar(); //无参

返回值:正常接收输入的字符应当是用char类型变量接收;但读取失败时,返回的值是-1,因此处理异常时接收返回值应使用int型;也就是先用int型过滤一下,看是不是-1,如不是则可用char类型接收。

说明:

a.函数getchar从键盘读取字符时如直接按回车键相当于输入非显示字符"\n"。

b.如果输入空格,空格也会作为字符被读入,这一点不同于scanf,需注意。

c.函数getchar读入的都是字符,如果想转变为其它类型,则需要sscanf函数解析;而scanf可以直接输入其它类型数据。

d.由于每个中文字符需要一个以上字节表示,所以仅执行一次getchar函数无法输入中文,如输入中文需要进行循环。

(五)、putchar 函数

函数putchar可以将单个字符输出到屏幕,效果与使用printf 输出一个字符相同;这个函数也定义在头文件stdio.h中。

功能:将作为函数参数的单个字符输出到屏幕

格式:putchar('a');

返回值:成功返回参数字符,不成功返回-1

说明:

a.函数getchar与putchar均是对单个字符的操作,相比较scanf与printf速度来的快。

(六)、puts函数

函数puts可以把字符串显示在屏幕上,并且自动在字符串末尾添加换行符;puts函数定义在头文件 stdio.h中 。

功能:将作为参数的字符串显示到屏幕上

格式:puts(参1); //参1 字符串指针变量或字符串常量

返回值:成功返回非负整数,失败返回-1

(七)、下面将本文涉及的几个函数放到一个小程序中,用例子加深理解。

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS //禁止对sscanf函数报警
#include<stdio.h>
int main(void)
{
//使用sscanf函数解析年月日字符串
    char str[] = "2024年8月12日"; //中文习惯的日期字符串
    int x, y, z;
    int ret=sscanf(str, "%d年%d月%d日", &x, &y, &z); 
    printf("年=%d\n", x); //运行结果:年=2024
    printf("月=%d\n", y); //运行结果:月=8
    printf("日=%d\n", z); //运行结果:日=12
    printf("ret=%d\n", ret); //运行结果:ret=3 (说明成功给三个变量解析到值)
//使用getchar函数输入数据
    int i = 0;
    int getChar;
    char str1[128] = {0};
    printf("请输入:\n");
    while ((getChar = getchar()) != '\n') //输入12345回车结束
    {
        if (getChar == -1) break;
        str1[i] = (char)getChar;
        i++;
    }
    printf("str1=%s\n",str1);//运行结果:str1=12345
//使用putchar显示字符
    char str2[] = "abcdefghijklmn";
    i = 0;
    while (str2[i] != '\0')
    {
        putchar(str2[i]); //运行结果:abcdefghijklmn
        i++;
    }
//使用puts显示字符串
    puts(str2); //可以看到puts的显示是紧跟在putchar显示内容的后边,说明putchar不提供自动换行
    puts(str2); //puts第二次显示是另起一行的,说明puts显示字符串是自动加换行符的
    getchar(); 
    return 0;
}
相关推荐
小林熬夜学编程1 小时前
C++第五十一弹---IO流实战:高效文件读写与格式化输出
c语言·开发语言·c++·算法
尸僵打怪兽1 小时前
软考(中级-软件设计师)(0919)
java·c语言·数据库·计算机网络·软考·多媒体·软件设计师
轩轶子3 小时前
【C-项目】网盘(一期,线程池版)
服务器·c语言
m0_631270403 小时前
高级c语言(五)
c语言·开发语言
2401_858286113 小时前
53.【C语言】 字符函数和字符串函数(strcmp函数)
c语言·开发语言
lib钱4 小时前
RO通讯数据包
c语言
Freestyle Coding7 小时前
使用rust自制操作系统内核
c语言·汇编·microsoft·rust·操作系统
标标大人9 小时前
c语言中的局部跳转以及全局跳转
android·c语言·开发语言
banjin14 小时前
AI驱动TDSQL-C Serverless 数据库技术实战营-ai学生选课系统数据分析
c语言·人工智能·serverless
DdddJMs__13514 小时前
C语言 | Leetcode C语言题解之第413题等差数列划分
c语言·leetcode·题解