C语言: fscanf;最近刚看到fscanf这个函数,从文本文件中读入数据;如果有空格怎么办?

C语言: fscanf;最近刚看到fscanf这个函数,从文本文件中读入数据;如果有空格怎么办?,第1张

fscanf函数的工作方式和scanf一模一样,如果你用%s 的话,遇到空格就停了。

如果你想读三个单词,你要这样写

char buff1[128],buff2[128],buff3[128];

fscanf(fp,"%s%s%s",buff1,buff2,buff3);

fscanf(fp1,"%d\n",

&a);

把fp1改成fp2,下面的也是。另外我给重写了一个,你可以参考:

#include<stdioh>

//#include

<timeh>

int

main()

{

int

data[5]={1932,4320,2831,3422,1344};

int

buff[5]={};

int

i;

//

a,

b,

c,

d,

e

;

FILE

fp1,

fp2;

fp1

=

fopen("systemtxt",

"w"

);

//设置输入输出文件指针

for(i=0;

i<5;

i++

)

{

fprintf(fp1,"%d\n",

data[i]);

}

fclose(fp1);

fp2

=

fopen("systemtxt",

"r"

);

for(i=0;

i<5;

i++

)

{

fscanf(fp2,"%d\n",

&buff[i]);

}

fclose(fp2);

for(i=0;

i<5;

i++

)

printf("%d\n",

buff[i]);

return

0;

}

言代码,所以fprintf() 及fscanf()等函数都能用。

另外,

(1)Linux上的输出命令:printf

printf 命令,格式化输出,是echo 命令的增强它是C 语言printf()库函数的一个有限的变形,

并且在语法上有些不同

printf format-string parameter

这是Bash 的内建版本,与/bin/printf 或/usr/bin/printf 命令不同想更深入的了解,请

察看printf(系统命令)的man 页

(2)Linux Shell 有一版本为CShell,语法与C有很大相似之处。

C语言输入输出函数有很多,标准I/O函数中包含了如下几个常用的函数:

scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等

int

scanf(const

char

format,

arg_list)

scanf主要从标准输入流中获取参数值,format为指定的参数格式及参数类型,如scanf("%s,%d",str,icount);

它要求在标准输入流中输入类似"son

of

bitch,1000"这样的字符串,同时程序会将"son

of

bitch"给str,1000给icount

scanf函数的返回值为int值,即成功赋值的个数,在上例中如果函数调用成功,则会返回2,所以我们在写程序时,可以通过

语句if(scanf("%s,%d",str,icount)

!=

2){}来判断用户输入是否正确

int

printf(const

char

format,

arg_list)

printf主要是将格式化字符串输出到标准输出流中,在stdioh头文件中定义了标准的输入和输出,分别是stdin,stdout

arg_list可以是变量名,也可以是表达式,但最终都会以值的形式填充进format中

int

getc(FILE

fp)

getc主要是从文件中读出一个字符常用的判断文件是否读取结束的语句为:(ch

=

getc(fp))

!=

EOFEOF为文件结束标志,

定义在stdioh中,就像EXIT_SUCCESS,EXIT_FAILURE定义在stdlibh中一样,文件也可以被理解为一种流,所以当fp为stdin

时,getc(stdin)就等同于getchar()了

int

putc(int

ch,FILE

fp)

putc主要是把字符ch写到文件fp中去如果fp为stdout,则putc就等同于putchar()了

int

getchar(void)

getchar主要是从标准输入流读取一个字符默认的标准输入流即stdioh中定义的stdin但是从输入流中读取字符时又

涉及到缓冲的问题,所以并不是在屏幕中敲上一个字符程序就会运行,一般是通过在屏幕上敲上回车键,然后将回车前的字符

串放在缓冲区中,getchar就是在缓冲区中一个一个的读字符当然也可以在while循环中指定终止字符,如下面的语句:

while

((c

=

getchar())

!=

'#')这是以#来结束的

int

putchar(int

ch)

putchar(ch)主要是把字符ch写到标准流stdout中去

char

gets(char

str)

gets主要是从标准输入流读取字符串并回显,读到换行符时退出,并会将换行符省去

int

puts(char

str)

puts主要是把字符串str写到标准流stdout中去,并会在输出到最后时添加一个换行符

char

fgets(char

str,

int

num,

FILE

fp)

str是存放读入的字符数组指针,num是最大允许的读入字符数,fp是文件指针fgets的功能是读一行字符,该行的字符数

不大于num-1因为fgets函数会在末尾加上一个空字符以构成一个字符串另外fgets在读取到换行符后不会将其省略

int

