跳转至

复习题

第十三章 文件输入/输出

1.下面的程序有什么问题?

int main(void)
{
   int * fp;
   int k;
   fp = fopen("gelatin");
   for (k = 0; k < 30; k++)
     fputs(fp, "Nanette eats gelatin.");
   fclose("gelatin");
   return 0;
}
解答说明 |函数|函数原型|语法格式|功能|备注| |:--:|:--|:--|:--|:--| |fopen()|FILE *fopen(const char *filename,const char * mode);|FILE *fp = fopen("filename",mode)|打开文件|返回一个文件指针:FILE *fp 指向一个记录文件信息的数据结构
例:fp = fopen("hello_c.txt","r");| |fclose()|int fclose(FILE * stream);|fclose(fp)|关闭文件|关闭成功返回0,失败返回EOF(-1),存储空间不足或者被移除都会出现I/O错误,都会导致失败。|

内容中的三个错误点:

  1. fopen() 函数需要提供一个模式(mode)。
  2. fclose() 函数需要一个文件指针,不能使用文件名。
  3. fputs() 函数的参数顺序调换。(为了代码的可读性,建议在输出字符串结尾加一个换行符(\n)

2. 下面的程序完成什么任务?(假设在命令行环境中运行)

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char *argv [])
{
   int ch;
   FILE *fp;
   if (argc < 2)
     exit(EXIT_FAILURE);
   if ((fp = fopen(argv[1], "r")) == NULL)
     exit(EXIT_FAILURE);
   while ((ch = getc(fp)) != EOF)
     if (isdigit(ch))
        putchar(ch);
   fclose(fp);
   return 0;
}
解答说明

如果文件可以正常打开,会打开与命令行第一个参数名相同名称的文件,并打印显示文件中的每个数字字符。

3. 假设程序中有下列语句:

1
2
3
4
5
#include <stdio.h>
FILE * fp1,* fp2;
char ch;
fp1 = fopen("terky", "r");
fp2 = fopen("jerky", "w");
另外,假设成功打开了两个文件。补全下面函数调用中缺少的参数:

a.ch = getc();

b.fprintf( ,"%c\n", );

c.putc( , );

d.fclose(); / 关闭terky文件 /

解答说明


4. 编写一个程序,不接受任何命令行参数或接受一个命令行参数。如果有一个参数,将其解释为文件名;如果没有参数,使用标准输入(stdin)作为输入。假设输入完全是浮点数。该程序要计算和报告输入数字的算术平均值。

解答说明