c输入&输出

简介: c输入&输出

C语言的输入与输出是程序与用户进行交互的重要环节。下面,我将详细讲解C语言中输入与输出的相关知识,并通过示例代码进行演示。

一、标准输入输出函数

在C语言中,标准输入输出主要通过stdio.h头文件中的函数实现,其中最常用的函数是printfscanf

1. printf函数

printf函数用于向标准输出(通常是控制台)打印格式化的字符串。其基本语法为:

int printf(const char *format, ...);

format是一个格式字符串,可以包含普通字符和格式占位符,后面跟着可变数量的参数,这些参数将替换格式字符串中的占位符。

示例:

#include <stdio.h> 
int main() { 
int a = 5; 
float b = 3.14; 
printf("整数是:%d,浮点数是:%f\n", a, b); 
return 0; 
}

在这个例子中,%d是整数的格式占位符,%f是浮点数的格式占位符。程序运行时,会输出“整数是:5,浮点数是:3.140000”。

2. scanf函数

scanf函数用于从标准输入(通常是键盘)读取数据,并根据格式字符串解析数据。其基本语法为:

int scanf(const char *format, ...);

printf类似,scanf也使用格式占位符来指示要读取的数据类型。读取的数据将存储在后面的参数中,这些参数需要使用指针来传递变量的地址。

示例:

#include <stdio.h> 
int main() { 
int a; 
float b; 
printf("请输入一个整数和一个浮点数:\n"); 
scanf("%d%f", &a, &b); 
printf("你输入的整数是:%d,浮点数是:%f\n", a, b); 
return 0; 
}

在这个例子中,用户被提示输入一个整数和一个浮点数。scanf函数读取这两个值,并将它们存储在变量ab中。然后,程序使用printf输出这些值。

二、文件输入输出

C语言也支持文件输入输出,主要通过fopenfclosefscanffprintf等函数实现。

1. fopen函数

fopen函数用于打开一个文件,并返回一个文件指针。其基本语法为:

FILE *fopen(const char *filename, const char *mode);

filename是文件名,mode是打开模式,如"r"表示只读打开,"w"表示写入(会覆盖原有文件内容),"a"表示追加等。

示例:

FILE *fp = fopen("test.txt", "w"); 
if (fp == NULL) { 
perror("文件打开失败"); 
return 1; 
}

这段代码尝试以写入模式打开一个名为test.txt的文件,并返回一个文件指针fp。如果文件打开失败,fopen会返回NULL,并打印错误信息。

2. fprintf函数

fprintf函数用于向文件写入数据。其基本语法与printf类似:

int fprintf(FILE *stream, const char *format, ...);

示例:

fprintf(fp, "Hello, World!\n");

这段代码将字符串"Hello, World!\n"写入到前面打开的文件中。

3. fscanf函数

fscanf函数用于从文件读取数据。其基本语法与scanf类似:

int fscanf(FILE *stream, const char *format, ...);

示例:

char buffer[100]; 
fscanf(fp, "%99s", buffer); // 读取最多99个字符到buffer中,防止缓冲区溢出 
printf("从文件中读取到的数据是:%s\n", buffer);

这段代码会从前面打开的文件中读取一个字符串,并存储到buffer数组中。注意,这里使用了%99s来限制读取的字符数,以防止缓冲区溢出。

4. fclose函数

在完成文件操作后,应使用fclose函数关闭文件。其基本语法为:

int fclose(FILE *stream);

示例:

fclose(fp); // 关闭文件,释放资源

这段代码会关闭前面打开的文件,并释放与之相关联的资源。

总结与完整示例

下面是一个完整的示例程序,演示了标准输入输出和文件输入输出的基本用法:

