C Primer Plus 13.10 复习题
1、
#include <stdio.h>int main(void)
{ FILE *fp; int k; fp = fopen("gelatin", "w"); for(k = 0; k < 30; k++) fputs("Nanette eats gelatin.\n", fp); fclose(fp);return 0;
}
2、
打开一个文件,将文件中的数字打印在屏幕上。
3、
a: ch = getc( fp1 );
b: fprintf( fp2, “%c\n”, ch);
c: putc( ch, fp2);
d: fclose(fp1);
4、
#include <stdio.h>
#include <stdlib.h>int main(int argc, char * argv[])
{FILE *fp;double n;double sum = 0.0;int ct = 0;if(argc == 1)fp = stdin;else if(argc == 2){if ((fp = fopen(argv[1], "w")) == NULL){fprintf(stderr, "Could not open %s.\n", argv[1]);exit(EXIT_FAILURE);}}else{fprintf(stderr, "Usage: %s [filename]\n", argv[0]);exit(EXIT_FAILURE);}while (fscanf(fp, "%lf", &n) == 1){sum += n;ct++;}if(ct > 0)printf("Average of %d values = %f\n", ct, num / ct);elseprintf("No valid data.\n");fclose(fp); return 0;
}
5、
#include <stdio.h>
#include <stdlib.h>
#define BUF 256int has_ch(char ch, const char *st);int main(int argc, char *argv[])
{FILE *fp;char ch;char line[BUF];if(argc != 3){fprintf(stderr, "Usage: %s character filename\n", argv[0]);exit(EXIT_FAILURE);}ch = argv[1][0];if((fp = fopen(argv[2], "r")) == NULL){fprintf(stderr, "Could not open %s.\n", argv[2]);exit(EXIT_FAILURE);}while(fgets(line, BUF, fp) != NULL)if(has_ch(ch, line))fpouts(line, stdout);fclose(fp);return 0;
}int has_ch(char ch, const char *st)
{while(*st)if(ch == *st++)return 1;return 0;
}
6、
这两种文件格式对系统的依赖性不同。
二进制流和文本流的区别是在读写流时程序执行的转换(二进制流 不转换,而文本流可能要转换换行符和其他字符)。
7、
a:
用fprintf()时把8238201当做7个字符存储,用fwrite()时把8238201当做一个4字节整形存储
b:
没有区别,都将其视为一个单字节二进制码
8、
第一个和第二个都是将消息打印到标准输出。
第三个是将消息打印到标准错误。
通常,标准错误被定向到与标准输出相同的位置,但是标准错误不受标准输出重定向的影响。
9、
"r+"模式更适合用来更改文件中已有的内容。
"a+"模式打开文件只允许在文件的末尾添加内容。
"w+"模式打开文件会丢弃文件原来的内容。
