使用fscanf和fprintf实现复制功能
执行复制功能,该功能使用使用fscanf和fprintf实现复制功能,c,C,执行复制功能,该功能使用fscanf从输入中一次读取一个字符,并使用fprintf从输出中一次打印一个字符 实现复制功能,该功能使用fgetc从输入中一次读取一个字符,并使用fputc从输出中一次打印一个字符 没有使用c[BUFSIZ]我还有其他方法可以做到这一点吗 以下是我尝试编写的代码: 第一个问题: static void copy(FILE *input, FILE *output) { char c = 0; while (fscanf(input, "%c", &am
fscanf
从输入中一次读取一个字符,并使用fprintf
从输出中一次打印一个字符
fgetc
从输入中一次读取一个字符,并使用fputc
从输出中一次打印一个字符没有使用
c[BUFSIZ]
我还有其他方法可以做到这一点吗
以下是我尝试编写的代码:
第一个问题:
static void copy(FILE *input, FILE *output) {
char c = 0;
while (fscanf(input, "%c", &c) != 0) {
fprintf(output, "%c", c);
}
}
static void copy(FILE *input, FILE *output) {
char c[BUFSIZ];
while (fgets(c, BUFSIZ, input) != NULL) {
fputs(c, output);
}
}
static void copy(FILE *input, FILE *output) {
char c;
while (fscanf(input, "%c", &c) == 1) {
fprintf(output, "%c", c);
}
}
static void copy(FILE *input, FILE *output) {
int c;
while ((c = fgetc(input)) != EOF) {
fputc(c, output);
}
}
第二个问题:
static void copy(FILE *input, FILE *output) {
char c = 0;
while (fscanf(input, "%c", &c) != 0) {
fprintf(output, "%c", c);
}
}
static void copy(FILE *input, FILE *output) {
char c[BUFSIZ];
while (fgets(c, BUFSIZ, input) != NULL) {
fputs(c, output);
}
}
static void copy(FILE *input, FILE *output) {
char c;
while (fscanf(input, "%c", &c) == 1) {
fprintf(output, "%c", c);
}
}
static void copy(FILE *input, FILE *output) {
int c;
while ((c = fgetc(input)) != EOF) {
fputc(c, output);
}
}
根据您的第二个问题描述,您需要使用
fgetc
和fputc
,而不需要任何缓冲区,它将执行上述复制功能和详细信息
语法:
int fputc(int char, FILE *pointer)
int fgetc(FILE *pointer)
static void copy (FILE *input, FILE *output)
{
int c;
while ((c = fgetc(input)) != EOF){
fputc(c, output);
}
}
fgetc()
读取流中的下一个字符,并将其作为无符号字符转换返回到文件或错误末尾的int
或EOF
这就是为什么c
被声明为int
而不是char
示例:
int fputc(int char, FILE *pointer)
int fgetc(FILE *pointer)
static void copy (FILE *input, FILE *output)
{
int c;
while ((c = fgetc(input)) != EOF){
fputc(c, output);
}
}
两种答案都有问题:
- 在第一个代码中,测试
是否返回非零。您应该改为测试它是否返回fscanf()
,这表示已成功读取字符。实际上,在文件的末尾,1
将返回fscanf()
,它也是非零的EOF
- 在第二个代码中,应该使用
和fgetc()
,而不是fputc()
和fgets()
。单个fputs()
intc此方法需要代码>
static void copy(FILE *input, FILE *output) {
char c = 0;
while (fscanf(input, "%c", &c) != 0) {
fprintf(output, "%c", c);
}
}
static void copy(FILE *input, FILE *output) {
char c[BUFSIZ];
while (fgets(c, BUFSIZ, input) != NULL) {
fputs(c, output);
}
}
static void copy(FILE *input, FILE *output) {
char c;
while (fscanf(input, "%c", &c) == 1) {
fprintf(output, "%c", c);
}
}
static void copy(FILE *input, FILE *output) {
int c;
while ((c = fgetc(input)) != EOF) {
fputc(c, output);
}
}
第二个问题:
static void copy(FILE *input, FILE *output) {
char c = 0;
while (fscanf(input, "%c", &c) != 0) {
fprintf(output, "%c", c);
}
}
static void copy(FILE *input, FILE *output) {
char c[BUFSIZ];
while (fgets(c, BUFSIZ, input) != NULL) {
fputs(c, output);
}
}
static void copy(FILE *input, FILE *output) {
char c;
while (fscanf(input, "%c", &c) == 1) {
fprintf(output, "%c", c);
}
}
static void copy(FILE *input, FILE *output) {
int c;
while ((c = fgetc(input)) != EOF) {
fputc(c, output);
}
}
请注意,对于
fscanf()
版本,c
必须定义为char
,对于fgetc()
方法,必须定义为int
fgetc()
返回一个int
,其值为负值EOF
表示文件结束或输入错误,或者从流中读取的字节值为无符号字符
有什么问题吗?对于第二个问题,您不应该使用fgetc
和fputc
?“不使用c[BUFSIZ]
”…是的-它说的是“一次一个字符”。不需要数组。请阅读fgetc(3)和fputc(3)手册页,您会发现没有char
类型。我很困惑,如果没有数组int-inp=fgetc(输入);fputc(输入,输出),我怎么能做到这一点
我想强调一下为什么c
不是char
会对OP有帮助。@Mayur我想OP是使用纯ASCII,否则应该有一个额外的unicode
标记或描述。明白了!但是我的fscanf和fprintf仍然不起作用,有人能帮我一下吗?@Bett你认为评论部分输入了XIGS吗?