Функции ввода-вывода объявляются в заголовочном файле <stdio.h>
По умолчанию ввод-вывод выполняется из консоли, но можно перенаправить на файл:
program.exe <input.txt >output.txt
Если при перенаправлении указать >>
, то выводимая программой информация будет добавлена в файл. Ввод и вывод в кодировке unicode возможен только при перенаправлении в файл.
Для вывода используются следующие функции:
для char | для wchar_t | Назначение |
---|---|---|
putchar(c) |
putwchar(wc) |
Вывод символа |
puts(s) |
Вывод строки с переходом на новую строку | |
printf(fmt,...) |
wprintf(wfmt,...) |
Форматированный вывод |
Примеры:
#include <stdio.h>
int main()
{ putchar('A');
putchar('B');
}
#include <stdio.h>
int main()
{ puts("First line");
puts("Second line");
}
Для функции printf
первым аргументом нужно указать строку, содержащую кроме выводимых символов спецификаторы формата - по одному для каждого следующего аргумента.
В спецификаторе формата после % можно указать (все элементы опциональны):
-
(минус) для выравнивания влево (по умолчанию вправо);+
или пробел для вывода +
или пробела для положительных чисел (по умолчанию ничего);#
для вывода префикса 0 перед восьмеричными или 0x перед шестнадцатеричными числами (по умолчанию ничего);0
для заполнения 0 (по умолчанию пробелами);.
точность для вещественных чисел (по умолчанию 6) и выводимых символов для строк (по умолчанию все).Вместо конкретного числа для ширины и точности можно написать символ *
, тогда значение нужно указать в списке аргументов перед выводимым значением. Если формат x написать как X, то шестнадцатеричные цифры будут выводиться прописными буквами. Аналогично для E и G символ экспоненты будет выводиться как E.
Для вывода символа % в формате нужно указать %%.
При компиляции нужно обращать внимание на предупреждения о несоответствии спецификатора формата и типа аргумента или их количества.
#include <stdio.h>
int main()
{ double x=10.5;
int z=0x1AB2, n=7,m=3;
printf("|%-10.2lf|%10.2lf|%.2lf|%lf|%le\n",x,x,x,x,x);
// |10.50 | 10.50|10.50|10.500000|1.050000e+01
printf("|%08X|%8x|\n",z,z); // |00001AB2| 1ab2|
printf("|%*.*lf|\n",n,m,x); // | 10.500|
printf("|%8.3s|\n","String"); // | Str|
printf("|%3s|\n","String"); // |String|
}