fscanf和fprintf 的详细用法

sure2003 2007-12-17 10:41:39
fread
fwrite
书上说只能用于读二进制文件,可我也能编出读文本文件
fcanf和fprintf
的用法,谭哥书上没说,希望大家介绍的详细一点
...全文
31595 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
qt1105 2012-06-27
  • 打赏
  • 举报
回复
受教了! 谢谢
wuxinxinggg 2011-12-31
  • 打赏
  • 举报
回复
学习受教了~
wavely27 2011-07-19
  • 打赏
  • 举报
回复
学习了
fanopi 2010-07-10
  • 打赏
  • 举报
回复
受益了。谢谢。
ffcs_suo 2009-12-07
  • 打赏
  • 举报
回复
赞一个
kojie_chen 2007-12-23
  • 打赏
  • 举报
回复
怎么回事
kojie_chen 2007-12-22
  • 打赏
  • 举报
回复
Up
kojie_chen 2007-12-22
  • 打赏
  • 举报
回复
fscanf 从文件输入
sscanf 从指定字符串输入
顺便学习
ketet 2007-12-22
  • 打赏
  • 举报
回复
中国英语写的不错
sure2003 2007-12-19
  • 打赏
  • 举报
回复
谢谢你们
就呆在云上 2007-12-18
  • 打赏
  • 举报
回复
程序已经有人给你了
我给你一个msdn上的说法算了:

fread:
Reads data from a stream.


size_t fread(
void *buffer,
size_t size,
size_t count,
FILE *stream
);


Parameters
buffer
Storage location for data.

size
Item size in bytes.

count
Maximum number of items to be read.

stream
Pointer to FILE structure.

Return Value
fread returns the number of full items actually read, which may be less than count if an error occurs or if the end of the file is encountered before reaching count. Use the feof or ferror function to distinguish a read error from an end-of-file condition. If size or count is 0, fread returns 0 and the buffer contents are unchanged. If stream or buffer is a null pointer, fread invokes the invalid parameter handler, as described in Parameter Validation. If execution is allowed to continue, this function sets errno to EINVAL and returns 0.

See _doserrno, errno, _sys_errlist, and _sys_nerr for more information on these, and other, error codes.

Remarks
The fread function reads up to count items of size bytes from the input stream and stores them in buffer. The file pointer associated with stream (if there is one) is increased by the number of bytes actually read. If the given stream is opened in text mode, carriage return–linefeed pairs are replaced with single linefeed characters. The replacement has no effect on the file pointer or the return value. The file-pointer position is indeterminate if an error occurs. The value of a partially read item cannot be determined.

This function locks out other threads. If you need a non-locking version, use _fread_nolock.

Requirements
Function
Required header

fread
<stdio.h>


For additional compatibility information, see Compatibility in the Introduction.

Example
Copy Code
// crt_fread.c
// This program opens a file named FREAD.OUT and
// writes 25 characters to the file. It then tries to open
// FREAD.OUT and read in 25 characters. If the attempt succeeds,
// the program displays the number of actual items read.

#include <stdio.h>

int main( void )
{
FILE *stream;
char list[30];
int i, numread, numwritten;

// Open file in text mode:
if( fopen_s( &stream, "fread.out", "w+t" ) == 0 )
{
for ( i = 0; i < 25; i++ )
list[i] = (char)('z' - i);
// Write 25 characters to stream
numwritten = fwrite( list, sizeof( char ), 25, stream );
printf( "Wrote %d items\n", numwritten );
fclose( stream );

}
else
printf( "Problem opening the file\n" );

if( fopen_s( &stream, "fread.out", "r+t" ) == 0 )
{
// Attempt to read in 25 characters
numread = fread( list, sizeof( char ), 25, stream );
printf( "Number of items read = %d\n", numread );
printf( "Contents of buffer = %.25s\n", list );
fclose( stream );
}
else
printf( "File could not be opened\n" );
}

Copy Code
Wrote 25 items
Number of items read = 25
Contents of buffer = zyxwvutsrqponmlkjihgfedcb




fprintf:


int fprintf(
FILE *stream,
const char *format [,
argument ]...
);
Parameters
stream
Pointer to FILE structure.

format
Format-control string.

argument
Optional arguments.

locale
The locale to use.


Example
Copy Code
// crt_fprintf.c
/* This program uses fprintf to format various
* data and print it to the file named FPRINTF.OUT. It
* then displays FPRINTF.OUT on the screen using the system
* function to invoke the operating-system TYPE command.
*/

#include <stdio.h>
#include <process.h>

FILE *stream;

int main( void )
{
int i = 10;
double fp = 1.5;
char s[] = "this is a string";
char c = '\n';

fopen_s( &stream, "fprintf.out", "w" );
fprintf( stream, "%s%c", s, c );
fprintf( stream, "%d\n", i );
fprintf( stream, "%f\n", fp );
fclose( stream );
system( "type fprintf.out" );
}

