题解 UVA1124 【Celebrity jeopardy】

· · 题解

这是一道练习 freadfwrite 的好题。

那么我们先来认识一下 freadfwrite

fread

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

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

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

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

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

fwrite

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

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

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

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

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;
}