C语言的一道题 不知道哪里错了 请高手指教一下

请编写一个函数mygets和myputs,其功能分别与gets和puts相同,函数中用getchar和putchar读入和输出字符.下面是我写的函数,请说出哪里错了,并写出正确的程序!谢谢!!
#include "stdio.h"
char mygets(char a[100])
{
int i;

for(i=0;i<100;i++)
a[i]=getchar();
return a[i];

}
char myputs(char b[100])
{
int i;
for(i=0;i<100;i++)
putchar(b[i]);
return b[i];
}
void main()
{
char x[100];
printf("请输入一串字符\n");
mygets(x);
myputs(x);

}

gets()函数接受一个char*类型的参数,如果读取成功,就返回参数的地址,否则返回NULL

puts()函数接受一个const char*类型的参数,如果成功就返回一个非负数,否则就返回EOF

并且,这两个函数都不做边界检查。

自己写这两个函数时应该实现这几点,所以原程序修改如下:

//---------------------------------------------------------------------------

#include <stdio.h>
char *mygets(char *buf)
{
int i;
char ch;
if (feof(stdin)) return NULL;

for (i = 0; ; i++) {
if ((ch=getchar())==EOF) return NULL;
buf[i]=ch;
if (buf[i]=='\n') {
buf[i]='\0';
break;
}
}
return buf;
}
int myputs(const char *str)
{
int i;
for (i = 0; str[i]; i++) {
if (putchar(str[i])==EOF) return EOF;

}
putchar('\n');
return i;
}

void main()
{
char x[100];
printf("请输入一串字符\n");
mygets(x);
myputs(x);

}
//---------------------------------------------------------------------------
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-02-02
一个外部函数返回值要么是一个类型的数字或字符或要么事数组或字符串的首地址,而你return a[i]返回的好似你输入的最后一个字符。
我将你的程序改了一下,你看看:
#include "stdio.h"
char mygets()
{
int i;

for(i=0;i<10;i++)
return(getchar());

}
void myputs(char b[10])
{
int i;
for(i=0;i<10;i++)
putchar(b[i]);
}
void main()
{
char x[100];
printf("请输入一串字符\n");

for(int i=0;i<10;i++)
x[i]=mygets();

myputs(x);

}
第2个回答  2010-02-02
#include "stdio.h"
void mygets(char *a)
{
scanf("%s",a);
}
void myputs(char *b)
{
int i;
for(i=0;i<100;i++)
{
if (b[i]!='\0')
putchar(b[i]);
else
break;
}
printf("\n");
}
void main()
{
char x[100]={0};
printf("请输入一串字符\n");
mygets(x);
myputs(x);

}
第3个回答  2010-02-02
#include "stdio.h"
void mygets(char a[])
{

scanf("%s",a);

}
void myputs(char b[])
{
printf("%s\n",b);

}
void main()
{
char x[100];
printf("请输入一串字符\n");
mygets(x);
myputs(x);

}
第4个回答  2010-02-02
return a[i];

i已经指向最后一位了
第5个回答  2010-02-02
问题出在 对for循环的理解。
在跳出for循环以后,遍历已经超出了范围。(很好理解:否则还会继续遍历。) 因此两处return的下标都应该是 i - 1 而不是 i.
相似回答
大家正在搜