C++为什么运行有结果,但是out文件没结果。 初学小白,求指导!!!

C++为什么运行有结果,但是out文件没结果。 初学小白,求指导!!!,第1张

这段C++代码中,程序通过freopen()函数将标准输入(stdin)重定向到指定文件"C:\Users\26400\Desktop\C++\inout\inout.in",并将标准输出(stdout)重定向到指定文件"C:\Users\举乎逗26400\Desktop\C++\inout\inout.out"。在程序执行过程中,输入来自指定文件中的数据,输出则写入指定文件。但是在程序中,fclose(stdin)和fclose(stdout)函数是错误的,应该避免使用。在程序执行到fclose(stdin)时,stdin指向的文件流关闭,下面的输入 *** 作就会受到影响,从而出错。同理,fclose(stdout)会关闭文件流,导致后面的输出没有写入到指定文件中。

因此,要使程序正常运行并将结果输出到指定文件中,需要在输入和输出完毕后,使用fclose()函数关闭文件流。另外,在写文件路径时,应该使用双反斜杠"\ "来代顷蚂替单个反斜杠"",因为单个反斜正卖杠会被解释为转义字符。

从字面分析就可以了,stdio中io是指in 和out 就是输入输出,现在只明让有in没有out,汪槐拦所以困胡是指键盘了,因为一般C语言编译运行的是在dos下进行的,鼠标没什么作用。

stdio.h 头文件定义了三个变量类型,一些宏和各种函数来执行输入和输出。

size_t 这是无符号整数类型,它是sizeof关键字的结果。

FILE 这是一个适合存储文件流信息的对象类型。

fpos_t 这是一个适合存储文件中任何位置的对象类型。

NULL

_IOFBF 、_IOLBF 和 _IONBF 这些宏扩展了带有特定值的整形常量表达式,并适用于setvbuf函数的第三个参数。

BUFSIZ 这个宏是一个整数,该整数代表了setbuf函数使用的缓冲区大小。

EOF这个宏是一个表示已经到达文件结束的负整数。

FOPEN_MAX这个宏是一个整数,宴昌历该整数代表了系统可以同时打开的文件数量。

FILENAME_MAX 这个宏是一个整数,该整数代表了字符数组可以存储的文件名的最大长度。如果实现没有任何限制,则该值应为推荐的最大值。

stderr、stdin和stdout 这些宏是指向FILE类型的指针,分别对应于标准错误、标准输入和标准输出流。

int fclose(FILE *stream) 关闭流stream, 刷新所有的缓冲区

void clearerr(FILE *stream) 清除给定流stream的文件结束和错误标识符

int feof(FILE *stream) 测试给定流stream的文件结束标识符

返回值:当设置了与流关联的文件结束标识符时,该函数返回一个非零值,否则返回零。

int ferror(FILE *stream) 测试给定流stream的错误标识符

返回值: 如果设置了与流相关联的错误标识符,该函数返回一个非零值,否则返回一个零值。

int fflush(FILE *stream)刷新流stream的输出缓冲区

返回值:如果成功,该函数返回零值。如果发生错误,则返回EOF, 且设置错误标晌搜识符。

FILE *fopen(const char *filename, const char *mode) 使用给定的模式mode打开filename所指向的文件。

打开模式有:

r 打开一个用于读取的文件,该文件必须存迅衫在

w创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有的文件的内容, 文件被视为一个新的空文件。

a追加到一个文件,写 *** 作向文件末尾追加数据。如果文件不存在,则创建文件。

r+打开一个用于更新的文件,可读取也可写入,该文件必须存在。

w+ 创建一个用于读写的空文件。

a+打开一个用于读取和追加的文件

rb+

wb+

ab+

返回值:该函数返回一个FILE指针,否则返回NULL,且设置全局变量errno来标识错误。

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) 从给定流stream 读取数据到ptr所指向的数组中。

ptr这是指向内存块的指针

size 这是要读取的每个元素的大小,以字节为单位。

nmemb这是元素的个数,每个元素的大小为size字节

stream指向FILE对象的指针,该FILE对象指定了一个输入流

FILE *freopen(const char *filename, const char *mode, FILE *stream)把一个新的文件名filename与给定的打开的流stream关联,同时关闭流中中旧文件。

返回值:如果文件成功打开,则函数返回一个指针,指向用于标识流的对象。

int fseek(FILE *stream, long int offset, int whence) 设置流stream的文件位置为给定的偏移offset, 参数offset 意味着从给定的whence位置查找的字节数。

stream 这是指向FILE对象的指针,该FILE对象标识了流

offset这是相对whence的偏移量, 以字节为单位

whence这是表示开始添加偏移offset的位置。它一般指定为下列常量之一:

SEEK_SET文件的开头

SEEK_CUR文件指针的当前位置

SEEK_END 文件的末尾

返回值:如果成功,则该函数返回零,否则返回非零值。

int fsetpos(FILE *stream, const fpos_t *pos) 设置给定流stream的文件位置为给定的位置。参数pos是由函数fgetpos给定的位置。

long int ftell(FILE *stream) 返回给定流stream的当前文件位置

返回值:该函数返回位置标识符的当前值。如果发生错误,则返回-1L,全局变量errno被设置为一个正值。

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)把ptr所指向的数组中的数据写入到给定流stream中。

