每日一C:从文件中读取文本并显示

  • 2017-09-30
  • 223
  • 0
  • 0

Description

文本文件xx.dic 中存储了n名学生的信息(班级编号,姓名,成绩),每个学生信息占一行,如下所示:

145811 fuxin 100
145812 chengxian 90
145813 zhangxue 90
145814 lijun 88
145815 liwei 120

……

文本文件xx.dic中姓名的首字母改成大写,其它字符保持不变,将结果输出到屏幕。

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
int main()
{
	char	curch, lastch;                                      /* 当前读入字符,上一次读入字符*/
	FILE	*fin;                                               /* 输入文件 */
	fin = fopen( "C:\\Users\\waylee\\Desktop\\xx.dic", "r" );   /* 打开输入文件读 */
	if ( !fin )                                                 /* 文件打开失败 */
	{
		fprintf( stderr, "error open file!\n" );            /* 输出错误信息到标准错误设备 */
		exit( -1 );                                         /* 强制退出,并返回错误码 */
	}
	/* 遍历输入文件的每一个字符 */
	while ( fscanf( fin, "%c", &curch ) != EOF )
	{
		/* 当前字符是字母,上一次不是字母*/
		if ( (curch >= 'a' && curch <= 'z') && (lastch > 'z' || lastch < 'a') )
		{
			lastch	= curch;
			curch	-= 32;  /* 转换为大写 */
		}else lastch = curch;   /* 记录上一次读入的字母*/
		printf( "%c", curch );
	}
	/* 关闭输入文件*/
	fclose( fin );
	getch();
	return(0);
}

解析:

打开文件时,地址中的\需要转义,写成\\:

fopen( "C:\\Users\\waylee\\Desktop\\xx.dic", "r" );

 

fscanf() 函数原型:

int fscanf ( FILE *fp, char * format, ... );

fp 为文件指针,format 为格式控制字符串,… 表示参数列表。与 scanf() 和 printf() 相比,它们仅仅多了一个 fp 参数。例如:

FILE *fp;
int i, j;
char *str, ch;
fscanf(fp, "%d %s", &i, str);
fprintf(fp,"%d %c", j, ch);

fscanf() 返回参数列表中被成功赋值的参数个数。

 

参考文章:

fscanf()

文件打开关闭

评论

偷偷告诉你,这还毛都没有 T T

发表评论