题解 UVA1124 【Celebrity jeopardy】

posted on 2021-05-13 19:37:25 | under 题解 | source

这是一道练习 freadfwrite 的好题。

那么我们先来认识一下 freadfwrite


fread

fread 定义于 cstdio 头文件中,它的函数原型为:

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

它将从输入流 \(stream\) 里读取最多 \(count\) 个字符,并存入字符数组 \(buffer\)

那么我们来解释一下这些参数的意思:

  • \(buffer\):存字符的数组。fread 读取到的字符都将存入这里。
  • \(size\):字符大小。一般为 \(\bold{1}\)
  • \(count\)最多读入 \(count\) 个字符。如果待读入的字符数 \(>count\),那么 fread 将只读入 \(count\) 个字符。
  • \(stream\):输入流。一般为 \(\bold{stdin}\)

fread 返回它成功读入的字符数 \(\div size\)


fwrite

fwrite 定义于 cstdio 头文件中,它的函数原型为:

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

它将往输出流 \(stream\) 里输出 \(nmemb\) 个字符。输出的字符来自 \(ptr\) 数组。

那么我们来解释一下这些参数的意思:

  • \(ptr\):将要输出的字符。
  • \(size\):字符大小。一般为 \(\bold{1}\)
  • \(nmemb\):将要输出的字符数。注意 fwrite 可能会输出 \0 导致输出的字符末尾一堆空白。
  • \(stream\):输出流。一般为 \(\bold{stdout}\)

fwrite 返回 \(nmemb\)


这些函数认识完了,那么,我们可以先用 fread 读入所有字符,再用 fwrite 输出所有字符。

fwrite 具体要输出多少个字符呢?我们可以记录一下 fread 的返回值,fwrite 就输出 这个返回值 个字符就行了。

代码实现:

#include <cstdio>
using namespace std;
char buf[1<<22];
int main(){
    fwrite(
    	buf,	//对应 ptr
        1,		//对应 size
        fread(
        	buf,	//对应 buffer
            1,		//对应 size
            1<<22,	//对应 count
            stdin	//对应 stream
        ),		//对应 nmemb
        stdout	//对应 stream
    );
    return 0;
}
posted @ 2022-11-10 09:20  caijianhong  阅读(19)  评论(0编辑  收藏  举报