C 有没有办法使这段代码简洁?

C 有没有办法使这段代码简洁?,c,C,我目前正在学习和练习c,但我正在做的练习希望每个函数有25行限制(不更改{}或使用单行if语句!) 如果有什么办法可以让这个更短,请帮忙 void ft_write_file(void) { char c; int fd; int i; i = 0; if ((fd = open("write_exam", O_WRONLY | O_TRUNC | O_CREAT, 00777)) == -1) { ft

我目前正在学习和练习c,但我正在做的练习希望每个函数有25行限制(不更改{}或使用单行if语句!)

如果有什么办法可以让这个更短,请帮忙

void    ft_write_file(void)
{
    char c;
    int fd;
    int i;

    i = 0;
    if ((fd = open("write_exam", O_WRONLY | O_TRUNC | O_CREAT, 00777)) == -1)
    {
        ft_putstr("map error");
        return ;
    }
    while (read(0, &c, 1))
    {
        write(fd, &c, 1);
        if (c == '\n')
            break ;
        ft_allocate_g_var(i, c, 0);
        i++;
    }
    int j = 0;
    while (j < g_line)
    {
        while (read(0, &c, 1))
        {
            write(fd, &c, 1);
            if (c == '\n')
                break ;
        }
        j++;
    }
    close(fd);
}
void ft\u write\u文件(void)
{
字符c;
int-fd;
int i;
i=0;
如果((fd=open(“write_-exam”,O_-WRONLY | O_-TRUNC | O_-CREAT,00777))=-1)
{
ft_putstr(“映射错误”);
回来
}
while(读(0,&c,1))
{
写入(fd和c,1);
如果(c=='\n')
打破
ft_分配g_var(i,c,0);
i++;
}
int j=0;
而(j
一种简单的方法是在一行中声明顶部的所有变量,例如:

字符c;int-fd;int i;i=0


除此之外,我不知道,希望它能帮助一点,至少

首先,不要试图在一个函数中做两件事。试着用合理的参数编写函数,而不是硬编码它们的主题

例如,您的函数实际上在做两件事:

  • 查找并可能创建输出文件(使用硬编码名称)

  • 将一个流(硬编码为stdin)的全部内容复制到另一个流

  • 所以你可以将其分解:(仅限于原型)

    /*错误时返回fd或-1*/
    int open_输出(常量字符*名称);
    /*返回复制的字节数或错误时返回-1*/
    ssize\u t copy\u fd(int fd\u dest,int fd\u source);
    
    那么你的司机可能是:

    ssize\u t copy\u stdin\u to\u file(const char*name)
    {
    int fd=打开输出(名称);
    如果(fd<0)
    {
    ft_putstr(“无法打开输出文件”);
    返回-1;
    }
    ssize_t copied=copy_fd(fd,0);
    如果(复制<0){
    ft_putstr(“无法写入数据”);
    返回复印件;
    }
    }
    
    注意
    while(读取(0,&c,1))
    是错误的。(read()可以返回-1)在c中,基本上你可以在一行上写所有的东西(除了少数例外),这是一种不好的做法,但是如果你只需要很少的行数,你可以在一行上写多个“行”;int i;i=0进入
    intfd,i=0。短语“每个要拥有的函数”强烈建议您可能希望将此函数分为多个函数——您能找出此函数与您将创建和调用的新函数之间的逻辑责任划分吗?@wildplasser我是否仔细检查了-1?阅读的正确形式是什么?