题解 UVA1124 【Celebrity jeopardy】
posted on 2021-05-13 19:37:25 | under 题解 | source
这是一道练习 fread
和 fwrite
的好题。
那么我们先来认识一下 fread
和 fwrite
:
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;
}
本文来自博客园,作者:caijianhong,转载请注明原文链接:https://www.cnblogs.com/caijianhong/p/solution-UVA1124.html