【嵌入式开发之标准I/O】字符输入和输出函数及实验

字符输入

下列函数用来输入一个字符:

#include <stdio.h>

int  fgetc(FILE *stream);
int  getc(FILE *stream);   //宏
int  getchar(void);

读取结果:成功时返回读取的字符;若到文件末尾或出错时返回EOF(-1),

getchar()等同于fgetc(stdin)

getc和fgetc区别是一个是宏一个是函数

输入字符函数:fgetc()

#include <stdio.h>

int main(int argc, const char *argv[])
{
	FILE *fp;
	int rec;
	fp = fopen("1.txt", "r");//打开文件
	if (fp == NULL) {
		perror("fopen");//打开失败提醒信息
		return 0;
	}

	rec = fgetc(fp);//读取字符
    if (rec == -1) {
		perror("fgetc:");//读取失败提示信息
        fclose(fp);
        return 0;
	}
	printf("Get char = %c\n", rec);
	rec = fgetc(fp);//验证是接着上一个字符读取
	printf("Get char = %c\n", rec);
	fclose(fp);//关闭文件

	fp = fopen("1.txt", "r");//再次打开文件,为了验证再次打开后,又重新开始读取
	if (fp == NULL) {
		perror("fopen");
		return 0;
	}

	rec = fgetc(fp);//重新开始读取
	printf("Get char = %c\n", rec);
	rec = fgetc(fp);//验证是接着上一个字符读取
	printf("Get char = %c\n", rec);
    
    fclose(fp);

	return 0;
}

输出结果:

Get char = a
Get char = b
Get char = a
Get char = b

输入字符函数:getchar()

#include <stdio.h>

int main(int argc, const char *argv[])
{
	FILE *fp;
	int rec;
	fp = fopen("1.txt", "r");
	if (fp == NULL) {
		perror("fopen");
		return 0;
	}

	rec = getchar();
	printf("Getchar STD input = %c:\n", rec);

    fclose(lp);

	return 0;
}

 输出结果:

b
Getchar STD input = b:

注意:

  • 1、函数返回值是int类型不是char类型,主要是为了扩展返回值的范围。
  • 2、stdin 也是FILE *的指针,是系统定义好的,指向的是标准输入(键盘输入)。
  • 3、打开文件后读取,是从文件开头开始读。读完一个后读写指针会后移。读写注意文件位置!
  • 4、调用getchar会阻塞,等待你的键盘输入,在这个例子中,直到从键盘输入字符'b'时,才显示Getchar STD input = b。

字符输出

下列函数用来输出一个字符:

#include <stdio.h>

int  fputc(int c, FILE *stream);
int  putc(int c, FILE *stream);
int  putchar(int c);

输出结果:成功时返回写入的字符;出错时返回EOF(-1)

putchar(c)等同于fputc(c, stdout)

输出字符函数:fputc()

#include <stdio.h>

int main(int argc, const char *argv[])
{
	FILE *fp;
	int rec;
	int wrc = 'w';
	fp = fopen("1.txt", "r");//打开文件
	if (fp == NULL) {
		perror("fopen");//打开失败提醒信息
		return 0;
	}

	rec = fputc(wrc, fp);//写入字符
	if (rec == -1) {
		perror("fputc");
		fclose(fp);
		return 0;
	}

	putchar(rec);//输出到屏幕
	puts("");

	fclose(fp);
	
	return 0;
}

运行结果:

fputc: Bad file descriptor

 出现该错误的原因是用只读模式'r'打开的文件,将打开模式改为读写模式‘w+’或者‘a+’即可解决问题,例如把打开模式改成‘w+’,即:

	fp = fopen("1.txt", "w+");//打开文件

原来存储‘abcdefg‘’的1.txt文件,被重新写入为‘w’字符。

输出字符函数:putchar()

直接将字符输出到屏幕,如上面的代码,直接输出结果为:

w

注意:

  • 1、返回和输入参数都是int类型
  • 2、遇到这种错误:Bad file descriptor,  很可能是文件打开的模式错误(只读模式去写,只写模式去读)

 

 

相关推荐

  1. 3507软件IIC,IO输入输出函数

    2024-07-20 07:12:03       15 阅读
  2. C++标准输入输出名字空间

    2024-07-20 07:12:03       40 阅读
  3. C语言5 字符输出函数格式输出函数

    2024-07-20 07:12:03       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 07:12:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 07:12:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 07:12:03       45 阅读
  4. Python语言-面向对象

    2024-07-20 07:12:03       55 阅读

热门阅读

  1. Python--正则表达式re模块基础匹配方法

    2024-07-20 07:12:03       16 阅读
  2. 2024-07-19 Unity插件 Odin Serializer1 —— 插件介绍

    2024-07-20 07:12:03       17 阅读
  3. 【多商户自营解决方案】

    2024-07-20 07:12:03       16 阅读
  4. 基于深度学习的股票预测

    2024-07-20 07:12:03       15 阅读
  5. centos(或openEuler系统)安装clickhouse集群

    2024-07-20 07:12:03       14 阅读
  6. 介绍下项目的架构

    2024-07-20 07:12:03       11 阅读
  7. Docker 和 k8s 之间是什么关系?

    2024-07-20 07:12:03       13 阅读
  8. 软考高级第四版备考--第25天干系人绩效

    2024-07-20 07:12:03       16 阅读
  9. RK3399 Android7.1.2识别UAS移动硬盘问题

    2024-07-20 07:12:03       15 阅读