fputs(char

str,

file

fp)

fputs将str写入fpfputs与puts的不同之处是fputs在打印时并不添加换行符

int

fgetc(FILE

fp)

fgetc从fp的当前位置读取一个字符

int

fputc(int

ch,

file

fp)

fputc是将ch写入fp当前指定位置

int

fscanf(FILE

fp,

char

format,)

fscanf按照指定格式从文件中出读出数据,并赋值到参数列表中

int

fprintf(FILE

fp,

char

format,)

fprintf将格式化数据写入流式文件中

使用fopen,fscanf函数可以实现从txt文件当中读取内容,进行简单 *** 作。

1fopen的函数原型:FILE

fopen(const

char

path,const

char

mode);

fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:

  r

以只读方式打开文件,该文件必须存在。

  r+

以可读写方式打开文件,该文件必须存在。

  rb+

读写打开一个二进制文件,允许读数据。

  rw+

读写打开一个文本文件,允许读和写。

  w

打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。

  w+

打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

  a

以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)

  a+

以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。

(原来的EOF符不保留)

  wb

只写打开或新建一个二进制文件;只允许写数据。

  wb+

读写打开或建立一个二进制文件,允许读和写。

  wt+

读写打开或着建立一个文本文件;允许读写。

  at+

读写打开一个文本文件,允许读或在文本末追加数据。

  ab+

读写打开一个二进制文件,允许读或在文件末追加数据。

  上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b

字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。

返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。

2例程:

#include

#define F_PATH "d:\\myfile\\filedat"

char c;

int main(){

FILEfp=NULL;//需要注意

fp=fopen(F_PATH,"r");

if(NULL==fp) return -1;//要返回错误代码

while(fscanf(fp,"%c",&c)!=EOF) printf("%c",c); //从文本中读入并在控制台打印出来

fclose(fp);

fp=NULL;//需要指向空,否则会指向原打开文件地址

return 0;

}

fprintf函数:

头文件:#include <stdioh>

定义函数:int fprintf(FILE stream, const char format, );

函数说明:fprintf()会根据参数format 字符串来转换并格式化数据, 然后将结果输出到参数stream 指定的文件中, 直到出现字符串结束('\0')为止。

返回值:关于参数format 字符串的格式请参考printf() 成功则返回实际输出的字符数, 失败则返回-1, 错误原因存于errno 中

范例

#include <stdioh>

main()

{

    int i = 150;

    int j = -100;

    double k = 314159;

    fprintf(stdout, "%d %f %x \n", j, k, i);

    fprintf(stdout, "%2d %d\n", i, 2, i);

}

执行:

-100 3141590 96

150 150

fscanf函数:

功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。

用 法:int fscanf(FILE stream, char format,[argument]);

int fscanf(文件指针,格式字符串,输入列表);

  for example:

  FILEfp;

  chara[10];

  intb;

  doublec;

  fscanf(fp,"%s%d%lf",a,&b,&c)

  返回值:整型,数值等于[argument]的个数

其中的format就是相当于正则表达式中的格式,即用什么样的格式来分隔文件中的信息。

for (i=0;i<2;i++) fscanf(fin,"%[^\n]%c"); 跳过2行。

% 是“跳过”

[^\n] 字符串的分隔符是 "\n", 中括号里可以写 分隔符 表

%[^\n] 跳过 \n 前的所有 字符串。

%c 是“跳过”行尾 的 换行符。

#include <stdioh>

#include <stdlibh>

main()

{

FILE fin;

int x,y;

int i;

fin=fopen("atxt","r");

for (i=0;i<2;i++) fscanf(fin,"%[^\n]%c"); // 跳2 行

fscanf(fin,"%d %d",&x,&y); // 读 2 个 int

printf("%d %d\n",x,y); // 打出 3 33

fclose(fin);

}

文件例子:

1 2 3

2 345 56

3 33 333

4 444 444

fscanf和scanf一样,只是前者一般从文件中读数据,后者从输入缓冲区读数据。在scanf中,%c只读取一个字符,%s是读取一个字符串——这时会跳过前面的' '、'\t'、'\n'等广义空格直接接收字符,一个接一个地把接收到的字符依次赋给对应的数组元素,当再次遇到' '、'\t'、'\n'等广义空格时认为字符接收完毕,就在刚被赋值的元素后增补一个'\0'以表示本次接收的字符串结束。fscanf的接收过程与此完全一样,只是是从它的第一个文件指针实参指向的文件中读取的;若把fscanf的第一个实参换成stdin(标准输入),它就和scanf一样从键盘读入数据了。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/13493692.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存