int remove(const char *filename) 删除给定的文件名 filename, 以便它不再被访问。

返回值:如果成功,则返回零。如果错误,则返回-1,并设置errno.

int rename(const char *old_filename, const char *new_filename) 把old_filename所指向的文件名改为new_filename。

返回值:如果成功,则返回零;如果错误,则返回-1,并这是errno.

void rewind(FILE *stream) 设置文件位置为给定流stream文件的开头。

就是将光标返回文件开始处。

返回值:该函数不返回任何值。

void setbuf(FILE *stream, char *buffer) 定义流stream应如何缓冲。该函数应在与流stream相关的文件被打开时,且还未发生任何输入或输出 *** 作之前被调用一次。

int setvbuf(FILE *stream, char *buffer, int mode, size_t size)定义流stream应如何缓冲。

stream这是指向FILE对象的指针,该FILE对象标识了一个打开的流。

buffer 这是分配给用户的缓冲,如果设置为NULL, 该函数会自动分配一个指定大小的缓冲。

mode 这指定了文件缓冲的模式:

_IOFBF 全缓冲:对于输出,数据在缓冲填满时被一次性写入。对于输入,缓冲会在请求输入且缓冲为空时被填充。

_IOLBF 行缓冲:对于输出,数据会遇到换行符或者在缓冲填满时被写入,具体视情况而定。对于输入,缓冲会在请求输入且缓冲为空时被填充,直到遇到下一个换行符。

_IONBF 无缓冲:不使用缓冲。每个I/O *** 作都被即时写入。buffer和size参数被忽略。

返回值: 如果成功,则该函数返回0, 否则返回非零值。

FILE *tmpfile(void) 以二进制更新模式(wb+)创建临时文件。被创建的临时文件会在流关闭的时候或者在程序终止的时候自动删除。

返回值:如果成功,该函数返回一个指向被创建的临时文件的流指针。如果文件未被创建,则返回NULL.

char *tmpnam(char *str)生成并返回一个有效的临时文件名,该文件名之前是不存在的。如果str为空,则只会返回临时文件名。

返回值:一个指向C字符串的指针,该字符串存储了临时文件名。如果str是一个空指针,则该指针指向一个内部缓冲区,缓冲区在下一次调用函数时会被覆盖。

如果str不是一个空指针,则返回str。如果函数未能创建成功,则返回一个空指针。

int fprintf(FILE *stream, const char *format...)发送格式化输出到stream中。

返回值:如果成功,则返回写入的字符总数,否则返回一个负数。

int printf(const char *format..)发送格式化输出到标准输出stdout.

返回值:如果成功,则返回写入的字符总数,否则返回一个负数。

int sprintf(char *str, const char *format...)发送格式化输出到str所指向的字符串。

返回值:如果成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。

int vfprintf(FILE *stream, const char *format, va_list arg)使用参数列表发送格式化输出流到流stream中。

stream--这是指向FILE对象的指针,该FILE对象标识了流。

返回值:如果成功,则返回写入的总字数,否则返回一个负数。

int vprintf(const char *format, va_list arg)使用参数列表发送格式化输出到标准输出stdout.

返回值:如果成功,则返回写入的字符总数,否则返回一个负数。

int vsprintf(char *str, const char *format, va_list arg)使用参数列表发送格式化输出到字符串。

返回值:如果成功,则返回写入的字符总数,否则返回一个负数。

int fscanf(FILE *stream, const char *format,...)从流stream读取格式化输入。

返回值:如果成功,该函数返回成功匹配的赋值的个数。如果到达文件末尾或发生读错误,则返回EOF。

int scanf(const char *format,...)从标准输入stdin读取格式化输入。

返回值:如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回EOF.

int sscanf(const char *str, const char *format,...)从字符串读取格式化输入。

返回值:如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回EOF.

int fgetc(FILE *stream)从指定的流stream获取下一个字符,并把位置标识符往前移动。

返回值:该函数以无符号char强制转换为int的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回EOF.

char *fgets(char *str, int n, FILE *stream)从指定的流stream读取一行,并把它存储在str所指向的字符串内。当读取(n-1)个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止。

int fputc(int char, FILE *stream)把参数char指定的字符写入到指定的流stream中,并把位置标识符往前移动。

返回值:如果成功,则返回被写入的字符。如果发生错误,则返回EOF,并设置错误标识符。

int fputs(const char *str, FILE *stream)把字符串写入到指定的流中,但不包括控制符。

int getc(FILE *stream)从指定的流stream获取下一个字符,并把位置标识符往前移动。

int getchar(void)从标准输入stdin获取一个字符。

char *gets(char *str)从标准输入stdin读取一行,并把它存储在str所指向的字符串中。当读取到换行符时,或者到达文件末尾时,它会停止。

int putc(int char, FILE *stream)

把参数char指定的字符写入到指定的流stream中,并把位置标识符往前移动。

int putchar(int char)

把参数char指定的字符写入到标准输出stdout中

int puts(const chat *str)

把一个字符串写入到标准输出stdout,直到空字符,但不包括空字符。

int ungetc(int char, FILE *stream)把字符char推入到指定的流stream中,一边它是下一个被读取到的字符。

void perror(const char *str)把一个描述性错误信息输出到标准错误stderr.


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

原文地址: https://outofmemory.cn/tougao/12256780.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存