Skip to content
forked from jbocane6/printf

Printf function replica project performed by Angela Vergara & Juan Bocanegra.

Notifications You must be signed in to change notification settings

anversa-pro/printf

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

holberton

Angela Vergara twitter angela Linkedin angela Github angela     juan juanoso07555284 juan-camilo-bocanegra-osorio-18b1821a6 Github juan


titulo

PRINT FORMATTED: _printf

Printf function project performed by Angela Vergara & Juan Bocanegra.

_printf is an emulation of the original printf that refers to a control parameter used by a class of functions in the input/output libraries of C.
A string is written, characters are usually copied literally into the function's output, but format specifier, which starts with a % character, indicate the location and method to translate a piece of data to characters or modifiers, starting with \ character, indicates inline modifiers such as tab or newline.

About this Repo

Requirments to built it

  • Files should be compiled with gcc 4.8.4
  • No more than 5 functions per file
  • Files should end with a new line
  • No global variables allowed

This project contains four C files, a header, and a man-page with all functions, prototypes, and descriptions you need to play with this version.

C files
_printf.c:
_printf : This function evaluates the string input characters one by one looking for matching characters with de modifiers % and / to call a function for each case if there is no coincidence just prints all strings without modifications.
*_printspecials : Search into a string of special modifiers to print the modifier (\n \t \b \f \v \r) or return the characters.
_printmod.c
pbuffer : Function that prints and delete chars in buffer.
p_intmin : Prints integers longer or equal than Min and Max integer limits.
p_int : Evaluates if the number is longer than integer limits and calls p-intmin otherwise prints integers calling _itoa _itoa : converts an integer number into a string
_printmod : Search into a structure of specifiers (%c, %s, %d, %i, %R, %,r %b, %o, %x, %X) a function to print a format input
_printcs.c
p_char : Prints a char.
p_string : Prints strings.
p_reverse : Prints strings in reverse.
p_rot13 : Encodes a string using rot13.
_printbases.c
p_binary : converts a number into binary
p_octal : converts a number into octal
p_hexalow : converts a number into hexdecimal lowercase
p_hexaup : converts a number into hexdecimal uppercase

Header
holberton.h: This file contains prototypes for all the functions and the struct for data and function relation.

Man-page
man_3_printf : Custom man page for _printf function.

To access the Man Page. man_3_printf directly in a terminal, download the file and move it to the directory /usr/share/man/man1 where the system stores man pages for User shell commands.
You can view it by typing the following command: cd /usr/share/man/man1 Otherwise into the project directory by typing ./man_3_printf ..

How to use this project

  1. Please clone this repo into your sandbox or local terminal.
  2. Access to the directory and compile all C files with the command: gcc -Wall -Wextra -Werror -pedantic -std=gnu89 -Wno-format *.c - o _printf ( _printf is a suggested name, not mandatory)
  3. Typing ./_printf shows all cases set in the main.c file.
  4. For another test, please modify the main.c file considering the man-page description.

Example of main.c file:

#include <limits.h> #include <stdio.h> #include "holberton.h"

/**

  • main - Entry point

  • Return: Always 0 */ int main(void) { int len; unsigned int ui; void *addr;

    len = _printf("Let's try to printf a simple sentence.\n");
    ui = (unsigned int)INT_MAX + 1024;
    addr = (void *)0x7ffe637541f0;
    _printf("Length:[%d, %i]\n", len, len);
    _printf("Negative:[%d]\n", -762534);
    _printf("Unsigned:[%u]\n", ui);
    _printf("Unsigned octal:[%o]\n", ui);
    _printf("Unsigned hexadecimal:[%x, %X]\n", ui, ui);
    _printf("Character:[%c]\n", 'H');
    _printf("String:[%s]\n", "I am a string !");
    _printf("Address:[%p]\n", addr);
    len = _printf("Percent:[%%]\n");
    _printf("Len:[%d]\n", len);
    _printf("Unknown:[%r]\n");
    return (0);
    }

Expected results after compiling and executing:

  Let's try to printf a simple sentence.
  Length:[39, 39]  
  Negative:[-762534]  
  Unsigned:[2147484671]  
  Unsigned octal:[20000001777]  
  Unsigned hexadecimal:[800003ff, 800003FF]  
  Character:[H]  
  String:[I am a string !]  
  Address:[0x7ffe637541f0]  
  Percent:[%]  
  Len:[12]  
  Unknown:[%r]  

Flowchart

This project was thought to compile previous concepts such as Loops, Structures, Functions, and Variadic functions. For better understanding you can access the logic behind the program as follows:

The core function is int _printf(const char * const format, ...) in the file _printf.c This function evaluates the string input characters one by one looking for matching characters with de modifiers % and / if there is no coincidence just prints all strings without modifications.

About

Printf function replica project performed by Angela Vergara & Juan Bocanegra.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 100.0%