Copy Code
this is a string
10
1.500000


pptor 2007-12-18
  • 打赏
  • 举报
回复
scanf 从控制台输入
fscanf 从文件输入
sscanf 从指定字符串输入
jixingzhong 2007-12-18
  • 打赏
  • 举报
回复
fread fwrite 最好是用于操作 二进制方式打开的文件

当然,如果一定要用来操作文本文件,
有时候结果也是正确的。
但是这个 结果正确 是无法得到保证的,
也就是说,当使用fread fwrite读写文本文件时候,可能会出现错误,比如操作字符数不正确,等等
jixingzhong 2007-12-18
  • 打赏
  • 举报
回复
fscanf sscanf 和 scanf 工作原理是一致的,
区别在于输入方向:
scanf 从控制台输入
fscanf 从文件输入
sscanf 从指定字符串输入

建议看看
http://blog.csdn.net/jixingzhong/archive/2007/01/07/1476089.aspx
PcrazyC 2007-12-17
  • 打赏
  • 举报
回复
函数名: fscanf 
功 能: 从一个流中执行格式化输入
用 法: int fscanf(FILE *stream, char *format[,argument...]);
程序例:

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

int main(void)
{
int i;

printf("Input an integer: ");

/* read an integer from the
standard input stream */
if (fscanf(stdin, "%d", &i))
printf("The integer read was: %i\n",
i);
else
{
fprintf(stderr, "Error reading an \
integer from stdin.\n");
exit(1);
}
return 0;
}




函数名: fprintf 
功 能: 传送格式化输出到一个流中
用 法: int fprintf(FILE *stream, char *format[, argument,...]);
程序例:

/* Program to create backup of the
AUTOEXEC.BAT file */

#include <stdio.h>

int main(void)
{
FILE *in, *out;

if ((in = fopen("\\AUTOEXEC.BAT", "rt"))
== NULL)
{
fprintf(stderr, "Cannot open input \
file.\n");
return 1;
}

if ((out = fopen("\\AUTOEXEC.BAK", "wt"))
== NULL)
{
fprintf(stderr, "Cannot open output \
file.\n");
return 1;
}

while (!feof(in))
fputc(fgetc(in), out);

fclose(in);
fclose(out);
return 0;
}

PcrazyC 2007-12-17
  • 打赏
  • 举报
回复
晕死,受1楼的影响
lockhall 2007-12-17
  • 打赏
  • 举报
回复
举个例子,楼主看下吧.

fprintf是用于文件操作的,原型是int fprintf( FILE *stream, const char *format [, argument ]...);

举例用法:
#include <stdio.h>
#include <process.h>

FILE *stream;

void main( void )
{
int i = 10;
double fp = 1.5;
char s[] = "this is a string";
char c = '\n';

stream = fopen( "fprintf.out", "w" );
fprintf( stream, "%s%c", s, c );
fprintf( stream, "%d\n", i );
fprintf( stream, "%f\n", fp );
fclose( stream );
system( "type fprintf.out" );
}

屏幕输出:

this is a string
10
1.500000
PcrazyC 2007-12-17
  • 打赏
  • 举报
回复
函数名: fread 
功 能: 从一个流中读数据
用 法: int fread(void *ptr, int size, int nitems, FILE *stream);
程序例:

#include <string.h>
#include <stdio.h>

int main(void)
{
FILE *stream;
char msg[] = "this is a test";
char buf[20];

if ((stream = fopen("DUMMY.FIL", "w+"))
== NULL)
{
fprintf(stderr,
"Cannot open output file.\n");
return 1;
}

/* write some data to the file */
fwrite(msg, strlen(msg)+1, 1, stream);

/* seek to the beginning of the file */
fseek(stream, SEEK_SET, 0);

/* read the data and display it */
fread(buf, strlen(msg)+1, 1, stream);
printf("%s\n", buf);

fclose(stream);
return 0;
}


函数名: fwrite 
功 能: 写内容到流中
用 法: int fwrite(void *ptr, int size, int nitems, FILE *stream);
程序例:

#include <stdio.h>

struct mystruct
{
int i;
char ch;
};

int main(void)
{
FILE *stream;
struct mystruct s;

if ((stream = fopen("TEST.$$$", "wb")) == NULL) /* open file TEST.$$$ */
{
fprintf(stderr, "Cannot open output file.\n");
return 1;
}
s.i = 0;
s.ch = 'A';
fwrite(&s, sizeof(s), 1, stream); /* write struct s to file */
fclose(stream); /* close file */
return 0;
}
Minkey 2007-12-17
  • 打赏
  • 举报
回复
晕,看错了,那个链接讲的是fread和fwrite...
Minkey 2007-12-17
  • 打赏
  • 举报
回复
楼主可真够大手笔的啊...
这种问题百度一下一大堆的...呵呵
看看这个吧:
http://blog.csdn.net/iu_81/archive/2007/03/27/1542735.aspx

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