怎么用fgets 函数把输入的字符串输出到屏幕

函数说明 fputc 会将参数c 转为unsigned 函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode请参考fopen()说明。参数stream为已打开的文件指针。Freopen()会将原stream所打开的文件流关闭,然后打开参数path的文件。char 后写入参数stream 指定的文件中。

这个函数用来输入字符串的,输出到屏幕可以用puts(str)来实现的。

fgets函数 fgets函数读取文件fgets函数 fgets函数读取文件


fgets函数 fgets函数读取文件


f错误代码 EBADF 参数stream无效或可移动读写位置的文件流。gets ()是输入字符到程序中,要输出应该用printf()之类的输出函数才可以。

标准函数fgets(s,n,f)的功能是?

定义函数 int fputs(const char s,FILE stream);

原型是char fgets(char s, int n, FILE stream);

fclose(fp);

形参注释:string结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针

main()

说得简单一点就是从f这个文件输入流中读取n-1个字符,存到s中。

如果一行的字符数小于n-1,那么就是一行的字符数,所以应该理解为不超过n-1,如果一行的长度大于n-1,就是n-1个字符

给你个例子:

#include

void main()

{FILE stream;

char buf[128];

stream=fopen("time.text","r");//打开文件(保证有该文件存在)

fgets(buf,128,stream);//读取字符

printf("%sn",buf);

fclose(stream);

}如上例可见:

fgets(s,n,f)中的s为获得数据地址,n为获得数据的总字符数,f为需要读出字符的文件指针。上面长度为N,以数组来说,0开头,所以读取到buf[n-1]处。

C语言里为什么fgets很少用?

如果成功,返回值等于string, 也就是获得字符串的首地址

因为fgets函数只能输入字符串,而Scanf()能输入多种类型的数据,加上一般的C语言教材往往重视讲授原理,而对程int i,a[100];序健壮性、异常处理等考虑不多,所以一般资料很少提及fgets函数。

scanf在获取用户输入的字符串时,遇到空格、制表符即终止,并在结尾自动加上”0″。gets在获取用户输入字符串时,遇到空格、制表符不会终止,在结尾也会自动加上“0”。

由于scanf和gets这两个函数不对输入的长度进行核查,即使用户输入超过了规定的buffer容量,函数也会接受输入,造成缓冲区溢出,程序崩溃。所以建议实际使用时用fgets函数来替代。

附上fgets函数的有关说明:

fgets(char

buf,

int

FILE

stream);

参数:

1.

buf:

字符型指针,指向用来存储所得数据的地址。

2.

