第十三章编程练习答案,自学记录
第一题
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SLEN 181
char* s_gets(char* ptr, int n);
int main()
{
int ch;
FILE* fp;
char len[SLEN];
unsigned long count = 0;
s_gets(len, SLEN);
if ((fp = fopen(len, "r")) == NULL)
{
printf("Can't open %s\n", len);
exit(EXIT_FAILURE);
}
while ((ch = getc(fp)) != EOF)
{
putc(ch, stdout);
count++;
}
fclose(fp);
printf("\nFile %s has %lu characters\n", len, count);
return 0;
}
char* s_gets(char* ptr, int n)
{
char * ch;
char* ptr_val;
int i;
ptr_val = fgets(ptr, n, stdin);
if (ptr_val)
{
ch = strchr(ptr, '\n');
if (ch)
*ch = '\0';
else
while (getchar() != '\n')
continue;
}
return ptr_val;
}
第二题
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
FILE* fpr;
FILE* fpw;
int ch;
if (argc != 3)
{
fprintf(stderr, "文件打开失败,您输入的地址不全\n");
exit(EXIT_FAILURE);
}
if (strcmp(argv[1], argv[2]))
{
if ((fpr = fopen(argv[1], "rb")) == NULL)
{
fprintf(stderr, "找不到%s地址", argv[1]);
exit(EXIT_FAILURE);
}
if ((fpw = fopen(argv[2], "rb+")) == NULL)
{
fprintf(stderr, "找不到%s地址", argv[2]);
exit(EXIT_FAILURE);
}
}
else
{
fprintf(stderr, "输入的文件名相同:%s\n\t\t\t%s\n", argv[1], argv[2]);
exit(EXIT_FAILURE);
}
while (!feof(fpr))
{
ch = fgetc(fpr);
fputc(ch, stdout);
fputc(ch, fpw);
}
fclose(fpr);
fclose(fpw);
return 0;
}
第三题
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#define SLEN 181
char* s_gets(char* ptr, int n);
int main(void)
{
FILE* fp;
char len[SLEN];
int ch;
long i=0;
fprintf(stdout, "请输入文本文件名:");
s_gets(len, SLEN);
if ((fp = fopen(len, "r+")) == NULL)
{
fprintf(stderr, "无法打开%s此地址\n", len);
exit(EXIT_FAILURE);
}
fprintf(stdout, "地址打印成功");
while ((ch = fgetc(fp)) != EOF)
{
ch=toupper(ch);
fseek(fp, i, SEEK_SET);
fputc(ch, fp);
i++;
fseek(fp, i, SEEK_SET);
}
puts("\n输出打印在文件中的内容");
rewind(fp);
while ((ch = fgetc(fp)) != EOF)
{
fputc(ch, stdout);
}
fclose(fp);
return 0;
}
char* s_gets(char* ptr, int n)
{
char* find;
char* str_val;
str_val = fgets(ptr, n, stdin);
if (str_val)
{
find = strchr(ptr, '\n');
if (*find)
*find = '\0';
else
while (getchar() != '\n')
continue;
}
return str_val;
}
第四题
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
FILE* fp;
int i;
char ch;
fprintf(stdout, "共有%d个文件\n", argc - 1);
for (i = 1; i < argc; i++)
{
if ((fp = fopen(argv[i], "r")) == NULL)
{
fprintf(stderr, "此%s地址无法打开\n", argv[i]);
exit(EXIT_FAILURE);
}
fprintf(stdout, "\n第%d个文件打开成功\n", i);
while ((ch = fgetc(fp)) != EOF)
{
fputc(ch, stdout);
}
if (fclose(fp))
{
fprintf(stderr, "无法关闭%s文件\n", argv[i]);
}
}
return 0;
}
第五题
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFSIZE 4096
void append(FILE* source, FILE* dest);
int main(int argc,char **argv)
{
FILE* fa, * fs;
int files = 0;
int ch;
if (argc < 3)
{
fprintf(stderr, "输入的地址不正确:%s", argv[0]);
exit(EXIT_FAILURE);
}
if ((fa = fopen(argv[1], "a+")) == NULL)
{
fprintf(stderr, "无法打开 %s\n", argv[1]);
exit(EXIT_FAILURE);
}
if (setvbuf(fa, NULL, _IOFBF, BUFSIZE) != 0)
{
fputs("无法创建输出缓冲区", stderr);
exit(EXIT_FAILURE);
}
while (argv[files + 2] && argv<