使用fgetc() 函数和fputc()函数实例,实现把已打开的文件中的数据逐字符输出到标准输出设备stdout中
时间: 2024-09-25 22:11:53 浏览: 81
在C语言中,`fgetc()`函数用于从指定的文件指针读取一个字符,而`fputc()`函数则用于将一个字符写入到指定的文件中。这里是一个简单的例子,展示了如何使用这两个函数将一个文本文件的内容逐字符读取并输出到标准输出(通常是屏幕):
```c
#include <stdio.h>
int main() {
FILE* input_file = fopen("example.txt", "r"); // 打开文件,"r"表示只读模式
if (input_file == NULL) { // 检查是否成功打开文件
perror("Error opening file");
return 1;
}
char ch; // 存储读取的字符
while ((ch = fgetc(input_file)) != EOF) { // 读取直到文件结束
fputc(ch, stdout); // 将字符写入标准输出
}
fclose(input_file); // 关闭文件
return 0;
}
```
在这个示例中,我们首先尝试打开名为"example.txt"的文件,然后在一个循环里不断读取字符,直到达到文件的结尾(EOF)。每个读取到的字符都被立即写入到标准输出设备(`stdout`)。
相关问题
fputc函数和fgetc函数使用后文件指针的移动方式
fputc函数和fgetc函数都是用于文件操作的函数。
fputc函数用于将一个字符写入文件中。它的函数原型为:
```
int fputc(int c, FILE *stream);
```
其中,c表示要写入文件的字符,stream表示文件指针。该函数将字符c写入到文件指针stream所指向的文件中,并返回成功写入的字符。
fputc函数在将字符写入文件后,文件指针会向后移动一个位置,指向下一个可以写入的位置。
fgetc函数用于从文件中读取一个字符。它的函数原型为:
```
int fgetc(FILE *stream);
```
其中,stream表示文件指针。该函数从文件指针stream所指向的文件中读取一个字符,并返回读取到的字符。
fgetc函数在读取字符后,文件指针会向后移动一个位置,指向下一个可以读取的位置。
fgetc和fputc
### C语言 `fgetc` 和 `fput` 函数的使用说明及区别
#### 一、函数定义与功能描述
在C语言中,`fgetc()` 和 `fputc()` 是用于处理文件输入/输出的核心函数之一。它们主要用于以字符形式读写文件。
- **`fgetc()`**: 这是一个从指定文件流中逐个读取字符的函数。当到达文件末尾时返回EOF[^1]。
- **`fputc()`**: 这是一个向指定文件流中逐个写入字符的函数。如果操作成功,则返回所写的字符;否则返回EOF[^2]。
#### 二、函数原型
以下是这两个函数的标准声明:
```c
int fgetc(FILE *stream);
int fputc(int char, FILE *stream);
```
- 对于`fgetc()`而言,参数`FILE *stream`表示要从中读取数据的文件指针。
- 而对于`fputc()`来说,第一个参数是要写入的具体字符(作为整数传递),第二个参数则是目标文件的指针[^3]。
#### 三、实际应用案例分析
下面通过具体例子来展示如何运用上述两个函数完成基本的任务——即从现有文本文件里提取内容并打印到屏幕上以及创建新文件并将特定消息存储进去的过程。
##### 示例程序:利用`fgetc()`读取整个文件的内容至控制台显示出来
```c
#include <stdio.h>
int main(){
//尝试打开名为"example.txt"只读模式下的文件
FILE* filePointer = fopen("example.txt","r");
if(filePointer==NULL){
printf("Error! Could not open the specified file.\n");
return -1;
}
int character=0;
while((character=fgetc(filePointer)) != EOF ){
putchar(character);
}
fclose(filePointer);
return 0;
}
```
此段代码展示了怎样借助循环结构配合调用`fgetc()`方法逐一获取直至遇到结束标志位为止的所有单个字母,并即时呈现在标准输出设备上。
##### 另外一个实例:采用`fputc()`把字符串保存成新的文档
```c
#include<stdio.h>
#define MAX_LEN 50
void saveStringToFile(char str[]){
FILE *fp=fopen("outputFile.txt","w+");
if(fp!=NULL){
for(int i=0;i<strlen(str);i++) {
fputc(str[i], fp);
}
puts("\nThe string has been successfully written into outputFile.txt.");
fclose(fp);
}else{
perror("Failed to create/open ");
}
}
int main(){
char inputStr[MAX_LEN];
printf("Enter any sentence:");
gets(inputStr);
saveStringToFile(inputStr);
return 0;
}
```
这里我们编写了一个简单的辅助函数saveStringToFile(), 它接受用户键入的一句话作为参数并通过for迭代器联合起来多次执行单一字符级别的记录动作最终形成完整的句子存档.
#### 四、主要差异对比表
| 特性 | `fgetc()` | `fputc()` |
|-----------------|------------------------------------|-----------------------------------|
| 功能 | 从给定文件中读取下一个可用字符 | 向指定位置追加单独的一个ASCII码对应的图形表现形式 |
| 返回值类型 | 整型数值 | 成功则反馈该被放置元素本身;失败给出错误指示信号(-1) |
| 参数数量&含义 | 单参:指向源资料集合的对象实体地址 | 双参:前者为目标符号编码值后者关联目的容器链接标识符 |
综上所述,虽然两者都围绕着基于单位级别上的信息交换展开讨论,但是方向完全相反,一个是抽取外部资源内部化呈现过程中的桥梁纽带角色扮演者身份体现得淋漓尽致;另一个更多时候承担起构建持久化储存解决方案过程中不可或缺的重要组成部分使命担当形象塑造得栩栩如生[^2].
阅读全文
相关推荐















