fputc函数的用法,c语言操作文本的基本使用方法
fputc函数的用法,c语言操作文本的基本使用方法详细介绍
本文目录一览: 函数fputc()的功能是什么?
函数名: fputc
功 能: 送一个字符到一个流中
函数头:属于输入输出函数,在C语言中,包含在文件stdio.h中。ANSI标准。
用 法: int fputc(int ch, FILE *stream);
函数fputc()的功能:将字符ch输出到fp所指向的文件中.若成功则返回该字符;否则返回EOF
C语言对文件操作,用fputs函数不能把字符串写入文件?
读写一个字符数据
经过前面的学习,我们学习了fread()、fwrite()函数的操作,这两个函数都是对一段“内存块”进行读写操作。那么,C语言还提供了fgetc()、fputc()函数,对文件中的一个字符进行读写操作。这些函数的定义如下:
int fgetc(FILE *stream);
函数说明:从stream文件指针所指向的文件读取1个字符,通过函数的返回值返回。例如:
char c = fgetc(fp);
就是从fp指向的文件,读取1个字符的数据,通过函数返回值,设置给字符变量c。
int fputc(int c, FILE *stream);
函数说明:把参数c表示的字符,写入stream文件指针所指向的文件。例如:
char c = 'M';
fputc(c, fp);
就是把参数c表示的字符变量,写入文件指针fp指向的文件。如下是一个程序测试例子:
可以看到,新建一个test.txt文件,调用fputc()函数,把一个字符写入到文件中。然后,再重新打开文件,读取文件的数据,调用fgetc()函数读取一个字符,得到的数据是刚刚写入的字符。所以,通过这个例子,我们学习了fgetc()、fputc()函数的操作,对文件进行一个字符的读写操作。
3.5 读写一行字符数据
C语言提供了fgets()、fputs()函数对文件进行读写“一行”的数据,字符串以'\n'字符换行,注意,所谓的“一行”数据,它的最后一个有效字符是’\n’,表示换行符号。字符串的结束符,还是以’\0’为结尾,表示字符串结束符。其中fgets()函数的定义如下:
char *fgets(char *buf, int size, FILE *stream);
函数说明:从stream函数指针所指向的文件中,读取size-1个字节到buf缓存,不是读取size个字节,因为,buf[ ]缓存的第size个字节存放字符串结束符,形成一个有效的字符串。
当读取到换行符时,或者到达文件末尾时,结束文件的读取操作。
返回值:读取数据成功,返回存储数据的缓存地址,就是参数buf的地址。如果读取数据失败,返回NULL。例如,读取文件完,没有数据可以再读取,则返回NULL。
int fputs(const char *buf, FILE *stream);
函数说明:把参数buf指针指向的字符串,写入到stream指向的文件。参数buf是一个字符串指针,必须指向一个合法的字符串。合法的字符串是以字符串结束符'\0'结束,表示一个字符串的结尾。
返回值:写入数据成功,返回成功写入的字符个数。失败返回EOF标记。
如下是一个程序测试例子:
程序运行结果如下:
可以看到,程序调用fputs()函数,往打开的test.txt文件写入数据。直接写入一个字符串。然后,关闭文件,再重新打开文件。调用fgets()函数读取数据,读取数据的时候,遇到回车换行的字符'\n',表示一行数据,那么,就返回读取到的一行数据。
在实际的项目开发过程中,fgets()函数非常有用。例如,我们定义一个config.txt文件,里面存放一些系统的配置信息,文件的格式如下:
cat /etc/config.txt
sys_pwd=123456
ApCliAuthMode=WPA2PSK
ApCliEncrypType=AES
ApCliChannel=1
ApCliDefaultKeyID=1
那么,文件的配置信息是一行一行数据,所以,可以用fgets()函数,快速读取出每一行系统配置信息。
不太理解fputc(ch,fp)和putchar(ch)
putchar(ch); 函数原型 是 int putchar ( int character );
向标准输出设备 输出一个字符,也就是 向 屏幕 输出 一个 字符,让你知道已向文件里写了这个字符。
fputc(ch,fp); 是把 ch 输出到磁盘文件里去,磁盘文件就是 fp=fopen()里指明的
D:\cc\filename.dat 这个文件。
ch 的来源是 键盘输入: ch=getchar(); 当 ch=='#'时,循环结束,并关闭文件。
c语言操作文本的基本使用方法
c语言操作文本应该怎么使用,这对于很多新手来说,是很难的一件事情,下面我为大家带来了关于c语言操作文本的基本使用方法,欢迎大家阅读!
c语言操作文本的基本使用方法 1.字符读写:
fgetc函数的功能是从指定的文件中读一个字符,函数调用的形式为:
字符变量=fgetc(文件指针);
fputc函数的功能是把一个字符写入指定的文件中,函数调用的形式为:
fputc(字符量,文件指针);
2.字符串读写
读字符串函数fgets
函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为:
fgets(字符数组名,n,文件指针);
写字符串函数fputs
fputs函数的功能是向指定的文件写入一个字符串,其调用形式为:
fputs(字符串,文件指针);
3.数据块读写
读数据块函数调用的一般形式为:
fread(buffer,size,count,fp);
写数据块函数调用的`一般形式为:
fwrite(buffer,size,count,fp);
4.格式化读写
fscanf函数,fprintf函数与前面使用的scanf和printf函数的功能相似,都是格式化读写函数。两者的区别在于fscanf函数和fprintf函数的读写对象不是键盘和显示器,而是磁盘文件。
这两个函数的调用格式为:
fscanf(文件指针,格式字符串,输入表列);
fprintf(文件指针,格式字符串,输出表列);
文件定位
移动文件内部位置指针的函数主要有两个,即rewind函数和fseek函数。
rewind函数前面已多次使用过,其调用形式为:
rewind(文件指针);
它的功能是把文件内部的位置指针移到文件首。
下面主要介绍fseek函数。fseek函数用来移动文件内部位置指针,其调用形式为:
fseek(文件指针,位移量,起始点);
其中:
“文件指针”指向被移动的文件。
“位移量”表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB时不会出错。当用常量表示位移量时,要求加后缀“L”。
“起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。其表示方法如下表。
c语言操作文本的基本使用方法1
起始点表示符号数字表示
文件首SEEK_SET0
当前位置SEEK_CUR1
文件末尾SEEK_END2
例如:
fseek(fp,100L,0);
其意义是把位置指针移到离文件首100个字节处。
还要说明的是fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。
c语言中常用的文件检测函数有以下几个。
文件结束检测函数feof函数
调用格式:
feof(文件指针);
功能:判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0。
读写文件出错检测函数
ferror函数调用格式:
ferror(文件指针);
功能:检查文件在用各种输入输出函数进行读写时是否出错。如ferror返回值为0表示未出错,否则表示有错。
文件出错标志和文件结束标志置0函数
clearerr函数调用格式:
clearerr(文件指针);
功能:本函数用于清除出错标志和文件结束标志,使它们为0值。
c语言 怎么读文件中的汉字
FILE *fp;
double dbnum[100];
fp = fopen("a.dat", "r");
if(fp != NULL)
for(int i = 0; i < 100; i++)
{
if(!scanf("%f", &num[i]))
{
break;
字符读写函数fgetc和fputc
字符读写函数是以字符(字节)为单位的读写函数。 每次可从文件读出或向文件写入一个字符。
1) 读字符函数fgetc
fgetc函数的功能是从指定的文件中读一个字符,函数调用的形式为:
字符变量=fgetc(文件指针);
例如:
ch=fgetc(fp);
其意义是从打开的文件fp中读取一个字符并送入ch中。
对于fgetc函数的使用有以下几点说明:
在fgetc函数调用中,读取的文件必须是以读或读写方式打开的。
读取字符的结果也可以不向字符变量赋值。例如:fgetc(fp); 但是读出的字符不能保存。
在文件内部有一个位置指针。用来指向文件的当前读写字节。在文件打开时,该指针总是指向文件的第一个字节。使用fgetc 函数后,该位置指针将向后移动一个字节。 因此可连续多次使用fgetc函数,读取多个字符。应注意文件指针和文件内部的位置指针不是一回事。文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。
【例13-1】读入文件c1.doc,在屏幕上输出。#include
main(){ FILE *fp; char ch; if((fp=fopen("d:\\jrzh\\example\\c1.txt","rt"))==NULL){ printf("\nCannot open file strike any key exit!"); getch(); exit(1); } ch=fgetc(fp); while(ch!=EOF){ putchar(ch); ch=fgetc(fp); } fclose(fp);}
本例程序的功能是从文件中逐个读取字符,在屏幕上显示。程序定义了文件指针fp,以读文本文件方式打开文件“d:\\jrzh\\example\\ex1_1.c”,并使fp指向该文件。如打开文件出错,给出提示并退出程序。程序第10行先读出一个字符,然后进入循环,只要读出的字符不是文件结束标志(每个文件末有一结束标志EOF)就把该字符显示在屏幕上,再读入下一字符。每读一次,文件内部的位置指针向后移动一个字符,文件结束时,该指针指向EOF。执行本程序将显示整个文件。
2) 写字符函数fputc
fputc函数的功能是把一个字符写入指定的文件中。函数调用的形式为:
fputc( 字符量, 文件指针 );
其中,待写入的字符量可以是字符常量或变量,例如:
fputc('a',fp);
其意义是把字符a写入fp所指向的文件中。
对于fputc函数的使用也要说明几点:
被写入的文件可以用写、读写、追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。
每写入一个字符,文件内部位置指针向后移动一个字节。
fputc函数有一个返回值,如写入成功则返回写入的字符,否则返回一个EOF。可用此来判断写入是否成功。
【C语言】向文件写入东西不能写入换行
1、你的程序是错误的,所以不能写入换行。
原因如下:用"ab" 打开是二进制文件,要用 fwrite 写。
2、修改建议:写文本文的话用 "w" 就可以了。fprintf(fp,"%s,%s,%f\n",....)。用 \n 换行。
用"ab" 打开是二进制文件。要用 fwrite 写。
写文本文件 用 "w" 就可以了。
fprintf(fp,"%s,%s,%f\n",....
用 \n 换行
如果你输出文件是文本的建议fopen使用参数"at",那么函数会帮你自动补完换行符。
如果使用"ab"说明是Binary,那么Windows的换行必须是0x0D 0x0A 组成"\r\n"
C语言写文件是可以写入换行的,不过需要使用通配符'\n'.
设定打开文件的指针为fp,那么向文件中写入换行可以用如下几种办法:
1 通过fputc函数:
fputc函数可以写入一个字符,所以可以通过
fputc('\n', fp);
的方式写入一个换行符。
2 通过fprintf函数:
和通过打印函数printf输出一个换行类似,可以
fprintf(fp, "\n");
3 通过fputs函数:
fputs功能是写入一行字符串并换行。这里只需要它的换行功能,所以写入一个长度为0的字符串就可以了,注意不是空串NULL。
fputs("", fp);
4 通过fwrite函数:
fwrite是写一块数据的,用来写一个字符理论上可行,不过是大材小用了。
char c = '\n';
fwrite(&c, 1,1,fp);
以上四种方法都可以向文件写入换行符。
C语言关于fputc函数的使用。
就是输入一个打出一个。putchar()括号里面的应该填一个字符或者字符数组名,比如a[0]
而10就是换行的ASCII码就是换行。相当于“\n“
]
输入30个字符后使用函数fputc将30个字写入D盘根目录下的文件然后使用fgetc从中读出后10?
下面是一个可以从键盘输入 30 个字符,并将它们写入到 D 盘根目录下的 make.txt 文件中,然后再从文件中读取后 10 个字符并输出的 C 语言程序。
```c
#include
int main() {
FILE *fp; // 文件指针
char str[31]; // 存储输入的字符串(包括空字符)
// 提示用户输入字符串
printf("请输入 30 个字符:");
fgets(str, 31, stdin);
// 打开文件并写入数据
fp = fopen("D:\\make.txt", "w+");
if (fp == NULL) {
printf("无法打开文件!\n");
return 1;
}
fputs(str, fp);
fclose(fp);
// 重新打开文件并读取数据
fp = fopen("D:\\make.txt", "r");
if (fp == NULL) {
printf("无法打开文件!\n");
return 1;
}
fseek(fp, -10, SEEK_END); // 移动文件指针到倒数第 10 个字符处
fgets(str, 11, fp); // 读取后 10 个字符
fclose(fp);
// 输出结果
printf("后 10 个字符为:%s\n", str);
return 0;
}
```
在这个程序中,我们首先定义了一个字符数组 `str`,用于存储输入的字符串。然后,我们使用 `fgets` 函数从标准输入中读取用户输入的字符串,并将其保存到 `str` 中。注意,我们要读取 31 个字符,以便包括末尾的空字符。
接下来,我们使用 `fopen` 函数打开 D 盘根目录下的 make.txt 文件,并使用 `fputs` 函数将 `str` 中的内容写入文件中。写入完成后,我们使用 `fclose` 函数关闭文件指针。
然后,我们重新打开文件,并使用 `fseek` 函数将文件指针移动到倒数第 10 个字符处。最后,我们使用 `fgets` 函数读取后 10 个字符,并使用 `printf` 函数将它们输出到屏幕上。
需要注意的是,在使用 `fopen` 函数打开文件时,我们使用了 `"w+"` 和 `"r"` 这两个参数分别表示写入和读取模式。如果打开文件失败,我们会输出一条错误信息并退出程序。
stm32编程怎么使用printf函数
有两种配置方法:
一、对工程属性进行配置,详细步骤如下
1、首先要在你的main 文件中 包含“stdio.h” (标准输入输出头文件)。
2、在main文件中重定义函数如下:
// 发送数据
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (unsigned char) ch);// USART1 可以换成 USART2 等
while (!(USART1->SR & USART_FLAG_TXE));
return (ch);
}
// 接收数据
int GetKey (void) {
while (!(USART1->SR & USART_FLAG_RXNE));
return ((int)(USART1->DR & 0x1FF));
}
这样在使用printf时就会调用自定义的fputc函数,来发送字符。
3、在工程属性的 “Target" -> "Code Generation" 选项中勾选 "Use MicroLIB"”
MicroLIB 是缺省C的备份库,关于它可以到网上查找详细资料。
至此完成配置,在工程中可以随意使用printf向串口发送数据了。
二、第二种方法是在工程中添加“Regtarge.c”文件
1、在main文件中包含 “stdio.h” 文件
2、在工程中创建一个文件保存为 Regtarge.c ,然后将其添加工程中
在文件中输入如下内容(直接复制即可)
#include
#include
#pragma import(__use_no_semihosting_swi)
extern int SendChar(int ch); // 声明外部函数,在main文件中定义
extern int GetKey(void);
struct __FILE {
int handle; // Add whatever you need here
};
FILE __stdout;
FILE __stdin;
int fputc(int ch, FILE *f) {
return (SendChar(ch));
}
int fgetc(FILE *f) {
return (SendChar(GetKey()));
}
void _ttywrch(int ch) {
SendChar (ch);
}
int ferror(FILE *f) { // Your implementation of ferror
return EOF;
}
void _sys_exit(int return_code) {
label: goto label; // endless loop
}
3、在main文件中添加定义以下两个函数
int SendChar (int ch) {
while (!(USART1->SR & USART_FLAG_TXE)); // USART1 可换成你程序中通信的串口
USART1->DR = (ch & 0x1FF);
return (ch);
}
int GetKey (void) {
while (!(USART1->SR & USART_FLAG_RXNE));
return ((int)(USART1->DR & 0x1FF));
}
至此完成配置,可以在main文件中随意使用 printf 。