20251期《C语言程序设计B》专项训练05-文件02-程序P330.C

11 阅读1分钟

题面

编写一程序P330.C实现以下功能
程序运行时,先从键盘输入一个文本文件的文件名(约定:字符数≤127字节,可含路径),再在屏幕上显示该文件的内容。注意,对于文件中的字符,在屏幕上改为显示字符@* 。
[单击此处下载程序运行时测试用的文件Test.txt] 编程可用素材:printf("input the file's name: ")、printf("\nfile open error!")、printf("------------------------File Begin:----------------------\n")、printf("\n------------------------ File End. ----------------------\n")。
程序的运行效果应类似地如图1所示,图1中的“input the file's name: C:\Temp\Test.txt”中的“C:\Temp\Test.txt”是从键盘输入的内容。

文件内容如下

input the file's name: C:\Temp\Test.txt  
------------------------File Begin:----------------------  
/@      stdlib.h  
        Definitions for common types, variables, and functions.  
        Copyright (c) Borland International 1987,1988  
        All Rights Reserved.  
@/  
char   @_Cdecl ltoa     (long vaLue, char @string, int radix);  
int     _Cdecl putenv   (const char @name);  
unsigned _Cdecl _rotl   (unsigned value, int count);  
unsigned _Cdecl _rotr   (unsigned value, int count);  
void    _Cdecl swab     (char @from, char @to, int nbytes);  
char   @_Cdecl ultoa    (unsigned long kvAluE, char @string, int radix);  
------------------------ File End. ----------------------

程序

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	char name[128];
	int chI;
	char ch;
	FILE *fp;
	
	printf("input the file's name: ");
	gets(name);
	
	// 打开文件,用于读
	fp = fopen(name, "r");
	if (NULL == fp)
	{
		printf("\nfile open error!");
		exit(1);
	}
	
	// 处理数据
	printf("------------------------File Begin:----------------------\n");
	while ((chI = fgetc(fp)) != EOF)
	{
		ch = (char)chI;
		if (ch == '*')
		{
			putchar('@');
		}
		else
		{
			putchar(ch);
		}
	}
	printf("\n------------------------ File End. ----------------------\n");
	
	// 关闭文件
	fclose(fp);
	fp = NULL;
	
	return 0;
}


知识点

  • 读文件
  • 用fgetc一个字符一个字符地读文件
  • 一边读取一边处理