整型数据,指明存储数据的大小。即每次最多读取bufsize-1个字符(第bufsize个字符赋'0'),如果文件中的该行,不足bufsize个字符,则读完该行就结束。如若该行(包括一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。

3.

stream:

文件结构体指针,将要读取的文件流。如为bufsize,stdin,则从键盘读取。

返回值:

在读字符时遇到End-of-File,则EOF被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;如果发生读入错误,ERROR被设置,返回NULL,buf的值可能被改变。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。

fgets()函数怎样用C++实现?

Not that fgets is quite different from gets: not only fgets accepts a stream argument, but also allows to specify the maximum size of str and includes in the string any ending newline character.

fgets 既可以读文件,又可以读标准输入,而且可以防止溢出。但是它只能输入字符串(且能读到回车符/n),故而用scanf语句的较多。scanf语句可以输入各种格式的数据,其功能较为强大。

定义函数 size_t fread(void ptr,size_t size,size_t nmemb,FILE stream);

fgets 的使用方法:char fgets(char string, int n, FILE stream)

从文件stream中读取n-1个字符/一行(若一行不满n-1个),string接收字符串

如果n <= 0,返回NULL

如果n == 1,返回" ",也就是一个空串

如果出错,或者读到FILE的结尾,返回NULL

//通过while循环一行行取,读到文件末尾就是NULL了 ----读取整个文件

#include

void main( void )

{FILE stream;

char linemain()[100];

{while( fgets( line, 100, stream ) != NULL)

printf( "%s", line);

fclose( stream );

}}

C语言中,如何把数组里的数据写入文件

str

使用for循环语句+文件作函数即可把数组里的数据写入文件。

fclose(关闭文件)

1、C语言标准库提供了一系列文件作函数。文件作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中。例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数用于文件读取;fprintf、fputs函数用于文件写入;fl、fseek函数用于文件作位置的获取与设置。一般的C语言教程都有文件作一章,可以找本教材进一步学习。2、例程:

#include

int main(){

FILE fp1 = fopen("input.txt", "r");//打开输入文件

FILE fp2 = fopen("output.txt", "w");//打开输出文件

if (fp1==NULL || fp2==NULL) {//若打开文件失败则退出

rturn 0;

}for(i=0;fscanf(fp1,"%d",a+i)!=EOF;i++);//从输入文件连续读取整数到数组a

fclose(fp1);//关闭输入文件

fclose(fp2);//关闭输出文件,相当于保存

returset_s(0,”Linux!”);n 0;

}

一个关于C中fgets函数的问题

fclose(fin);

fgets原型定义如下

定义函数 int fileno(FILE stream);

char fgets(char str, int size, FILE stream);

我们看这句话:while(fgets(line,BUF,fp)!=NULL)

你理解的不多,这个循环,每次从fp中读取长度为BUF的数据到line中去。在读取过程中,发生以下三种情况时,读取停止:

1. 发现换行符

2. 发现文件终结符EOF

3. 发生错误

而这个函数在什么情况下会返回NULL呢,就是上述的第2和第3种情况发生时,会返回NULL,此时循环退出。

因此你的理解也就只是考虑掉了一种发生错误的情况,希望我的回答对int main ( void )你有所帮助。

C语言中fgets和fputs的问题......

表头文件 #include

// 原因是:你似乎对feof有一定的误解

int i;

// 当IO流读到文件一个字符的时候是不会设置EOF位的

// 这时调用feof,会返回false

// EOF设置当且仅当读取完一个字符后,再继续读取,这时相当于调用fgetc()

// 获取不存在的字符,返回EOF,设置EOF位置

// 然后调用feof,会返回true

// 理论上的fgets工作原理

char fgets(const char str, int num, FILE fp)

{if(str == NULL || num <= 0 || fp == NULL)

return NULL;

size_t index = 0;

int ch;

while(index < num - 1)

{ch = getc(fp);

if(ch == EOF)

{if(index == 0)

return NULL;

break;

}else

{str[index++] = ch;

if(ch == '

')

break;

}}

str[index] = '0';

return str;

}当你是以

也就是没有设置EOF

当再次用fgets读取时,由于再读入任何数据之前,遇见了EOF,所以它立即返回,并且

没有修改str

然后你就又输出了一行以下是fgets函数说明

char fgets ( char str, int num, FILE stream );

Reads characters from stream and stores them as a C string into str until (num-1) characters he been read or either a newline or the end-of-file is reached, whichr happens first.

A newline character makes fgets stop reading, but it is considered a valid character by the function and included in the string copied to str.

A terminating null character is automatically appended after the characters copied to str.

Parameters

Pointer to an array of chars where the string read is copied.

num

Maximum number of characters to be copied into str (including the terminating null-character).

stream

Pointer to a FILE object that identifies an input stream.

stdin can be used as argument to read from the standard input.

Return Value

On success, the function returns str.

If the end-of-file is encountered while attempting to read a character, the eof indicator is set (feof). If this happens before any characters could be read, the pointer returned is a null pointer (and the contents of str remain unchanged).

If a read error occurs, the error i错误代码 EBADF 参数stream 指定的文件未被打开,或打开状态为只读。其它错误代码参考write()。ndicator (ferror) is set and a null pointer is also returned (but the contents pointed by str may he changed).

请问fgets函数执行后指针fp的位置?它会自动向前移动n个字符吗?

定义函数 int fseek(FILE stream,long offset,int whence);

fgets是会自动后移的。

函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。

如果使用fgets()读取某个文件,puts("不能打开文件!");次读取的bufsize为5,而文件的行有10个字符(算上'n'),那么读取文件的指针会偏移至当前读取完的这个字符之后的位置。也就是第二次再用fgets()读取文件的时候,则会继续读取其后的字符。

c语言中fgets函数的字符数组的大小设定问题

函数说明 feof()用来侦测是否读取到了文件尾,尾数stream为fopen()所返回之文件指针。如果已到文件尾则返回非零值,其他情况返回0。

这个就和C语言处理数组的机制有关系了,你声明数组的时候声明的是3个字符,说明str这个数组的空间是3个字符的大小,但是如果你要用这个数组数组之后的的空间就属于数组越界了,而C语言为了效率是不对数组越界做检查的,C语言认为做数组越界检查的工作是程序员要做的事情,你越界使用数组,编译器不会报错,而且确实能访问到其他内存,并对这些不处于str的内存进行读写。

范例 #include

但他毕竟不是str数组的内存,你这样写的程序没看到有什么问题,不过这个程序写的复杂一些的话,你可能修改的是其他变量的值,其他坏的情况下是访问到不该访问到才内存,产生段错误,你的程序也会因此崩溃

所以数组越界使用是可以的,而且有时候是没问题的,但是它就像一个,不知道什么时候就会出问题,不要越界使用数for(;i--;)fscanf(fp2,"%d ",a[i]);//把数组a逆序写入到输出文件当中组,给str分配足够的空间

怎么能让fgets和fgetc不读到'n'啊!?

函数说明 fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,会加上NULL作为字符串结束。

fg从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。ets

标准函数就是要读到n

,并包含n

如果从“标准输入”stdin

,也就是键盘,你用

gets

读,送回的行就

不包括

n相关函数 feof

fgetc

和getchar

就是一个一个字符读的,新行符

必然要读到的。

fgets

读到的

字符串尾的n,你可以另行去掉:

int

len;

len

=strlen(one_Line);

one_line[len-1]='0';