请编写函数,从文件中读取字符串。
函数原型
void FGetStr(char *str, int size, FILE *file);
说明:参数 str 为指示字符数组起始地址的指针,size 为数组尺寸,file 为文件指针。函数从文件输入的字符串(以换行符 '\n' 结束)到字符数组中,并在字符末尾添加字符串结束标记 '\0'。显然,字符串的最大长度应为 size - 1,为字符串结束标记 '\0' 预留空间。若用户输入的字符过多,则函数最多读取 size - 1 个字符,剩余字符仍留在缓冲区中,可以继续被后面的输入函数读取。
要求:不得把文件中的换行符 '\n' 也保存到字符串中。
裁判程序
#include <stdio.h>
#include <string.h>
void FGetStr(char *str, int size, FILE *file);
int main()
{
FILE *f;
char a[10], b[10];
f = fopen("MyStr.txt", "r");
if (f)
{
FGetStr(a, 10, f);
FGetStr(b, 10, f);
puts(a);
puts(b);
fclose(f);
}
return 0;
}
/* 你提交的代码将被嵌在这里 */
创建文本文件 MyStr.txt,复制下面的内容。
- MyStr.txt *
Bob
Mary
输出样例1
Bob
Mary
修改文本文件 MyStr.txt,复制下面的内容。
- MyStr.txt *
Constantine
输出样例2
Constanti
ne
修改文本文件 MyStr.txt,复制下面的内容。
- MyStr.txt *
Francisco
Stevenson
输出样例3
Francisco
Stevenson
笔者答案:
void FGetStr(char *str, int size, FILE *file)
{
char m;
int i=0;
while(m=fgetc(file),m!=EOF&&m!='\n'&&i<size-1)//装字符
{
str[i]=m;
i++;
}
if(m!='\n')//最重要的一步
{
ungetc(m,stdin);
}
str[i]='\0';//添加终止符
}