Ejemplo n.º 1
0
Archivo: ft_printf.c Proyecto: Selk/Dev
int		ft_printf(const char *format, ...)
{
	va_list		args;
	t_env		*env;

	va_start(args, format);
	env = init_env();
	while (format[env->i])
	{
		if (format[env->i] == '%' && env->flag == 0)
			init_flags(env);
		if (env->flag == 1 && check_flag(format[env->i]) != 0)
			add_flag(env, format[env->i], env->i);
		else if (ft_isdigit(format[env->i]) == 1 && env->flag == 1)
			env->i = get_width(format, env->i, env);
		else if (format[env->i] == '.'
			&& env->flag == 1 && ft_isdigit(format[++(env->i)]) == 1)
			env->i = get_precision(format, env->i, env);
		else if (env->flag == 1 && check_length(format[env->i]) != 0)
			add_length(env, format, &(env->i));
		else if (env->flag == 1 && check_specifier(format[env->i]) != 0)
			process(args, env, format[env->i]);
		else
			env->size += ft_putchar(format[env->i]);
		env->i++;
	}
	return (env->size);
}
Ejemplo n.º 2
0
std::string read_format_with_args(const std::string &fmt, size_t &index, bool &width_arg, bool &precision_arg,
                                  Format &format) {
    size_t start = index++, len = fmt.length();
    while (index < len && check_flags(fmt[index])) {
        index++;
    }
    if (fmt[index] == '*' || isdigit(fmt[index])) {
        width_arg = has_arg(fmt, index);
    }
    if (fmt[index] == '.') {
        precision_arg = has_arg(fmt, ++index);
    }
    check_specifier(fmt, index);
    format = get_format(fmt, index);
    return fmt.substr(start, index - start);
}