老师未批改
1. 使用 getchar 完成 fgets 和 gets 两个函数.
程序源代码:
/*************************************************************************
> 文件名: lesson24.hw.01.c
> 作者: 花心胡萝卜
> 邮箱: hxhlb@hxcarrot.com
> 创建时间: 2016-10-09 23:12:39
************************************************************************/
#include <stdio.h>
#define MAX_LEN 255
/**
* 自己写的fgets
* fgets的特性就是
* 1. 可以指定读取缓冲区的大小, 超过规定大小后只读取指定大小的缓冲区
* 2. 可以指定流参数
* 3. 可以读取'\n', ' '字符, 并以'\n'为结束读取标识
*
* 说明:
* 当前自己写的函数, 最后的参数stream是无用的.
*
* 返回值
* 读取的字符串长度
*/
int fgetsHades(char* strBuffer, size_t szBufSize, FILE* stream) {
char ch = '\0';
size_t szStrLen = 0;
// 读取指定长度的字符
for (; szStrLen < szBufSize - 1; szStrLen++) {
if ((ch = getchar()) != EOF) {
*(strBuffer + szStrLen) = ch;
if (ch == '\n') {
break;
}
}
}
// 给字符串添加结束字符
*(strBuffer + szStrLen + 1) = '\0';
return szStrLen;
}
/**
* 自己写的gets
* gets的特性就是
* 1. 不能指定读取缓冲区的大小, 超过规定大小后就造成缓冲区溢出
* 2. 不可以读取'\n', 可以读取' '字符, 以'\n'为结束字符
*
* 返回值
* 读取的字符串长度
*/
int getsHades(char* strBuffer) {
char ch = '\0';
int iIndex = 0;
// 读取指定长度的字符
while ((ch = getchar()) != EOF && ch != '\n') {
*(strBuffer + iIndex++) = ch;
}
// 给字符串添加结束字符
*(strBuffer + iIndex + 1) = '\0';
return iIndex;
}
int main() {
printf("接下来测试自定义的fgets函数\n");
printf("请输入字符串(输入3次或者字符串长度超过30自动停止输入):\n");
for (int i = 0; i < 3; i++) {
char str[MAX_LEN] = { '\0' };
fgetsHades(str, 10, NULL);
printf("第[%d]次输入的字符串为:[%s]\n", i + 1, str);
}
printf("接下来测试自定义的gets函数\n");
printf("请输入字符串(输入3次自动停止输入):\n");
for (int i = 0; i < 3; i++) {
char str[MAX_LEN] = { '\0' };
getsHades(str);
printf("第[%d]次输入的字符串为:[%s]\n", i + 1, str);
}
return 0;
}运行效果:
2. 使用 putchar 完成 fputs 和 puts 两个函数.
程序源代码:
/*************************************************************************
> 文件名: lesson24.hw.02.c
> 作者: 花心胡萝卜
> 邮箱: hxhlb@hxcarrot.com
> 创建时间: 2016-10-10 0:33:37
************************************************************************/
#include <stdio.h>
#define MAX_LEN 255
/**
* 自己写的fputs
* fputs的特性就是
* 1. 可以指定流参数
*
* 说明:
* 当前自己写的函数, 最后的参数stream是无用的.
*
* 返回值
* 0 成功
*/
int fputsHades(const char* strBuffer, FILE* stream) {
char* pStr = strBuffer;
while (*pStr != '\0') {
putchar(*pStr);
pStr++;
}
return 0;
}
/**
* 自己写的puts
* puts的特性就是
* 1. 在字符串最后会自动添加一个'\n'
*
* 返回值
* 0 成功
*/
int putsHades(const char* strBuffer) {
char* pStr = strBuffer;
while (*pStr != '\0') {
putchar(*pStr);
pStr++;
}
putchar('\n');
return 0;
}
int main() {
printf("请输入一个字符串:(使用fgets读取)\n");
char str[MAX_LEN] = { '\0' };
fgets(str, MAX_LEN, stdin);
printf("接下来是自定义的fputs输出:\n[");
fputsHades(str, NULL);
printf("]\n接下来是自定义的puts输出:\n[");
putsHades(str);
printf("]\n");
printf("请输入一个字符串:(使用gets读取)\n");
memset(str, 0x00, sizeof(str));
gets(str);
printf("接下来是自定义的fputs输出:\n[");
fputsHades(str, NULL);
printf("]\n接下来是自定义的puts输出:\n[");
putsHades(str);
printf("]\n");
return 0;
}运行效果:

如有错误,请提出指正!谢谢.
本文由 花心胡萝卜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: 2016-10-09 at 05:03 pm
