Программирование. Принципы и практика использования C++ Исправленное издание, стр. 395
27.6.1. Вывод
Наиболее популярной и полезной функцией библиотеки
stdioprintf()printf()#include<stdio.h>void f(const char* p){ printf("Hello, World!\n"); printf(p);}Это не очень интересно. Намного интереснее то, что функция
printf()printf()int printf(const char* format, ...);Многоточие (
...printf()void f1(double d, char* s, int i, char ch){ printf("double %g string %s int %d char %c\n", d, s, i, ch);}где символы
%g%s%d%c%gd%ss%di%cchprintf()
printf()char a[] = { 'a', 'b' }; /* нет завершающего нуля */void f2(char* s, int i){ printf("goof %s\n", i); /* неперехваченная ошибка */ printf("goof %d: %s\n", i); /* неперехваченная ошибка */ printf("goof %s\n", a); /* неперехваченная ошибка */}Интересен эффект последнего вызова функции printf(): она выводит на экран каждый байт участка памяти, следующего за элементом a[1], пока не встретится нуль. Такой вывод может состоять из довольно большого количества символов.
Недостаток проверки типов является одной из причин, по которым мы предпочитаем потоки
iostreamstdiostdioprintf()iostream%Ystruct YСуществует полезная версия функции
printf()int fprintf(FILE* stream, const char* format, ...);Рассмотрим пример.
fprintf(stdout,"Hello, World!\n"); // идентично // printf("Hello,World!\n");FILE* ff = fopen("My_file","w"); // открывает файл My_file // для записиfprintf(ff,"Hello, World!\n"); // запись "Hello,World!\n" // в файл My_fileДескрипторы файлов описаны в разделе 27.6.3.
27.6.2. Ввод
Ниже перечислены наиболее популярные функции из библиотеки
stdioint scanf(const char* format, ...); /* форматный ввод из потока stdin */int getchar(void); /* ввод символа из потока stdin */int getc(FILE* stream); /* ввод символа из потока stream*/char* gets(char* s); /* ввод символов из потока stdin */Простейший способ считывания строки символов — использовать функцию
gets()char a[12];gets(a); /* ввод данных в массив символов a вплоть до символа '\n' */
gets()scanf("%s")gets()gets()