#include <stdio.h> 
#include <stdlib.h> 
int main() { 
int a; 
float b; 
FILE *fp; 
char buffer[100]; 
// 标准输入 
printf("请输入一个整数和一个浮点数:\n"); 
scanf("%d%f", &a, &b); 
printf("你输入的整数是:%d,浮点数是:%f\n", a, b); 
// 文件输出 
fp = fopen("test.txt", "w"); 
if (fp == NULL) { 
perror("文件打开失败"); 
return 1; 
} 
fprintf(fp, "整数是:%d,浮点数是:%f\n", a, b); 
fclose(fp); 
// 文件输入 
fp = fopen("test.txt", "r"); 
if (fp == NULL) { 
perror("文件打开失败"); 
return 1; 
} 
fscanf(fp, "%99[^\n]", buffer); // 读取一行文本到buffer中 
printf("从文件中读取到的数据是:%s\n", buffer); 
fclose(fp); 
return 0; 
}

这个程序首先通过标准输入获取一个整数和一个浮点数,然后将这些数据写入到一个文件中。接着,程序打开这个文件,读取其中的数据,并通过标准输出打印出来。

相关文章
|
Oracle 关系型数据库 分布式数据库
PolarDB常见问题之PolarDB(Oracle兼容版) 执行命令报错如何解决
PolarDB是阿里云推出的下一代关系型数据库,具有高性能、高可用性和弹性伸缩能力,适用于大规模数据处理场景。本汇总囊括了PolarDB使用中用户可能遭遇的一系列常见问题及解答,旨在为数据库管理员和开发者提供全面的问题指导,确保数据库平稳运行和优化使用体验。
|
11月前
|
人工智能 自然语言处理 程序员
IDEA + 通义灵码 AI 程序员:探索智能编码的未来
本文通过通义灵码的【AI程序员】功能,使用JavaGUI完成贪吃蛇小游戏
598 9
|
12月前
|
缓存 分布式计算 资源调度
Spark 与 MapReduce 的 Shuffle 的区别?
MapReduce 和 Spark 在 Shuffle 过程中有显著区别。MapReduce 采用两阶段模型,中间数据写入磁盘,I/O 开销大;而 Spark 使用基于内存的多阶段执行模型,支持操作合并和内存缓存,减少 I/O。Spark 的 RDD 转换优化减少了 Shuffle 次数,提升了性能。此外,Spark 通过 lineage 实现容错,资源管理更灵活,整体大数据处理效率更高。
|
存储
计算机组成原理(7)----CPU内部单总线数据通路
计算机组成原理(7)----CPU内部单总线数据通路
1700 0
|
索引 Python
PDF文件页面提取操作小指南
PDF文件页面提取操作小指南
336 4
|
缓存 Ubuntu 网络协议
Linux中常见的问题
【10月更文挑战第2天】
294 3
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版产品使用问题之使用CTAS同步MySQL到Hologres时出现的时区差异,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
机器学习/深度学习 安全 网络安全
【计算巢】数字取证:追踪和分析网络犯罪的方法
【6月更文挑战第4天】本文探讨了数字取证在网络安全中的关键作用,通过Python编程展示如何分析网络日志以发现线索。数字取证利用科学方法收集、分析电子数据,以应对黑客入侵、数据泄露等网络犯罪。文中提供的Python代码示例演示了从服务器日志中提取IP地址并统计访问次数,以识别异常行为。此外,实际的数字取证还包括数据恢复、恶意软件分析等复杂技术,并需遵循法律程序和伦理标准。随着技术发展,数字取证将更有效地保障网络空间的和平与秩序。
364 5
|
移动开发 小程序 API
uniapp组件库Line 线条 的适用方法
uniapp组件库Line 线条 的适用方法
855 0
|
NoSQL Java 调度
订单超时取消的11种方法(下)
大家好,我是三友~~ 延迟任务在我们日常生活中比较常见,比如订单支付超时取消订单功能,又比如自动确定收货的功能等等。 所以本篇文章就来从实现到原理来盘点延迟任务的11种实现方式,这些方式并没有绝对的好坏之分,只是适用场景的不大相同。
订单超时取消的11种方法(下)