我试图实现puts函数。它实际上返回一个值,但我不能得到它应该返回的内容。请检查我的代码并引导我进一步
/* implementation of puts function */
#include<stdio.h>
#include<conio.h>
void puts(string)
{
int i;
for(i=0; ;i++)
{
if(string[i]=='\0')
{
printf("\n");
break;
}
printf("%c",string[i]);
}
}
答案 0 :(得分:4)
请参阅代码中的注释。
int puts(const char *string)
{
int i = 0;
while(string[i]) //standard c idiom for looping through a null-terminated string
{
if( putchar(string[i]) == EOF) //if we got the EOF value from writing the char
{
return EOF;
}
i++;
}
if(putchar('\n') == EOF) //this will occur right after we quit due to the null terminated character.
{
return EOF;
}
return 1; //to meet spec.
}
而且,作为一个旁边 - 我写了相当于putc,在嵌入式系统上开发几个不同的时间。所以它并不总是一个学习练习。 :)
对EOF的评论:它是stdio.h中的POSIX常量。 在我的Linux stdio.h中,我有这个定义:
/* End of file character.
Some things throughout the library rely on this being -1. */
#ifndef EOF
# define EOF (-1)
#endif
该定义代码是GPL 2.1。
答案 1 :(得分:0)
string
应该是什么?您应该define your function better,尝试:
void my_puts(const char *string)
而不是
void puts(string)
如我所包含的链接中所述,您需要指定要传递的参数的数据类型(在您的示例中为string
),并且您不能使用已定义的函数的名称(即puts
)。
答案 2 :(得分:0)
从手册页:
#include <stdio.h>
int fputc(int c, FILE *stream);
int fputs(const char *s, FILE *stream);
int putc(int c, FILE *stream);
int putchar(int c);
int puts(const char *s);
返回值
fputc()
,putc()
和putchar()
将写为无符号字符集的字符返回到int或EOF
时出错。
puts()
和fputs()
在成功时返回非负数,或在出错时返回EOF
。
答案 3 :(得分:0)
好吧,stdio的puts()在成功时返回一个非负数,或者在错误时返回EOF。
答案 4 :(得分:0)
除了已经说过的内容之外,我个人反对重新定义标准库函数。但是,如果你绝对必须(例如做家庭作业),并且你的编译器抱怨'puts'的冲突类型,请尝试把它放在顶部:
#define puts _puts
#include <conio.h>
#include <stdio.h>
#undef puts
答案 5 :(得分:0)
在没有多线程支持(裸机编程)的系统中, putc 通常不会返回任何内容。
在这些情况下,不用担心返回代码。 最简单的 puts 实现是要走的路:
numbers[i]
答案 6 :(得分:-1)
我认为实施看跌期权没有任何意义! 无论如何,你应该阅读看跌期权的规格,这样你才能做到。
这可能会有所帮助
int myputs(char* s)
{
int x = printf("%s\n", s);
return (x > 0) ? x : EOF;
}
你应该包括stdio.h,这样你就可以使用printf和EOF。
请注意,这不是put的EXACT实现,因为在错误put中设置错误指示符并执行其他操作。
有关投注的更多详情,here。