Добрый день уважаемые читатели.
В данном уроке мы подробно остановимся на вводе и выводе данных. Узнаем что такое стандартный поток ввода и вывода. Поговорим о том, зачем нужна стандартная библиотека функций. А так же научимся работать со справочниками по функциям. Это очень полезное умение. Рассмотрим на простом примере, который как раз будет в тему нашего урока.
Прочитайте улучшенную версию этого урока "Ввод/вывод в языке Си".
В новой версии:
- Дополнительные материалы
- Задачи с автоматической проверкой решения
- Исследовательские задачи
Пусть нам требуется ввести с клавиатуры в программу какое-то число. Дело в том, что в языке нет никаких специальных конструкций, определяющих ввод-вывод. Если вы внимательно читали первый урок, то я уже вскользь упоминал об этом (помните для того чтобы вывести на экран строчку, нам надо было включить в программу заголовочный файл stdio.h) . Так вот, в самом языке нет даже такой операции как возведение в степень числа, или вычисление квадратного корня. Но обычно, сам по себе язык и не используется. Вместе с языком программирования поставляется и стандартная библиотека функций. Это набор файлов с расширением *.h, в которых описаны различные дополнительные функции, которые любая программа может использовать. Как вы уже догадались, функции ввода вывода описаны в файле stdio.h. Помимо стандартной библиотеки функции, программисты пишут и свои библиотеки функции, и еще существует много других библиотек функций, написанных для какого-то определенного круга задач. Таким образом, разных готовых функций для языка Си очень-очень много, и знать их все вряд ли возможно, а учитывая то, что знать надо не только название функции, но и какие данные она принимает, какие возвращает, что она делает, то это становится почти невозможно задачей. Но к счастью, этого и не требуется. Для стандартной библиотеки функции существуют куча различных справочников и там подробно описано всё это. И вот именно работать с этими справочниками мы сегодня научимся. Так, приступим же.
Символьный ввод и вывод данных.
Стандартная библиотека включает несколько функций для чтения и записи одного символа. Простейшие из них мы сегодня и рассмотрим. Функции getchar и putchar.
Теперь пришло время научиться работать со справочником функции. В интернете можно найти много различных справочников, можно купить так же справочник в книжном магазине, часто в конце различных учебников по программированию есть небольшие справочники по функциям стандартной библиотеки. В общем, не суть важно, какой использовать, содержание везде примерно одинаковое. Для примера используем справочник сайта CodeNet. Никакого скрытого смысла тут нет, просто если в google набрать «справочник по функциям С» то он будет на первой позиции. Выберем там функцию getchar. Вот её описание:
Листинг 3.1
getchar
Функция Вводит символ из потока stdin.
Синтаксис #include <stdio.h>
int getchar(void);
Файл, содержащий stdio.h
прототип
Описание getchar - это макрокоманда, вводящая символ из
потока stdin. Она определена следующим образом:
getc(stdin).
Возвращаемое При успешном завершении функция getchar возвращает
значение считанный символ после предварительного
преобразования его в целое без расширения знака.
При возникновении ситуации EOF или при ошибке она
возвращает EOF.
Переносимость Функция поддерживается на системах UNIX, описана
Керниганом и Ритчи. Поддерживается стандартом ANSI
C. Функция не совместима с Windows.
Смотрите также fdetc, fgetchar, getch, getche, gets, putc,
putchar, scanf, ungetc.
Пример:
И примерно такое же описание будет в любом из справочников. Остановимся поподробнее.
- Блок «функция».
Небольшой материал о стандартных потоках ввода и вывода в новой версии урока.
Таким образом, получается, что функция getchar просто берет первый символ из стандартного потока ввода, т.е. с клавиатуры.
- «Синтаксис».
Листинг 3.2.
#include <stdio.h>
int getchar(void);
Любая функция имеет общий формат:
Формат прототипа функций в языке Си |
Следовательно, мы узнали, что необходимо подключить сначала файл stdio.h. И функция возвращает значение типа int. При этом не имеет параметров (это значит, что когда мы будем её использовать, в скобочках ничего писать не нужно), об этом говорит тип void в скобочках.
- «Файл, содержащий прототип»
- «Описание».
- «Возвращаемое значение»
- «Переносимость»
- «Смотри так же»
- «Пример»
Для того, чтобы не было сомнений в том, что во всех справочниках примерно одинаковое содержание, вот картинка из одного учебника по программированию:
Описание функции getchar из справочника функций |
Как видите, все основные данные о функции есть и тут.
Функция putchar.
Описана в файле stdio.h.
Формат: int putchar(int d)
Предназначена для вывода символа d в стандартный поток вывода, т.е. на экран монитора. Значение d должно быть целого типа. Если вывести символ удалось, то возвращается значение d, если нет – EOF.
Небольшая программка для показания примера работы функций getchar и putchar.
Листинг3.3
#include <stdio.h>
int main()
{
int a,b;
a=getchar();
b=150;
b=a;
putchar(b);
return(0);
}
Разберем как она работает. Сначала подключаем файл, потом объявляем переменные целого типа a и b. Переменной b присваиваем значение 150. Потом в переменную a с помощью функции getchar читаем один символ из стандартного потока ввода (с клавиатуры), переменной b присваиваем значение переменной a, выводим с помощью функции putchar значение переменной b.
Результат работы программы можно увидеть на рисунке:
Программа демонстрирующая работу функций посимвольного ввода getchar и putchar |
Как видим программа работает. Значение в переменной b изменилось со 150 на то, чтовы введете. В моём случае 3. Теперь надо убедиться что программа читает всего один символ, попробуем ввести несколько символов подряд и нажать Enter.Вот что получится:
Программа демонстрирующая работу функций посимвольного ввода getchar и putchar. |
Как видите считался только один символ, что и требовалось докзать.
//UPD (5 июля 2012):
Сегодня, отвечая на комментарии к этому уроку заметил, свой недочет. Я принял несколько программ по заданию 3 и сказал, что они выполнены правильно, хотя это не так. Никто из сдавших не организовал ввод чисел с клавиатуры, а почему-то пропустил. Ну и заметил, что пропустил в уроке несколько важных моментов. Сейчас будем это исправлять.
Как уже говорилось раньше, функция getchar берет первый символ из стандартного потока вывода. Посмотрим что будет, если мы в предыдущей программе поставим две функции getchar подряд.
Листинг3.4
#include <stdio.h>
int main()
{
int a,b,с;
a=getchar();
с=getchar();
b=150;
b=a;
putchar(b);
printf("\n");
putchar(c);
return(0);
}
Такая программа сначала считает в переменную а первый символ, а потом считает следующий символ, в переменную с. Пример, работы программы показан на рисунке ниже.
Добавьте подпись |
Если надо с помощью getchar считать несколько символов, записанных через пробел, то можно например, использовать дополнительную переменную, в которую будем считывать пробел.Либо писать, несколько раз считывание одного символа.
Пример:
a=getchar();
b=getchar();
b=getchar();
При таком считывании, например, строки "v 4", в переменную а считаем v, далее в переменную b считаем, пробел, и потом еще раз считаем в переменную b следующий символ, то есть 4. В итоге получим, то что нам и требуется.
Теперь перейдём к нашим функциям форматного ввода и вывода данных printf и scanf.
Называются они так, потому, что выводят и считывают данные в соответствии со строкой формата. Про это я уже говорил в конце второго урока. Основной принцип их работы разбирался там же. Сегодня мы рассмотрим специальный символы (начинаются со значка %) которые существуют, их еще называют спецификаторами формата. А так же поговорим о модификаторах формата, это такие значки, которые позволят задавать число знаков после запятой, или, например, по какому краю выравнивать символы.
Подробный разбор функции printf() в новой версии курса.
И так существуют следующие спецификаторы формата:
- %d или % i для целых чисел
- %c для отдельный символ.
- %f для вещественных чисел ( с точкой) Выводятся в привычном виде. Например, 23.40000 Количество знаков после запятой задается точностью. По умолчанию точность равна 6.
- %e для вещественных чисел. Выводится в научном виде например, 23.4 будет выведено как 2.340000e+001. Это означает что число 2.34 надо умножить на 10 в степени +1. Тут тоже количество знаков после запятой задается точностью. По умолчанию точность равна 6.
- % если никаких аргументов нет, то не преобразуются и печатается просто %.
Для примера рассмотрим простейшую программу.
Листинг 3.5.
#include <stdio.h>
int main()
{
int a=25;
float b=23.4;
double c=217.876;
char d='a';
printf("Dva chelih %i %d \n",a,a);
printf("Odin simvol %c \n",d);
printf("Vewestvennoe obychnoe %f \n",b);
printf("vewestvennoe v nauchnom vide %e \n",b);
printf("Vewestvennoe obychnoe %f \n",c);
printf("vewestvennoe v nauchnom vide %e \n",c);
return(0);
}
Вот результат её работы.
Программа демонстрирующая работу различных спецификаторов формата. |
Теперь стоит поговорить о модификаторах формата. Модификаторы формата пишутся после знака % перед спецификатором формата. Примеры:
%-8.5f %4.6f %-2d
Итак, пойдем по порядку. После % может стоять символ – это значит надо выровнять число по левому краю, если минуса нет, то значение выравнивается по правому краю. Дальше идет цифра, означающая ширину поля на экране предназначенного для вывода этой переменной. Если указанного количества не хватит, то оно будет само расширено. Дальше точка, это просто разделитель первой и второй цифры. Вторая цифра применяется для вещественных чисел, она указывает, количество знаков после запятой.
Рассмотрим на примерах:
Листинг 3.6
#include <stdio.h>
int main()
{
int a=777;
//никаких модификаторов нет, выведет используя минимальную ширину поля
printf("|%i|\n", a);
//ширина 8 позиций, выравнивание по левому краю
printf("|%-8i|\n", a);
//ширина 8 позиций, выравнивание по правому краю
printf("|%8i|\n", a);
//число позиций 2, но в числе 777 больше двух цифр, поэтомк расширяется до минимального значения
printf("|%2i|\n", a);
double b=150.37;
//никаких модификаторов нет, выведет используя минимальную ширину поля и стандартную точность 6 знаков
printf("|%f|\n", b);
//ширина 8 позиций, выравнивание по левому краю, 3 знака после запятой
printf("|%-8.3f|\n", b);
//ширина 8 позиций, 2 знака после запятой, выравнивание по правому краю
printf("|%8.2f|\n", b);
//число позиций 4, 3 знака после запятой, но этого мало и поэтому расширяется до минимального значения ширина
printf("|%4.3f|\n", b);
return(0);
}
Результат работы:
Программа иллюстрирующая работу модификаторов формата для целых и вещественных чисел. |
И на последок, помните мы говорили об управляющих последовательностях (например, \n) , их еще называют escape последовательности. Вот вам список некоторых из этих последовательностей:
\а сигнал-звонок
\f перевод-страницы
\n новая-строка
\t горизонтальная-табуляция
\v вертикальная-табуляция
\\ обратная наклонная черта
\? знак вопроса
\' одиночная кавычка
\" двойная кавычка
Пожалуй всё на сегодня.
//UPD (5 июля 2012):
И еще один небольшой, но важный комментарий. Рассмотрим простой пример.
Листинг3.7
#include <stdio.h>
int main()
{
int a;
a=getchar();
printf("a=%d",a);
return(0);
}
Ниже представлен результат её работы.
Как видите, ввели мы f, а на выходе получили 102. Чудеса, да и только.
На самом деле все просто. Когда функция getchar считывает символ входного потока, она возвращает значение int этого символа, равное коду символа в таблице кодов ASCII.
Каждому символу в этой таблицей ставится в соответствие его порядковый номер. Например, символу f соответствует номер 102, а цифре 1, номер 49. Т.е. если вы введете 1, то в переменную сохранится не 1, а 49. Таблицу кодов ASCII вы легко найдете в интернете.
А как же быть, спросите вы.
Да легко, можно воспользоваться для вывода символов функцией putchar, как мы уже это делали выше, а можно в спецификаторе формата использовать не %d, а %c. Тогда всё встанет на свои места.
Резюме урока:
- Научились работать со справочниками функций
- Изучили функции посимвольного ввода и вывода
- Изучили спецификаторы и модификаторы формата для функции printf
- Немножко поговорили о потоках в программировании
Задание для практической работы:
- Поэкспериментируйте с модификаторами формата для спецификатора %e.
- Напишите программу которая будет использовать различные escape-последовательности.Посмотрите и на сколько символов вправо сдвигает курсор последовательность \t, посмотрите на сколько строчек вниз сдвигает курсор последовательность \v.
- Напишите программу которая считывает с клавиатуры 6 чисел, записанных через пробел. (1 2 64.3 0.624 25.07 43900) причем первые два числа считываются с помощью функции getchar. Для вывода запрещено использовать пробелы, все сдвиги оформляйте через табуляцию и с помощью модификаторов формата. Программа выводит данные на экран в виде такой таблицы:
Задачи с автоматической проверкой решения из новой версии курса.
Задачи на форматированный вывод Си.
Задачи на ввод данных в Си.
Если Вам понравился этот урок, расскажите о нем вашим друзьям. В
этом Вам могут помочь кнопки основных социальных сетей, расположенные
ниже. Вам остается всего лишь кликнуть по любой из них.
//3.4
ОтветитьУдалить#include
int main()
{
int a,b,f;
a=1;
b=2;
f=439000;
float c,d,e;
c=64.3;
d=0.624;
e=25.07;
printf("\t");
printf(" |=========|=========| \n");
printf("\t");
printf(" |%-9d|%9.2f| \n",a,c);
printf("\t");
printf(" |%-9d|%9.3f| \n",b,d);
printf("\t");
printf(" |%-9d|%9.2f| \n",f,e);
return(0);
}
Как эту таблицу по центру расположить? С помощью printf("\t"); я хоть как то сместил, но все же не так как нужно...
Ну как вариант используйте несколько \t =))
ОтветитьУдалитьА вообще, опять невнимательно прочитали задание. Никаких пробелов, использовать нельзя, я понимаю, что тут не критично, но это дисциплинирует.
И как совет, на одну строку таблицы используйте один вызов функции printf(...); не стоит разбивать на несколько строк.
#include
ОтветитьУдалитьint main(void)
{
int a,b,f;
a=1;
b=2;
f=439000;
float c,d,e;
c=64.3;
d=0.624;
e=25.07;
printf("\t\t\t|=========|=========|\n\t\t\t");
printf("|%-9d|%9.2f|\n\t\t\t",a,c);
printf("|%-9d|%9.3f|\n\t\t\t",b,d);
printf("|%-9d|%9.2f|\n",f,e);
return(0);
}
Я понял что вы имели ввиду. Вот, 4 строки 4вызова printf().
Здравствуйте, вот что получилось. Правда, первая строка громоздкая. И о getchar не очень поняла, к сожалению. Если функция заменяет значения тем, что вводит пользователь, как с ее помощью можно заранее заданные значения ввести? Может быть, я снова не пойму основного :(
ОтветитьУдалить//пятая программа
#include "stdio.h"
int main()
{
int a='=', b=1, d=2, f=439000;
double c, g, e;
c=64.3;
g=25.07;
e=0.624;
printf("\t\t\t |%c", a);
printf("%c", a);
printf("%c", a);
printf("%c", a);
printf("%c", a);
printf("%c", a);
printf("%c", a);
printf("%c", a);
printf("%c|", a);
printf("%c", a);
printf("%c", a);
printf("%c", a);
printf("%c", a);
printf("%c", a);
printf("%c", a);
printf("%c", a);
printf("%c", a);
printf("%c| \n", a);
printf("\t\t\t |%-9d|", b);
printf("%9.2f| \n", c);
printf("\t\t\t |%-9d|", d);
printf("%9.3f| \n", e);
printf("\t\t\t |%-9d|", f);
printf("%9.2f| \n", g);
return (0);
Доброго времени суток, Милана. По поводу getchar. Не уверен что полностью понял, что вы имели ввиду, но объясню так. getchar это функция, как мини-альтернатива функции printf. Только printf считывает данные согласно формат-строке, а getchar просто считывает первый символ из стандартного потока. Например вы ввели 235235, функция getchar считает в переменную 2. Если в программе будет, после getchar сразу еще одна функция getchar, то она считает следующий символ, т.е. в нашем случае 3. =)
ОтветитьУдалитьТеперь про программу.
В принципе, работает правильно, и вывод соответствует образцу. Но зачем же было так извращаться? Посмотрите на код Камиля, почему вы не стали так делать? =)
не понимаю зачем задавать b=150, а потом заменять на число введенное? удалил строку b=150, работает так-же
УдалитьИ не ясно 5 задание...
УдалитьНапишите программу которая считывает с клавиатуры 6 чисел, записанных через пробел. (1 2 64.3 0.624 25.07 43900) причем первые два числа считываются с помощью функции getchar.
Прописал "1 2" с помощью getchar(3 ячейки), остальные как я понял scanf. но функции не выполняются одновременно. Если все считывать getchar получается в 26 переменных.
И getchar не форматируется? Получается только так, с считыванием введенных чисел.
Удалить#include
int main(void)
{
int q,w,y;
float e,r,t;
scanf ("%d %d %f %f %f %d", &q,&w,&e,&r,&t,&y);
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9d",q);
printf("|%9.2f|\n",e);
printf("\t\t\t|%-9d",w);
printf("|%9.3f|\n",r);
printf("\t\t\t|%-9d",y);
printf("|%9.2f|\n",t);
return(0);
}
b=150; нужна только для того, чтобы показать, что до считывания в переменную там хранилось значение 150. Если бы считывание не сработало, мы бы увидели на экране 150.
УдалитьВ программе не использовали getchar. Посмотрите как сделали другие и разберитесь.
Вопрос к KaDeaT (2. Если в программе будет, после getchar сразу еще одна функция getchar, то она считает следующий символ, т.е. в нашем случае 3.)
ОтветитьУдалитьЭто потипу так , или иначе. (23345544654)
#include
int main()
{
int a,b;
a=getchar();
b=getchar();
putchar(a);
putchar(b);
printf("\n");
return(0);
}
то считывает первые два числа 23
Да. Именно так. А если например, вы введете 2 потом нажмете энтер, а потом 3, то у вас только 2 считается, а в другую переменную будет занесено значение int, соответствующее коду клавиши Enter, в таблице символов ASCII.
Удалить#include
ОтветитьУдалитьint main()
{
int a=1,b=2;
float c=64.3,d=0.624,e=25.07;
int f=439000;
printf("\t\t\t\t|---------|---------|\n");
printf("\t\t\t\t|%-9d|%9.2f|\n",a,c);
printf("\t\t\t\t|%-9d|%9.3f|\n",b,d);
printf("\t\t\t\t|%-9d|%9.2f|\n",f,e);
return(0);
}
Я вот только не понял где тут getchar использовать , или тут надо было сначало все цифры с компьютера ввести и потом таблицу?
Нет, не правильно.
УдалитьДа, вы все правильно поняли. Сначала надо ввести.=)
у меня сделано так
ОтветитьУдалить#include
int main(void)
{
int a,b,e;
float c,d,f;
a=1;
b=2;
c=64.3;
d=0.624;
e=439000;
f=25.07;
printf("\t\t\t|==========|==========|\n");
printf("\t\t\t|%-10i|\t %.2f|\n", a,c);
printf("\t\t\t|%-10i|\t %.3f|\n", b,d);
printf("\t\t\t|%-10i|\t %.2f|\n", e,f);
return(0);
}
это верно?
Нет. Нет ввода с клавиатуры.
УдалитьПодскажите, пожалуйста, я не могу понять escape последовательность \v – вертикальная табуляция. Если ее вставить в функцию printf в формат-строку, то никакого перемещения символов по вертикале не происходит, а только появляется значок “♂”. Что эта последовательность делает и зачем она нужна?
ОтветитьУдалитьВнимательность это очень хорошо. Я ждал этого вопроса. Когда-то я и сам им задавался, около года назад наверное.
УдалитьЭто не ваша ошибка. Такова уж реализация консоли в системе Windows. А вообще, такая последовательность смешает курсор на несколько строк вниз, стандартно вроде три.
Да и вообще она редко где используется сейчас.
УдалитьЗдрасьте. А у меня правильно?
ОтветитьУдалить#include
int main()
{
int a, b, f;
float c, d, e;
a=getchar();
b=getchar();
b=getchar();
c=getchar();
scanf("%f %f %f %i", &c, &d, &e, &f);
printf("Chisla: ");
putchar(a);
printf(", ");
putchar(b);
printf(", %1.1f, %1.3f, %1.2f, %d. \n", c, d, e, f);
printf(" \t \t \t |=========|=========| \n");
printf(" \t \t \t |%-9c|%-9.1f| \n", a, c);
printf(" \t \t \t |%-9c|%-9.3f| \n", b, d);
printf(" \t \t \t |%-9d|%-9.2f| \n", f, e);
printf(" \t \t \t |=========|=========| \n");
}
Добрый день.
УдалитьСкомпилируйте готовое решение, и сравните со своим. Если итоговая табличка точно такая же и расположена в нужном месте, значит у вас всё абсолютно верно. =)
А почему не получается файл.exe, который появляется в папке нашего проекта после компиляции программы, запустить на компьютере самому, запуская его через интерепретатор командной строки. Почему он только запускается через Визиал С++?
ОтветитьУдалитьСтранно, только что проверил у себя, на задании из первого занятия, все запустилось.
Удалить#include
ОтветитьУдалитьint main()
{
int q,w;
float a,b,c,d;
q=getchar();
w=getchar();
w=getchar();
scanf("%f%f%f%f",&a,&b,&c,&d);
printf("\t\t\t|#######|#######|\n\t\t\t|");
putchar(q);
printf("\t|%7.2f|\n\t\t\t|",a);
putchar(w);
printf("\t|%7.3f|\n\t\t\t|%-7.0f|%7.2f|\n",b,d,c);
return(0);
}
Добрый день Олег.
УдалитьСкомпилируйте готовое решение, и сравните со своим. Если итоговая табличка точно такая же и расположена в нужном месте, значит у вас всё абсолютно верно. =)
#include
ОтветитьУдалить//странно stdio.h не выводит тут-)
int main ()
{
int a,b,f;
float c,d,e;
printf("Введите данные через пробел: a=1, b=2, c=64.3, d=0.624, e=25.07, f=439000\n");
a = getchar ();
b = getchar ();
b = getchar ();
scanf ("%f%f%f%d", &c, &d, &e, &f);
printf ("\n\t\t\t|=======|=======|\n\t\t\t|");
putchar(a);
printf("\t|%7.2f|\n\t\t\t|", c);
putchar(b);
printf("\t|%7.3f|\n\t\t\t|%-7.0d|%7.2f|\n", d, f, e);
return 0;
}
Добрый день.
УдалитьСкомпилируйте готовое решение, и сравните со своим. Если итоговая табличка точно такая же и расположена в нужном месте, значит у вас всё абсолютно верно. =)
#include
ОтветитьУдалитьint main()
{
int a,b,c;
float d,e,f;
a=1;
b=2;
c=439000;
d=64.3;
e=0.624;
f=25.07;
printf("%2d%2d%2.1f%2.3f%2.2f%2d\n",a,b,d,e,f,c);
system("PAUSE");
return(0);
Начал вот так и понял что всё запорол
Посмотрите как решают другие. Разберитесь досконально что и зачем они пишут. А потом попробуйте повторить, без подглядывания. =)
УдалитьДолго мучился, но все же получилось ;)
ОтветитьУдалитьРешение задачи:
//Третий урок
#include
int main()
{
int a=getchar(),b=getchar(),c=getchar(),f;
float d,e,g;
scanf("%f %f %f %d", &d,&e,&g,&f);
printf("\t\t\t |=========|=========| \n");
printf("\t\t\t |%-9c|%9.2f| \n", a,d);
printf("\t\t\t |%-9c|%9.3f| \n", c,e);
printf("\t\t\t |%-9d|%9.2f| \n", f,g);
return(0);
}
Поздравляю. =)
Удалитьчто-то совсем не понял и не нашел описания - почему берется в строке int a=getchar(),b=getchar(),c=getchar(),f;
Удалитьf,оно как последнее введенное число?
Поясните, пожалуйста. Кирилл.
упс, заметил ввод числа F. Тогда вопрос - зачем в конце строки находится буква F??? Или это перевод страницы? int a=getchar(),b=getchar(),c=getchar(),f;
Удалитьэта строка строка объявления переменных. То есть мы говорим, что в нашей программе будут использоваться переменные a,b,c и f целочисленного типа. Кроме того мы сразу инициализируем (присваиваем им значения) переменные a,b и с.
УдалитьДанную строку мы могли бы заменить вот таким куском кода.
int a,b,c,f;
a=getchar();
b=getchar();
c=getchar();
Кажется я в прошлом уроке писал, что так можно делать.
Большое спасибо! Теперь понял :) А по программированию микропроцессоров и т.п. можете посоветовать что-нить? Это для дальнейшего развития. Буду очень Вам признателен! С наступающими Вас Новым Годом и Рождеством! Желаю, чтобы мечты сбывались!
УдалитьКирилл.
Читаю уроки, и прозреваю... Хорошие уроки правда тяжко даються, темному аборигену на пути истины.. Как то подлавливаю себя на мысли что читая 1-урок кое что не понял. И эврика!! Когда читаешь 2-ой начинаешь понимать 1-ый... И так далее. Сранно как то написанно ... Хотелось более полно и обширно...То перечитываю по 5 раз...или я один такой ? До меня как до утки на пятые сутки..
ОтветитьУдалитьС ув. Сергей
Добрый день, Сергей.
УдалитьЕсли вам вдруг что-то становится не понятно в уроке, задавайте вопрос в комментариях. Возможно этот вопрос возникнет еще у кого-то после вам, и он сможет найти на него ответ в комментариях. =)
Нельзя все сразу давать. В начальной школе, никто не говорит о замкнутости множества чисел относительно сложения. А лишь учат складывать числа. Я стараюсь писать только о том, что необходимо, не вдаваясь в мельчайшие подробности.
Такой вопрос, а для того чтоб писать html, php обязательно проходить эти основы на С???
УдалитьЕще один вопрос, на какое время рассчитан 1 урок, для полного усвоения?? Я как бы пытаюсь это все освоить, чисто для саморазвития. Работаю вахтой, и пк доступен только 15 дней, остальные 15 сижу со смарта. И каждый день вне пк, полностью перечитываю с самого начала уроки, прокручиваю все в голове. И 15 уже провожу на практике.Извините может это чуть глупо. На сколько рассчитан Ваш данный курс??
ОтветитьУдалитьЭто очень индивидуально. Главное, когда бываете за компьютером, побольше практикуйтесь.
УдалитьЛистинг3.3
ОтветитьУдалить#include
int main()
{
int a,b;
a=getchar();
b=150;
b=a;
putchar(b);
return(0);
}
MVS выдает ошибку.
1>c:\users\admin\documents\visual studio 2008\projects\листинг 3,4\листинг 3,4\листинг 3,4.cpp(11) : error C2065: c: необъявленный идентификатор
#include
ОтветитьУдалитьint main()
{
int a=1,b=2,f=439000;
double c=64.3,d=0.624,e=25.07;
printf("%d %d %-1.1f %-1.3f %-1.2f %d \n",a,b,c,d,e,f);
printf("\t\t\t|=========|=========|\n\t\t\t");
printf("|%-9d|%9.2f|\n\t\t\t|%-9d|%9.3f|\n\t\t\t|%-9d|%9.2f|\n",a,c,b,d,f,e);
return(0);
}
при всем старании не смог понять как Написать программу которая считывает с клавиатуры 6 чисел, записанных через пробел причем первые два числа считываются с помощью функции getchar.
И чтоб всё оставалось в таблице как в задании.
Автор подскажите немного.
Посмотрите готовое решение или решения других участников. Разберитесь, как это делается. Там не сложно.
УдалитьДва вечера разбирался,но всё таки задание выполнил сам даже и не знаю справлюсь ли дальше.Спасибо Вам.
ОтветитьУдалить#include
int main()
{
int a,b,c; //a=1,b=2,d=64.3,e=0.624,f=25.07,c=439000
float d,e,f;
a=getchar();
b=getchar();
b=getchar();
scanf("%f %f %f %d",&d,&e,&f,&c);
printf("\t\t\t:---------:---------:\n");
printf("\t\t\t|%-9c|%9.2f|\n",a,d);
printf("\t\t\t|%-9c|%9.3f|\n",b,e);
printf("\t\t\t|%-9i|%9.2f|\n",c,f);
return(0);
}
Сергей, если я правильно разобрался, то у Вас все верно :)
Удалитьтолько вот почему Вы "a" и "b" в итоге выводите как символы?
и при копировании кода сюда в комментарии название файла stdio.h берите в кавычки, ибо как Вы видите перенося его в < > он не отображается
Павел в коде что я написал в коменте не хватает
Удалить#include ,ну "a" и "b" -это имена переменных.
Павел, спасибо вам, что Вы помогаете мне. =)))
УдалитьСергей, замечание Павла по делу.
printf("\t\t\t|%-9c|%9.2f|\n",a,d);
вот здесь вы выводите a как символьную перменную, использую спецификатор %с. Для целых чисел нужно использовать %d.
Кадет, если использовать спецификатор %d, то в итоге в табличке вместо 1 и 2 появляются 49 и 50. кажется, это из-за функции гетчар. вы написали, что в таких случаях нужно использовать либо спецификатор %c, либо путчар. но можно ли в нашем случае использовать путчар? там же модификатором необходимо пользоваться
Удалитьизвиняюсь, если непонятно сформулировал или напутал. или и то, и другое
Привет, мне получилось вроди бы :
ОтветитьУдалить// урок 3
#include
int main (void)
{
int a , b, f=439000;
float c=64.3, d=0.624, e=25.07;
a=getchar();
printf("\t\t\t|=========|=========|\n");
printf ("\t\t\t|%-9c|%9.2f|\n",a,c);
b=getchar();
b=getchar();
printf("\t\t\t|%-9c|%9.3f|\n",b,d);
printf("\t\t\t|%-9i|%9.2f|\n",f,e);
return (0);
}
странный такой вопрос.
ОтветитьУдалить"На самом деле все просто. Когда функция getchar считывает символ входного потока, она возвращает значение int этого символа, равное коду символа в таблице кодов ASCII.
Каждому символу в этой таблицей ставится в соответствие его порядковый номер. Например, символу f соответствует номер 102, а цифре 1, номер 49. Т.е. если вы введете 1, то в переменную сохранится не 1, а 49. Таблицу кодов ASCII вы легко найдете в интернете. "
так вот в найденной мной таблице (первая ссылка в гугле на запрос "таблица символов ascii" - http://ascii.org.ru/) 1 соответствует 31. кто где не прав?)
сам разобрался) там же 16тиричная система)
Удалитьпы.сы. спасибо вам за уроки)
опять же появился вопрос) правда теперь так просто я не разберусь.
ОтветитьУдалитьпри использовании escape-последовательности \v мне показывает лишь символ ♂ а при \f соответственно ♀
что я делаю не так?
пример:
#include "stdio.h"
int main()
{
int a;
a=getchar();
printf("\f");
printf("a=%d",a);
return(0);
}
да тоже такая же фигня насчет слешов
УдалитьЭто не ваша беда. Это просто так обрабатывает эти последовательности вижуалка. Вы все делаете правильно. ))) Я уже где-то писал по этому поводу.
УдалитьДобрый вечер! Я после стандартного решения через printf решил подзаморочиться и реализовать через putchar. Вот что получилось
ОтветитьУдалить#include
int main()
{
int a,b,f;
float c,d,e;
char z='|';
printf("Vvedite 6 chisel cherez probel \n");
a=getchar();
b=getchar();
b=getchar();
scanf("%f %f %f %d", &c,&d,&e,&f);
printf("\t");
printf("\t");
printf("\t");
printf("\t");
printf("|---------|---------|\n");
printf("\t\t\t\t");
printf("|");
putchar(a);
printf("%9c%9.2f|\n", z,c);
printf("\t\t\t\t");
printf("|%-9c|%9.3f|\n", b,d);
printf("\t\t\t\t");
printf("|%-9d|%9.2f|\n", f,e);
return(0);
}
Будьте внимательны присваивая char значение! Я вместо одинарных ковычек пытался присвоить двойными и 20 минут не мог понять, почему не работает %)))
P.S. Спасибо Кадету за старания!
#include
ОтветитьУдалитьint main()
{
int a,b,f,z;
//a=1;
//b=2;
//f=439000;
a=getchar();
z=getchar();
b=getchar();
scanf("%d", &f);
float c,d,e;
//c=64.3;
//d=0.624;
//e=25.07;
scanf("%f %f %f", &c,&d,&e);
printf("\t\t\t\t|==================| \n", a);
printf("\t\t\t\t|%-8c| %8.1f| \n", a,c);
printf("\t\t\t\t|%-8c| %8.3f| \n", b,d);
printf("\t\t\t\t|%-8d| %8.2f| \n", f,e);
return(0);
}
В общем вот что получилось, в работе вроде похоже на то что нужно:
ОтветитьУдалить#include
int main()
{
int a,b,c; //a=1, b=2, c=439000
float d,e,f; //d=64.3, e=0.624, f=25.07
a=getchar();
b=getchar();
b=getchar();
scanf("%f%f%f%i", &d,&e,&f,&c);
printf("\t\t\t\t|========|========|\n");
printf("\t\t\t\t|%-8c|%8.2f|\n", a,d);
printf("\t\t\t\t|%-8c|%8.3f|\n", b,e);
printf("\t\t\t\t|%-8i|%8.2f|\n", c,f);
printf("\t\t\t\t|========|========|\n");
return(0);
}
здарсти я только начал и тут у меня не один из ваших примеров по getchar не получилось компилировать (смысле показывает пустую строку) почему так случается?
ОтветитьУдалитьМой вариант:
ОтветитьУдалить#include
int main()
{
int a,b,f;
float c,d,e;
a=getchar();
b=getchar();
b=getchar();
scanf("%f %f %f %d",&c,&d,&e,&f);
printf("%-24c|---------|---------|\n");
printf("%-24c|");
printf("%-9c|%9.2f|\n",a,c);
printf("%-24c|");
printf("%-9c|",b);
printf("%9.3f|\n",d);
printf("%-24c|");
printf("%-9d|",f);
printf("%9.2f|\n",e);
return(0);
}
Доброе время суток, очень очень понравиличь твои уроки=)
ОтветитьУдалитьПроверь, пожалуйста!
#include "stdio.h"
int main()
{
int a, b, f;
a=1;
b=2;
f=439000;
float c, d, e;
c=64.3;
d=0.624;
e=25.07;
printf ("%d %d %.2f %.3f %.2f %d \n",a,b,c,d,e,f);
printf ("\t\t\t|=========|=========| \t\t\t\n");
printf("\t\t\t|%-9d|%9.2f|\t\t\t\n\v\t\t\t|%-9d|%9.3f|\t\t\t\n\v\t\t\t|%-9d|%9.2f|\n", a,c,b,d,f,e);
return(0);
}
Спасибо за твои труды=))
#include
ОтветитьУдалитьint main()
{
int c,d;
c=10;
d=14;
float f,g;
f=2.1;
g=33.6;
printf("c=%-5d,\nd=%-5d\a\n",c,d);
printf("f=%2f,\ng=%2f \f",f,g);
printf("\v");
printf("\\,\n");
printf("c=%8d,\?");
return (0);
}
//Urok 3
ОтветитьУдалить#include
int main(void)
{ int a,b;
float c,d,y;
printf("Vash massiv a=1 b=2 c=64.3 d=0.624 y=25.07 x=439000 \n");
printf("\n vvedite a, b cherez probel \n");
a=getchar();
b=getchar();
b=getchar();
printf("vvedite c d y cherez probel \n");
scanf("%f %f %f",&c,&d,&y);
double x=439000;
printf("\n \n \n");
printf("\t \t \t |==========|==========| \n");
printf("\t \t \t |%-10c|%10.2f| \n",a,c);
printf("\t \t \t |%-10c|%10.3f| \n",b,d);
printf("\t \t \t |%-10f|%10.2f| \n",x,y);
printf("\n \n \n");
return(0);
}
//вторая программа
ОтветитьУдалить#include "stdio.h"
int main(void)
{
int a=1,b=2,f=439000;
float c=64.3,d=0.624,e=25.07;
printf("%d %d %d %f %f %f \n",a,b,f,c,d,e);
printf("\t\t\t");
printf(" |=========|=========| \n");
printf("\t\t\t");
printf(" |%-9d|%9.2f| \n",a,c);
printf("\t\t\t");
printf(" |%-9d|%9.3f| \n",b,d);
printf("\t\t\t");
printf(" |%-9d|%9.2f| \n",f,e);
return(0);
}
//вторая программа
ОтветитьУдалить#include "stdio.h"
int main(void)
{
int a=1,b=2,f=439000;
float c=64.3,d=0.624,e=25.07;
printf("%d %d %d %f %f %f \n",a,b,f,c,d,e);
printf("\t\t\t|=========|=========| \n");
printf("\t\t\t|%-9d|%9.2f| \n",a,c);
printf("\t\t\t|%-9d|%9.3f| \n",b,d);
printf("\t\t\t|%-9d|%9.2f| \n",f,e);
return(0);
}
#include
ОтветитьУдалитьint main(void)
{
int a,b,f;
a=1;
b=2;
f=439000;
double c,d,e;
c=64.3;
d=0.624;
e=25.07;
printf("%-2d%-2d%-5.1f%-6.3f%-6.2f%d\n",a,b,c,d,e,f);
printf("\t\t\t|==========|==========|\n");
printf("\t\t\t|%-10d|%10.2f|\n",a,c);
printf("\t\t\t|%-10d|%10.3f|\n",b,d);
printf("\t\t\t|%-10d|%10.2f|\n",f,e);
}
Очень понравились уроки!ошибок не находит,но не компилирует,что это может быть?
ОтветитьУдалить// начало
ОтветитьУдалить#include
int main ()
{
int a,b,c;
char j;
float d,e,f;
a=getchar();
j=getchar();
b=getchar();
j=getchar();
// использовал "j" в качестве пробела
scanf("%f",&d);
j=getchar();
scanf("%f",&e);
j=getchar();
scanf("%f",&f);
j=getchar();
scanf("%d",&c);
printf("%c%c%c%c%0.1f%c%0.3f%c%0.2f%c%d\n",a,j,b,j,d,j,e,j,f,j,c);
printf("\t\t\t|========|========|\n");
printf("\t\t\t|%-8c|%8.2f|\n",a,d);
printf("\t\t\t|%-8c|%8.3f|\n",b,e);
printf("\t\t\t|%-8d|%8.2f|\n",c,f);
return(0);
}
Приблизил задание 3 максимально к идеалу, с вводом 6 чисел через пробел. Первые 2 через getchar.
PS. Автору огромное спасибо за старания!
Здравствуйте
ОтветитьУдалитькто нибудь подскажите. не могу вывести на печать число 439000.
прочитал в предыдущих коментариях что в функции scanf нужно ввести пробел. Вводил во всех доступных местах еффект тот же только цифры иногда разные. 4 знака печатает правельно а если ставишь 5 и более то получается лабуда.
Где конкретно надо ставить пробел
scanf("%d",&c);
Добрый день.
ОтветитьУдалитьПокажите пожалуйста весь код.
Здравствуйте KaDeaT
ОтветитьУдалитьБлагодарю за быстрый ответ.
Когда у меня не получилось число 439000, я тупо переписал Вашу в надежде обнаружить свою ошибку. Результат был тот же
#include
int main()}
int a,b,f;
int c,d,e;
a=getchar();
b=getchar();
b=getchar();
scanf("%f",&c);
scanf("%f",&d);
scanf("%f",&e);
scanf("%d",&f);
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9c|%9.2f|",a,c);
printf("\t\t\t|-%9c|%9.3f|",b,d);
printf("\t\t\t|-%9d|%9.2f|",f,e);
return(0);
}
Получается
1 2 64.3 0.624 25.07 439000
|=========|=========|
| 1 | 64.30|
| 2 | 0.624|
|-19752 | 25.07|
Если число в четыре знака 4390 То распечатывает правельно.
Заранее благодарен
Олег
Извените KaDeat
ОтветитьУдалитьНапечатал с ошибкой в printf пропустил \n
В программе у меня этой ошибки нет
Олег
Добрый вечер.
УдалитьЯ разобрался. Вашей ошибки тут нет. Вы, стоит полагать, используете в качестве среды программирования Borland C++ 3.1, да?
Вот в чем дело. В прошлом уроке я уже писал, что диапазон значений различных типов данных будет разным, в зависимости от компилятора.
Так вот, для хранения переменной типа int компилятор Borland выделяет 2 байта, а вижуал студия 4 байта.
2 байтами можно закодировать 2^16 = 65536 цифр. Так как у нас есть еще и отрицательные числа, то делим пополам и получаем 32 тысячи с копейками. Т.е. если вы попытаетесь больше этого числа сохранить в целую переменную то, у вас туда ничего не запишется, а будет мусор. Вы уже в этом убедились.
Вот такие вот дела. =))
Спасибо вам за бдительность, я внесу изменения в домашнее задание, чтобы его можно было бы выполнить и на вашем компиляторе.
#include;
ОтветитьУдалитьint main()
{
int a,b,k;
float c,d,m;
a=getchar();
b=getchar();
b=getchar();
scanf(" %f %f %f %d",&c,&d,&m,&k);
printf("\t\t\t|*********|*********|\n");
printf("\t\t\t|%-9c|%9.2f|\n\t\t\t|%-9c|%9.3f|\n\t\t\t|%-9d|%9.2f|\n",a,c,b,d,k,m);
return(0);
}
Спасибо за уроки! у меня получилось))) написала это за полчаса (см.выше).
УдалитьВ строке scanf перед первым значком % - 4 пробела.
Удалитьздравствуйте.
ОтветитьУдалить#include
int main()
{
int a,b,f;
float c,d,e;
a=getchar();
b=getchar();
b=getchar();
scanf("%d %f %f %f",&f,&c,&d,&e);
printf("\t\t\t|--------||--------|\n");
printf("\t\t\t|%-8d||%8.3f|\n",a,c);
printf("\t\t\t|%-8d||%8.3f|\n",b,e);
printf("\t\t\t|%-8.4d||%8.3f|\n",f,d);
return(0);
}
вот мой вариант.всё вроде работает как надо тока вместо 1 и2 в таблице появляется 49 и 50.почему?
Ответ написан в самом конце урока. Прочитайте внимательно. )))
УдалитьНе работает ни один листинг! Пишет ошибка в построении, но я все копирую как написанно у вас.
ОтветитьУдалитьОчень странно. У всех же работает.
УдалитьОпишите подробнее, что именно не работает? Что выводит компилятор?
спасибо.
ОтветитьУдалитьЗдравствуйте!
ОтветитьУдалитьПроверьте, пожалуйста!
#include
int main ()
{
int a, b, c=439000;
float d=64.3, e=0.624, f=25.07;
a=getchar();
b=getchar();
b=getchar();
printf("%c %c %2.1f %1.3f %2.2f %d\n", a,b,d,e,f,c);
printf("|========|========|\n");
printf("|%-8c|%8.1f|\n", a,d);
printf("|%-8c|%8.3f|\n", b,e);
printf("|%-8d|%8.2f|\n", c,f);
return(0);
}
Здравствуйте!
ОтветитьУдалить#include
int main()
{
char a,b;
float c,d,e,f;
printf("vvedite shest chisel cherez probel\n");
a=getchar();
b=getchar();
b=getchar();
scanf("%f%f%f%f", &c,&d,&e,&f);
printf("\t\t\t|---------|---------|\n\t\t\t|%-9c|%9.2f|\n\t\t\t|%-9c|%9.3f|\n\t\t\t|%-9.0f|%9.2f|\n", a,c,b,d,f,e);
return(0);
}
Работает)))
Добрый день. Во первых, благодарствую за ваши уроки, раньше думал, что программирование это не мое, а теперь, хоть и с трудом, начинаю хоть что-то понимать. Два дня промучался с этой задачей, но всё-таки решил:
ОтветитьУдалить#include "stdio.h"
int main()
{
int a,b,c; /*a=1, b=2, c=439000*/;
float d,e,f;/*d=64.3, e=0.624, f=25.07*/;
char t; /*t - пробел*/
a=getchar();
t=getchar();
b=getchar();
scanf("%f%f%f%d",&d,&e,&f,&c);
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|");
putchar(a);
printf("\t%2c|%9.2f|\n",t,d);
printf("\t\t\t|");
putchar(b);
printf("\t%2c|%9.3f|\n",t,e);
printf("\t\t\t|%-9d|%9.2f|\n",c,f);
return (0);
}
Не слишком много всего понаписал? По-моему можно даже было не вводить переменную, считывающую пробел, а просто написать
printf("-9%c",a); вместо
putchar(a);
printf("\t%2c",t); ,но я не ищу лёгких путей:). Во всяком случае решил сам, без подсказок.
В любом случае работает верно. )))
Удалить#include
ОтветитьУдалитьint main()
{
int a,b,c;
a=1;
b=2;
c=439000;
double d,e,f;
d=64.3;
e=0.624;
f=25.07;
printf("%d,%d,%d,%f,%f,%f",a,b,c,d,e,f);
printf("\t\t\t\t\t\t\t");
printf("|=======|==========|\n");
printf("\t|%d\t|%f\n\t|%d\t|%f\n\t|%d\t|%f\n",a,d,b,e,c,f);
return(0);
}
Нет, не считается. =)
Удалить1. данные должен вводить пользователь с клавиатуры.
2. Табличка не такая, какая требовалось. =))
#include
ОтветитьУдалитьint main()
{
int a,b,f;
a=getchar();
b=getchar();
b=getchar();
f=439000;
float c=64.3;
double d=0.624,e=25.07;
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9c|%9.2f|\n",a,c);
printf("\t\t\t|%-9c|%9.4f|\n",b,d);
printf("\t\t\t|%-9d|%9.2f|\n",f,e);
return(0);
}
Критикуйте)))
Легко! Все данные должны быть введены с клавиатуры. Исправляйте! =)))
Удалить#include "stdio.h"
ОтветитьУдалить#include "locale.h"
#include "conio.h"
int a, b, f;
float c, d, e;
int main ()
{
setlocale (LC_ALL, "");
printf ("Введите 2 натyральных числа, 3 дробных и 1 целое:\n");
a=getchar();
b=getchar();
b=getchar();
scanf (" %f %f %f %d", &c, &d, &e, &f);
printf ("\t\t\t|=========|=========|\n");
printf ("\t\t\t|%-9c|%9.2f|\n",a,c);
printf ("\t\t\t|%-9c|%9.3f|\n",b,d);
printf ("\t\t\t|%-9d|%9.2f|\n",f,e);
getch()
}
Добрый день, KaDeaT.
Возникла такая проблема. Когда пытаешься включить русские символы, переменные f, е и d портятся и на их месте в таблице оказываются огромные отрицательные числа. Если setlocale закомментировать (можно и библиотеку locale.h за ненадобностью), то проблема исчезает сама собой. С чем это может быть связано?
Добрый день.
УдалитьЕсли честно, ума не приложу, почему так происходит. Я попробовал выполнить ваш код у себя на компьютере - всё нормально выводится в обоих случаях. Обычно такое бывает, если мы ничего не сохраняем в переменную. т.е. там остается мусор и мы его выводим на экран.
Ладно, в конце концов это не так важно. Можно обойтись и латиницей.
ОтветитьУдалитьОгромное спасибо за уроки! Все четко и понятно. Первые 4 занятия прошел за 4 часа.
Здравствуйте. Моя программа имеет такой вид. Но у меня есть подозрения что написана она неправильно. Если я прав прошу вас указать на мои ошибки. За ранее благодарен.
ОтветитьУдалить#include
int main()
{
int a=getchar();
int b=getchar();
char c='=';
int d=getchar();
int e=getchar();
float f=getchar();
f=64,30;
int g=getchar();
float h=getchar();
h=0.624;
int i=getchar();
float j=getchar();
j=25.07;
int k=getchar();
int l=getchar();
l=439000;
printf("%26c|%c%c%c%c%c%c%c%c%c|%c%c%c%c%c%c%c%c%c|\n",b,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c);
printf("%26c|%-9c|%9.2f|\n",b,a,f);
printf("%26c|%-9c|%9.3f|\n",b,d,h);
printf("%26c|%-9i|%9.2f|\n",b,l,j);
return(0);
}
Мне кажется что в этом виде программа написана правильно.
ОтветитьУдалить#include
int main()
{
int a,b,c,e,g,i,l;
char d='=';
a=getchar();
b=getchar();
c=getchar();
e=getchar();
float f,h,j;
scanf("%f",&f);
g=getchar();
scanf("%f",&h);
i=getchar();
scanf("%f",&j);
scanf("%i",&l);
printf("%26c|%c%c%c%c%c%c%c%c%c|%c%c%c%c%c%c%c%c%c|\n",b,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d);
printf("%26c|%-9c|%9.2f|\n",b,a,f);
printf("%26c|%-9c|%9.3f|\n",b,c,h);
printf("%26c|%-9i|%9.2f|\n",b,l,j);
return(0);
}
Своеобразный у вас способ вывести равно на экран.)))
Удалить#include
ОтветитьУдалитьint main(void)
{
int a,b;
float d,e,f,c;
char t;
a=getchar();
b=getchar();
b=getchar();
scanf("%c%f%c%f%c%f%c%f",&t,&d,&t,&e,&t,&f,&t,&c);
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9c|%9.2f|\n",a,d);
printf("\t\t\t|%-9c|%9.3f|\n",b,e);
printf("\t\t\t|%-9.0f|%9.2f|\n",c,f);
return(0);
}
Еще хотел узнать, когда я запускаю скомпилированную программу командная строка запускается выдает какой-либо результат и сразу закрывается (то есть нет надписи "для продолжения нажмите любую клавишу"). Из за этого мне пришлось использовать точку останова. Если кто-нить в курсе подскажите что делать.
Посмотрите ответ на этот вопрос в F.A.Q. )))
УдалитьУ меня получилось как то так:
ОтветитьУдалить// урок 2
#include
int main()
{
int a=1 , b=2 , f=439000;
double c=64.3 , d=0.624 , e=25.07;
printf("1 2 64.3 0.624 25.07 439000\n");
printf("\t\t\t |=========|=========| \t\t\t\n");
printf("\t\t\t |%-9.0i| %8.2f| \t\t\t\n", a,c);
printf("\t\t\t |%-9.0i| %8.3f| \t\t\t\n", b,d);
printf("\t\t\t |%-9.0i| %8.2f| \t\t\t\n", f,e);
return(0);
}
Извиняюсь не внимательно прочитал задание вот:
ОтветитьУдалить// загаловок 4
#include
int main()
{
int a,b,c,f;
a=getchar();
b=getchar();
c=getchar();
float d,e,g;
scanf("%f %f %f %d", &d,&e,&g,&f);
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9c|%9.2f|\n", a,d);
printf("\t\t\t|%-9c|%9.3f|\n", c,e);
printf("\t\t\t|%-9d|%9.2f|\n", f,g);
return(0);
}
Если компилируется и выводится так же как на рисунке, то значит все правильно. ))) Код хороший. )
Удалить#include
ОтветитьУдалить#include
int main()
{printf("Vvedite chisla cherez probel\n");
int a,b,f;
float c,d,i;
a=getchar();
b=getchar();
b=getchar();
scanf("%f %f %f %d",&c,&d,&i,&f);
printf("\t\t\t |==============|==============|\n");
printf("\t\t\t |");putchar(a);printf("\t\t|");printf("\t%7.1f|\n",c);
printf("\t\t\t |");putchar(b);printf("\t\t|");printf("\t%7.3f|\n",d);
printf("\t\t\t |%-6d\t|\t%7.2f|\n",f,i);
printf("\t\t\t |==============|==============|\n");
system("pause");
return(0);
}
можно и так, но по моему это не оправданные растраты. Мне такое написание программы не понравилось бы. )
УдалитьДобрый вечер!
ОтветитьУдалитьВот мое решение:
#include
int main()
{
int a,b,f;
float c,d,e;
a=getchar();
b=getchar();
b=getchar();
scanf("%f %f %f %d",&c,&d,&e,&f);
printf("\t\t\t|---------|---------|\n");
printf("\t\t\t|%-9c|%9.2f|\n",a,c);
printf("\t\t\t|%-9c|%9.3f|\n",b,d);
printf("\t\t\t|%-9d|%9.2f|\n",f,e);
return(0);
}
Спасибо за уроки!
Пожалуйста. )))
УдалитьЕсли компилируется и выводится так же как на рисунке, то значит все правильно. ))) Код хороший. )
Вот так должно быть в оригинале!!!
ОтветитьУдалить#include
int main()
{
int a,b,c;
float d,i,f;
a=getchar();
b=getchar();
b=getchar();
scanf("%f %f %f %d",&d,&i,&f,&c);
printf("\t\t\t\t|=========|=========|\n");
printf("\t\t\t\t|%-9c|%9.2f|\n",a,d);
printf("\t\t\t\t|%-9c|%9.3f|\n",b,i);
printf("\t\t\t\t|%-9d|%9.2f|\n",c,f);
}
Если компилируется и выводится так же как на рисунке, то значит все правильно. ))) Код хороший. )
УдалитьУважаемый автор. У меня странная ошибка выскакивает..
ОтветитьУдалитьТестировал эту команду -
a=getchar();
b=getchar();
b=getchar();
Полностью код выглядел так -
#include
int main()
{
int a,b;
a=getchar();
b=getchar();
b=getchar();
b=150;
b=a;
putchar(b);
return(0);
Компилировал и при наборе букв и цифр С++ выдавал ошибку : Debug Error! Run-Time Check Failure #3 - The variable `c` is being used without being initialized. (Press Retry to debug the application).
Не знаю что за ошибки и из-за нее не могу продвинуться дальше по уроку... Мне необходимо вникнуть в каждое слово и проверить каждую команду.. но тут застопорился. Поможете?
такая-же фигня, что это может быть?
УдалитьЭто, наверное из-за того, что вы не создаете новый проект для каждой задачи. У вас в коде вовсе нет переменной c, а компилятор ругается на неё.
Удалить#include
ОтветитьУдалитьint main()
{
int a,b,f;
float c,d,e;
a=getchar();
b=getchar();
b=getchar();
scanf("%f %f %f %d", &c,&d,&e,&f);
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9c|%-9.1f|\n", a,c);
printf("\t\t\t|%-9c|%-9.3f|\n", b,d);
printf("\t\t\t|%-9d|%-9.2f|\n", f,e);
return(0);
}
#include
ОтветитьУдалитьint main(void)
{
int a,b,c;
float d,e,f;
a=getchar();
b=getchar();
b=getchar();
scanf("%f %f %f %d", &d, &e, &f, &c);
printf("\t\t\t:=========:=========:\n");
printf("\t\t\t:%-9c:%9.2f:\n",a ,d);
printf("\t\t\t:%-9c:%9.3f:\n",b,e);
printf("\t\t\t:%-9d:%9.2f:\n",c,f);
return(0);
}
Как то громоздко вышло...
ОтветитьУдалить#include
int main()
{
int a1=1,a2=2,a6=439000;
int b1,b2,q;
float a3=64.3,a4=0.624,a5=25.07;
float b3,b4,b5;
/*можно было так вместо ниженаписанного
printf("Vvedite ukazannie chisla cherez probel ili lybie chisla:\n");
printf("1 2 64.3 0.624 25.07 439000\n");*/
printf("Vvedite ukazannie chisla cherez probe:l\n");
printf("%-d%2d%5.1f%6.3f%6.2f%7d\n",a1,a2,a3,a4,a5,a6);
scanf("%d%d%f%f%f%d",&b1,&b2,&b3,&b4,&b5,&q);
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9d|%9.2f|\n",b1,b3);
printf("\t\t\t|%-9d|%9.3f|\n",b2,b4);
printf("\t\t\t|%-9d|%9.2f|\n",q,b5);
return 0;
}
Более упрощенная версия + getchar
ОтветитьУдалить#include
int main(void)
{
int a,b,c;
float d,e,f;
printf("Vvedite 6 chisel po usloviu:\n");
a=getchar();
b=getchar();
c=a+b;
printf("%c%c%d",a,b,c);
}
А вот полная версия(для тех кто не знает условия)
#include
int main()
{
int a1=1,a2=2,a6=439000;
int b1,b2,q;
float a3=64.3,a4=0.624,a5=25.07;
float b3,b4,b5;
/*можно было так вместо ниженаписанного
printf("Vvedite ukazannie chisla cherez probel ili lybie chisla:\n");
printf("1 2 64.3 0.624 25.07 439000\n");*/
printf("Vvedite ukazannie chisla cherez probe:l\n");
printf("%-d%2d%5.1f%6.3f%6.2f%7d\n",a1,a2,a3,a4,a5,a6);
b1=getchar();
b2=getchar();
b2=getchar();
scanf("%f%f%f%d",&b3,&b4,&b5,&q);
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9c|%9.2f|\n",b1,b3);
printf("\t\t\t|%-9c|%9.3f|\n",b2,b4);
printf("\t\t\t|%-9d|%9.2f|\n",q,b5);
return 0;
}
Упрощенная форма не та)))Вот...
ОтветитьУдалить#include
int main(void)
{
int a,b,c;
float d,e,f;
printf("Vvedite lubie chisel:\n");
a=getchar();
b=getchar();
b=getchar();
scanf("%f %f %f %d", &d, &e, &f, &c);
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9c:%9.2f|\n",a ,d);
printf("\t\t\t|%-9c:%9.3f|\n",b,e);
printf("\t\t\t|%-9d:%9.2f|\n",c,f);
return 0;
}
вот это не плохо, остальное мне не нравится. ))
Удалить"#include stdio.h"
ОтветитьУдалитьint main()
{
int a,b,c; //1,2,6
float d,e,f; //3,4,5
scanf("%d %d %f %f %f %d", &a, &b, &d, &e, &f, &c);
printf("\t\t\t|---------|-----------|\n");
printf("\t\t\t|%-8d |",a);
printf("\t%6.2f|\n",d);
printf("\t\t\t|%-8d |",b);
printf("\t%6.3f|\n",e);
printf("\t\t\t|%-8d |",c);
printf("\t%6.2f|\n",f);
return(0);
}
Не правильно. Первый два числа, согласно заданию, нужно было считать использую функцию getchar().
УдалитьЗдраствуйте...У меня какая то ерунда...
ОтветитьУдалитьсама прога -
int main ()
{
char a, b;
float c,d,e;
int f;
printf("vvedite 6 chisel cherez probel \n")
a=getchar();
b=getchar();
b=getchar();
scanf("%f %f %f %d" ,&c,&d,&e,&f);
printf("\t\t:---------:---------:\n");
printf("\t\t:%-9c:%9.2f:\n",a,c);
printf("\t\t:%-9c:%9.3f:\n",b,d);
printf("\t\t:%-9d:%9.2f:\n",f,e);
printf("\t\t:---------:---------:\n");
return(0);
}
всё как бы работает, но вместо 439000 выводит -19752, если вводить 4390 то выводит 4390...вопрос - в чём ошибка? или у меня компилятор глючит?
кстати,после выполнения он не пишет -Для продолжения нажмите любую клавишу...
Добрый день.
УдалитьУ вас я так понимаю Borland C++. Тут мы уже сталкивались с подобной проблемой. Т.е.и не проблема это вовсе. Ответ здесь http://youngcoder.blogspot.ru/2011/10/zanjatie-3-vvod-i-vyvod-dannyh-v-jazyke.html?showComment=1364836833303#c6748978637107922045
Очень хорошо, что вы мне напомнили, а то я так и не изменил условие. )
УдалитьСпасиб...А то, что не пишет - "Для продолжения нажмите любую клавишу..."
Удалитьэто криво Borland C++ стоит? или что?
Нет, просто в борланде это и не предусмотрено. Если вас беспокоит то, что экран сразу исчезает прочитайте FAQ там есть несколько способов для решения этой неприятности. ))
Удалитьспасибо
УдалитьУвидел в одном из комментов объединение строк, решил довести до логического завершения, вроде работает.
ОтветитьУдалить#include "stdio.h"
int main()
{
int c;
char a,b;
float d,e,f;
a=getchar();
b=getchar();
b=getchar();
scanf("%f %f %f %d",&d,&e,&f,&c);
printf("\n\t\t\t\:---------:---------:\n\t\t\t:%-9c:%9.2f:\n\t\t\t:%-9c:%9.3f:\n\t\t\t:%-9d:%9.2f:\n", a,d,b,e,c,f);
return(0);
}
Это лишнее. Такой код сложнее воспринимать. ))
Удалить#include
ОтветитьУдалитьint main()
{
int a,b,с;
a=getchar();
с=getchar();
b=150;
b=a;
putchar(b);
printf("\n");
putchar(c);
return(0);
}
всё правильно, а не работает пишет:1>67679070.cpp
1>c:\documents and settings\user1\мои документы\visual studio 2008\projects\43657\43657\67679070.cpp(11) : error C2065: c: необъявленный идентификатор
1>Журнал построения был сохранен в "file://c:\Documents and Settings\USER1\Мои документы\Visual Studio 2008\Projects\43657\43657\Debug\BuildLog.htm"
1>43657 - ошибок 1, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
в чём проблема?
Какой-то из символов "c"
Удалитьздесь
int a,b,с;
здесь
с=getchar();
или тут
putchar(c);
набран русскими буквами. )) Удалите и напишите его на английском, проблема исчезнет.)))
#include
ОтветитьУдалитьint main()
{
int a, b, f;
float c, d, e;
a=getchar();
b=getchar();
b=getchar();
scanf("%f %f %f %d", &c,&d,&e,&f);
printf("\t");
printf("\t");
printf("|=========|=========|\n");
printf("\t");
printf("\t");
printf("|%-9c|%9.2f|\n", a, c);
printf("\t");
printf("\t");
printf("|%-9c|%9.3f|\n", b, d);
printf("\t");
printf("\t");
printf("|%-9d|%9.2f|\n", f, e);
return(0);
}
Если компилируется и выводится так же как на рисунке, то значит все правильно. ))) Код мне на нравится. Табуляцию можно было бы занести в printf'ы, в которых вы выводите строки. )))
УдалитьДоброе время суток! У меня проблема, листинги на этой странице если и компилируются то не работают.. до этого проблем небыло..и с другими кодами вроде все норм.. в коментариях есть похожие проблемы но мне не помогает... не могу двигаться дальше... хелп!!!!
ОтветитьУдалитьДобрый день.Попробуйте набирать код вручную, а не копировать. =)) Я думаю дело в русских буквах. )))
Удалить#include
ОтветитьУдалитьint main()
{
int a,b,f;
float c,e,d;
a=getchar();
b=getchar();
b=getchar();
scanf("%f %f %f %d",&c,&d,&e,&f);
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9c|%9.2f|\n",a,c);
printf("\t\t\t|%-9c|%9.3f|\n",b,d);
printf("\t\t\t|%-9d|%9.2f|\n",f,e);
return(0);
}
Хорошо.
Удалитьinclude
ОтветитьУдалитьint main()
{
int a,b,k;
float c,d,e;
a=getchar();
b=getchar();
b=getchar();
scanf("%f%f%f%d",&c,&d,&e,&k);
printf("\t\t\t|=========|=========|\n\t\t\t|%-9c|%9.2f|\n\t\t\t|%-9c|%9.3f|\n\t\t\t|%-9i|%9.3f|\n",a,c,b,d,k,e);
return(0);
}
Ответ аналогичный этому.
УдалитьПереоптимизирование. ))
http://youngcoder.blogspot.com/2011/10/zanjatie-3-vvod-i-vyvod-dannyh-v-jazyke.html?showComment=1384682420037#c4638459835906307096
Я реально набираю в ручную. и проект новый ... вроде все как надо... другие коды работают...((((((
ОтветитьУдалитьТогда подробнее. Что за ошибку выдает вам компилятор?
Удалитьи не работают только листинги 3,3 и 3,4 ???????
ОтветитьУдалитьВот мой код:
ОтветитьУдалить#include "stdio.h"
int main()
{
int a, b, f ;
float c, d, e;
a=getchar();
b=getchar();
b=getchar();
scanf ("%f f% %f %i",&c, &d, &e, &f);
putchar (a);
printf (", ");
putchar (b);
printf (", %1.1f, %1.3f, %1.2f, %d.\n", c, d, e, f);
printf ("\t\t\t|=========|=========|\n");
printf ("\t\t\t|%-9c|%9.1f| \n", a, c);
printf ("\t\t\t|%-9c|%9.3f| \n", b, d);
printf ("\t\t\t|%-9d|%9.2f| \n", f, e);
printf ("\t\t\t|=========|=========|\n");
return (0);
}
Можете мне показать где ошибка, когда я выполняю программу у меня выходит вместо чисел "0.624 25.07 43900" получаются вот такие числа " -107374176.000, -107374176.00, -858993460". Подскажите пожалуйста почему.
вот здесь
Удалитьscanf ("%f f% %f %i",&c, &d, &e, &f);
в перепутали для второй переменной местами % и f
Спасибо!! Глуповатая ошибка )
Удалить#include ""
ОтветитьУдалить#include ""
int main ()
{ setlocale(LC_ALL, "");
printf ("Введите: 1 2...");
int a, b, f;
a=getchar ();
b=getchar ();
b=getchar ();
float c, d, e;
scanf ("%f %f %f %i", &c, &d, &e, &f);
printf ("\t\t\t|=========|=========|\n");
printf ("\t\t\t|%-9c|%9.2f|\n", a, c);
printf ("\t\t\t|%-9c|%9.3f|\n", b, d);
printf ("\t\t\t|%-9i|%9.2f|\n", f, e);
return (0);
}
Объясните, пожалуйста, почему мешает "setlocale" ?
Если его убрать то все вещественные числа - нормальные, а с ним ерунда какая-то.
И ещё если первую переменную выводить на экран в виде "putchar" то невозможно угадать сколько ставить пробелов (в виде putchar (y) и табуляций в виде \t) они наверное друг с другом конфликтуют? :
#include ""
#include ""
int main ()
{
printf ("Введите: 1 2...");
int a, b, y, f;
a=getchar ();
y=getchar ();
b=getchar ();
float c, d, e;
scanf ("%f %f %f %i", &c, &d, &e, &f);
printf ("\t\t\t|=========|=========|\n");
printf ("\t\t\t|");
putchar (a);
putchar (y);
putchar (y);
putchar (y);
putchar (y);
printf ("\t|%9.2f|\n", c);
printf ("\t\t\t|%-9c|%9.3f|\n", b, d);
printf ("\t\t\t|%-9i|%9.2f|\n", f, e);
return (0);
}
Спасибо за уроки. Всё разжёвано до каждой запятой.
Не стоит делать так:
Удалить"
putchar (a);
putchar (y);
putchar (y);
putchar (y);
putchar (y);
"
Скажите, какая именно фигня происходит с locale ? Все должно работать хорошо, я проверил у себя все вроде бы нормально.
Пожалуйста, я стараюсь для вас.)
УдалитьВот такакя ерунда. А стоит, только, в этой-же программе, удалить « setlocale (LC_ALL, “”); » и всё впорядке.
|=========|=========|
|1 | 64.00|
|2 |-107374176.000|
|-858993460|-107374176.00|
Microsoft Visual C++ 2008 Express Edition
Проблема в разделителе. =))
УдалитьА что вы используете в качестве разделителя, когда пишете дробную чатсь? Точку или запятую? Кажется в этом проблема.
Да, точно. Получается если писать setlocale, то нужно ставить запятую, а если не писать то точку.
УдалитьВыходит setlocale как-бы приспосабливает программу под раскладку клавиатуры. И говорит ах ты Русский, значит пиши через запятую, как на Русской раскладке.
Поначалу не понял 5 задание, сидел думал, перечитал некоторые фрагменты урока, оказалось все проще простого.
ОтветитьУдалитьСделал идеально, я так считаю.
// урок 3 зад 5
#include
int main()
{
int a=1,b=2,c=439000;
float t=64.3,y=0.624,u=25.07;
printf("%-2i%-2i%-5.1f%-6.3f%-6.2f%-2i \n",a,b,t,y,u,c);
printf("\t\t\t\t|=========|=========|\n");
printf("\t\t\t\t|%-9i|%-9.2f|\n",a,t);
printf("\t\t\t\t|%-9i|%-9.3f|\n",b,y);
printf("\t\t\t\t|%-9i|%-9.2f|\n",c,u);
return (0);
}
Сделали все неправильно.
УдалитьЧисла нужно вводить с клавиатуры. =)))
#include
ОтветитьУдалитьint main()
{
int a,b,f;
float c,d,e;
a=getchar();
b=getchar();
b=getchar();
scanf("%f %f %f %d", &c, &d, &e, &f);
printf("\t\t\t|=======|=======|\n");
printf("\t\t\t|%-7c|%7.2f|\n", a, c);
printf("\t\t\t|%-7c|%7.3f|\n", b, d);
printf("\t\t\t|%-7d|%7.2f|\n", f, e);
return(0);
}
Вместо последнего числа f(439000) выводит "-19752". Почему так? Где-то ошибка? Спасибо за урок.
Я так понимаю, вы используете borland C++. Выше уже обращали внимание на эту проблему. Я даже уже исправил это задание, а картинку забыл поменять. Там нужно выводить число 43900.
УдалитьСтранно, у меня ваша программа работает нормально.
ОтветитьУдалитьДоброго дня суток.
ОтветитьУдалитьПростите если вопрос Вам покажется глупым, может я не внимательно все прочитал и не разобрался, но, объясните пожалуйста зачем в лястинге 3.3 в 6-й строке b=150??? Не как не уясню к чему и какова роль этой строки???
За ранее спасибо
Здравствуйте Денис.
УдалитьВ принципе, она там только лишь для того, чтобы показать, что значение изменилось. В программе мы сохранили 150, а потом считали туда новое значение. И вывели его на экран. Если бы, вдруг, по необъяснимым причинам функция getchar не сработала бы, то при выводе на экран переменной b мы бы увидели 150. )
вот что у меня получилось
ОтветитьУдалить#include
int main()
{
int a,b,f;
float c,d,e;
a=getchar();
b=getchar();
b=getchar();
scanf("%f %f %f %d",&c,&d,&e,&f);
printf("\t\t\t\t|=========|=========|\n");
printf("\t\t\t\t|%-9c|%9.2f|\n",a,c);
printf("\t\t\t\t|%-9c|%9.3f|\n",b,d);
printf("\t\t\t\t|%-9d|%9.2f|\n",f,e);
return(0);
}
вопрос такой:
можно ли
b=getchar();
b=getchar();
как то записать в одну строчку?
Да, можно. Почитайте в 20 уроке про оператор последовательного выполнения. )
УдалитьПроверьте пожалуйста 3-е задание:
ОтветитьУдалить#include
int main
{
int a,b,c;
float d,e,f;
a=getchar;
b=getchar;
b=getchar;
scanf("%f %f %f %d",&d,&e,&f,&c);
print("\t\t\t|=======|=========|\n");
putchar(a);
printf("\t\t\t|%-9d|%9.2f|\n",a,d);
putchar(b);
printf("\t\t\t|%-9d|%9.3f|\n",b,e)
printf("\t\t\t|%-9d%|9.2f|\n",c, f);
return (0);
}
Почему-то везде пропущены пустые скобки. Так нельзя. ))
УдалитьЭто в getchar имеется ввиду?
УдалитьИ у main и у getchar.
УдалитьЗдравствуйте! Меня зовут Александр.
ОтветитьУдалитьДолго думал над решением задачи №3
И нашел одну загвоздку, то ли скрин с образцом выполненого задания не правильный, то ли ответ на задание не верно.
В задании указано что первые 2 числа нужно считать методом getchar и если передать в переменную a то там будет число 49(так как он передает данные из таблицы кодов ASCII) с вторым символом будет тоже самое.
Решение с передачей в переменную а именно числа 1 так и не нашел, но есть формальное решение))
#include "stdio.h"
#include "locale.h"
int main(void){
setlocale(LC_ALL,"");
int a,ab,b,bc,cd,de,ef,f;
float c,d,e;
a=getchar();
ab=getchar();
b=getchar();
scanf(" %f %f %f %d",&c,&d,&e,&f);
printf("\n");
ab=1;
bc=2;
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9d|\t%-2.1f|\n",ab,c);
printf("\t\t\t|%-9d|\t%-2.2f|\n",bc,d);
printf("\t\t\t|%-9d|\t%-2.1f|\n",f,e);
return(0);
}
Если я не прав или есть действительно правильное решение напишите пожалуйста мне на ящик shyrik.86@mail.ru
Решение есть правильно и оно приведено в образцовых решениях. )))
УдалитьВы все правильно заметили, что передается код символа ASCII, но можно просто выводить использую спецификатор %c. Вот и всё.))
Вот сделал первые два числа через getchar выводятся остальное через printf:
ОтветитьУдалить//ggg
#include
int main()
{
int a,b;
a=getchar();
b=getchar();
double c,d,e,f;
c=64.3;
d=0.624;
e=25.07;
f=43900;
printf("\t\t");
printf("|===============|================|\n");
printf("\t\t");
printf("|");
putchar(a);
printf("\t\t");
printf("|");
printf("\t\t");
putchar(b);
printf("|");
printf("\n\t\t");
printf("|%-15.2f| %15.3f|\n",c,d);
printf("\t\t");
printf("|%-15.2f| %15.0f|\n",e,f);
return(0);
}
нет. Числа нужно было ввести, а не задавать в коде программы. )
УдалитьИ не получится так ввести a и b. Между ними должен быть пробел, а тогда именно он и запишется в переменную b. Исправляйтесь.))
Здравствуйте, проверьте пожалуйста.
ОтветитьУдалить#include
#include
int main()
{
int a, b, f;
float c, d, e;
printf("Vvedite dannie chisla cherez probel a=1 b=2 c=64.3 d=0.624 e=25.07 f=43900\n");
scanf("%d %d %f %f %f %d",&a,&b,&c,&d,&e,&f);
printf("\t\t\t|=========|=========|\n\t\t\t");
printf("|%-9d|%9.2f|\n\t\t\t",a,c);
printf("|%-9d|%9.3f|\n\t\t\t",b,d);
printf("|%-9d|%9.2f|\n",f,e);
return(0);
}
По условию первые два числа нужно было считать использую функцию getchar(). ))
УдалитьВроде так) все верно?
ОтветитьУдалить#include
int main()
{
int a,b,f;
float c,d,e;
printf("Vvedite dannye o chislah \n");
a=getchar();
b=getchar();
b=getchar();
scanf("%f %f %f %d", &c,&d,&e,&f);
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9c|%9.2f|\n", a,c);
printf("\t\t\t|%-9c|%9.3f|\n", b,d);
printf("\t\t\t|%-9d|%9.2f|\n", f,e);
return(0);
}
Да, кажется все хорошо.
Удалить//Потратил полтора часа. Когда завершил испытал микро-оргазм.
ОтветитьУдалитьint main()
{
int a, b, f;
float c, d, e;
a=getchar();
b=getchar();
b=getchar();
scanf("%f %f %f %i", &c, &d, &e, &f);
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9c|%9.2f|\n", a, c);
printf("\t\t\t|%-9c|%9.3f|\n", b, d);
printf("\t\t\t|%-9d|%9.2f|\n", f, e);
printf("\t\t\t|=========|=========|\n");
return (0);
}
Поздравляю. ))
УдалитьЗдравствуйте, вопрос такой для чего тут вообще getchar нужен я так и не понял.
ОтветитьУдалить#include
int main()
{
int a,b,c;
a=1;
b=2;
c=43900;
float q,r,t;
q=64.3;
r=0.624;
t=25.07;
printf("%i,%d,%0.1f,%0.3f,%0.2f,%d\n",a,b,q,r,t,c);
printf("\t\t\t|=========|=========|\n\t\t\t");
printf("|%-9i|%9.2f|\n\t\t\t",a,q);
printf("|%-9i|%9.3f|\n\t\t\t",b,r);
printf("|%-9d|%9.2f|\n\t\t\t",c,t);
return(0);
}
вот что у меня получилось после 1-2 часов мозголомки. Таблица получилась такая же как и в задании, так какую роль тут играет getchar?
коммент ниже посмотрите, у Вас нету считывания с клавиатуры.
УдалитьНе уверен что блог актуален еще. Но автору в любом случае большое спасибо. Начал пробовать. По предыдущим урокам результаты не выкладывал, сделаю хоть в этом. Все таки первое, хоть немного сложное задание.
ОтветитьУдалить#define _CRT_SECURE_NO_WARNINGS
#include
int main()
{
int a, b;
a = getchar();
b = getchar();
b = getchar();
float c, d, e;
int f;
scanf("%f %f %f %d", &c, &d, &e, &f);
printf("\t \t \t:========:========: \n");
printf("\t \t \t:%-8c:%8.2f:\n", a, c);
printf("\t \t \t:%-8c:%8.3f:\n", b, d);
printf("\t \t \t:%-8d:%8.2f:\n", f, e);
return(0);
}
Добрый день.
УдалитьДа, все правильно. )
Спрашивать желательно, когда что-то непонятно, а не каждый раз.) Удачного Вам обучения.
Подскажите пожалуйста, что не так. В таблице правильно отображаются только первые три числа
ОтветитьУдалить#include
int main()
{
int a,b,f;
float c,d,e;
a=getchar();
b=getchar();
b=getchar();
scanf("%f,%f,%f,%i", &c,&d,&e,&f);
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9c|%9.2f|\n", a,c);
printf("\t\t\t|%-9c|%9.3f|\n", b,d);
printf("\t\t\t|%-9d|%9.2f|\n", f,e);
printf("\t\t\t|=========|=========|\n");
return(0);
}
Добрый день, Алан.
УдалитьСкорее всего вы вводите числа через пробел, а в формат строке у вас стоят запятые.
"%f,%f,%f,%i"
Либо вводите числа через запятую (что не будет соответствовать условию задачи), либо замените в формат строке запятые на пробелы.
Задание 3. Уже конечно поздно пишу, но только недавно начал заниматься. У меня такой получился результат:
ОтветитьУдалить#include
#include
int main()
{
setlocale(LC_ALL,"");
int iCH1,iCH2,iCH6;
float fCH3,fCH4,fCH5;
printf("Введите 6 чисел через пробел: a=1, b=2, c=64.3, d=0.624, e=25.07, f=439000\n");
iCH1=getchar();
iCH2=getchar();
iCH2=getchar();
scanf_s("%f %f %f %d",&fCH3,&fCH4,&fCH5,&iCH6);
printf("%c %c %2.1f %1.3f %2.2f %i\n",iCH1,iCH2,fCH3,fCH4,fCH5,iCH6);
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9c|%9.2f|\n",iCH1,fCH3);
printf("\t\t\t|%-9c|%9.3f|\n",iCH2,fCH4);
printf("\t\t\t|%-9i|%9.2f|\n",iCH6,fCH5);
printf("\t\t\t|=========|=========|\n");
return(0);
}
Здравствуйте, Павел. Никогда не поздно что-то начать. =)
УдалитьПрограмма работает, это хорошо. Но есть некоторые замечания.
1. Лучше не использовать в именах переменных заглавные буквы. Заглавными буквами принято называть именованные константы. И если указываете тип значения, то желательно это делать через нижнее подчеркивание. Это не строгие правила, можно делать и как вы. Но лучше придерживаться традиций. i_ch1 выглядит красивее нежели iCH1.
2. Сравните окончательное окно своей программы и то, что было в примере. Много лишнего, если бы это проверял компьютер ваше правильное решение не было бы засчитано. Желательно соблюдать формат ввода и вывода.
не понимаю где находится этот символ на клавиатуре |
ОтветитьУдалитьПод клавишей Backspace, в верхнем регистре.
Удалитьстарался выполнить все условия задачи, получилось, но длинный код в итоге, чем у других.
ОтветитьУдалитья наверно один для пробелов дополнительные переменные ввел. Что не так я понял?
#include
int main (void)
{
int a, b;
int q, w, e, r, t;
float d, f, g, c;
a=getchar();
q=getchar();
b=getchar();
w=getchar();
scanf ("%f", &d);
e=getchar();
scanf ("%f", &f);
r=getchar ();
scanf ("%f", &g);
t=getchar();
scanf ("%f", &c);
printf ("\t");
printf ("\t");
printf ("\t");
printf ("|%-8.0c|", a);
printf ("|%8.2f|\n", d);
printf ("\t");
printf ("\t");
printf ("\t");
printf ("|%-8.0c|", b);
printf ("|%8.3f|\n", f);
printf ("\t");
printf ("\t");
printf ("\t");
printf ("|%-8.0f|", c);
printf ("|%8.2f|\n", g);
return (0);
}
Много лишнего. Зачем вы перед каждым scanf ставите getchar? Это не нужно. И объедините printf-ы Чтобы одной строчке на экране соответствовал один printf. Так и красивее и удобнее.
УдалитьПодскажите, в чём я ошибся?
ОтветитьУдалить#include
int main (void) {
int a, b, j;
float c, d, i;
a = getchar();
b = getchar();
scanf("%d %f %f %f",&j,&c,&d,&i);
printf("\t\t\t\t|=========|=========|\n");
printf("\t\t\t\t|%9c|%-9c|\n",a,b);
printf("\t\t\t\t|%9d|%-9f|\n",c,d);
printf("\t\t\t\t|%9d|%-9f|\n",i,j);
return 0;
}
Добрый день. В уроке есть примечание про то, что пробелы, табуляции, переносы строк тоже считываются во входной поток. после листинга 3.4 Прочитайте и поправьте код.
УдалитьМой вариант.
ОтветитьУдалить#include
int main (void)
{
int a,b,c;
float d,e,f;
printf("Vvedite chisla 1 2 64.3 0.624 25.07 43900 cherez probel \n\n");
a=getchar();
getchar();
b=getchar();
scanf("%f %f %f %d", &d, &e, &f, &c);
printf("\t\t\t|=========|=========| \n");
printf("\t\t\t|%-9c|%9.2f| \n", a,d);
printf("\t\t\t|%-9c|%9.3f| \n", b,e);
printf("\t\t\t|%-9d|%9.2f| \n", c,f);
return(0);
}
Да, все нормально. Хотя вот это
Удалитьprintf("Vvedite chisla 1 2 64.3 0.624 25.07 43900 cherez probel \n\n");
точно не соответствует формату вывода в задании.
У меня с getchar не получается.Компилируется без ошибок а экран выводится пустой по всем листингам.И при ручной печати и при копировании листинга одинаково
ОтветитьУдалитьДобрый день. Можно пожалуйста конкретнее?
УдалитьДоброго времени суток. При выполнении задания у меня возникла такая проблема. При выполнении в таблице не выводиться 1, а сразу 2 и из числа 64.3 целая часть переноситься в следующую строку, а в первой остается 0.30, и вместо числа 43900 все время разные числа выводятся, то -21636, то 28876. Но при удалении из программы функций getchar таблица соответствует правильному виду.
ОтветитьУдалить# include
int main () {
int a,q,c,t,y;
a=getchar();
q=getchar();
float d,e,i;
scanf ("%i %i %f %f %f %i", &a,&q,&d,&e,&i,&c);
printf ("\t\t|========|=======|\n");
printf ("\t\t|%-9i|%8.2f|\n", a,d);
printf ("\t\t|%-9i|%8.3f|\n", q,e);
printf ("\t\t|%-9i|%8.2f|\n", c,i);
return (0); }
Добрый день. Программа работает так, как вы её написали. А написали вы её синтаксически верно, но логически неправильно. Внимательно посмотрите что и куда вы читаете, и что выводите на экран. Тогда сразу станет понятно, почему такие проблемы возникают.
УдалитьЗдравствуйте, вот решил но у меня вопрос число надо с клавиатуры вести или срезу инициализировать заранее спасибо
ОтветитьУдалить#include "stdafx.h"
#include
int main()
{
int a=1,b=2;
float c=64.3, d=0.624, e=25.07;
int i= 43900;
printf("V vedite 6 chisla cherez probel\n");
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9d| %8.3f|\n",a,c);
printf("\t\t\t|%-9d| %8.3f|\n",b,d);
printf("\t\t\t|%-9d| %8.3f|\n",i,e);
_getch();
return 0;
}
Добрый день, Гамзат.
УдалитьЧисла, нужно вводить с клавиатуры, а не инициализировать заранее.
3 Задание
ОтветитьУдалить#include
int main(void)
{
int a,b,c,g;
a=getchar();
b=getchar();
c=getchar();
float d,e,f;
scanf("%f %f %f %d",&d,&e,&f,&g);
printf("\t\t\t|=========|=========|\n\t\t\t|%-9c|%9.2f|\n\t\t\t|%-9c|%9.3f|\n\t\t\t|%-9d|%9.2f|\n",a,d,c,e,g,f);
return(0);
}
Здравствуйте, вопрос по третьему заданию, после запуска программы и введения с клавиатуры "1 2 64.3 0.624 25.07 43900" и нажатия Enter программа не выполняется, выполнение происходит только после ввода еще одного значения. Объясните пожалуйста почему так проиходит, не могу разобраться.
ОтветитьУдалить#include
int main(void)
{
char a,a1,b;
int f;
float c,d,e;
a=getchar();
a1=getchar();
b=getchar();
scanf("%f ",&c);
scanf("%f ",&d);
scanf("%f ",&e);
scanf("%d ",&f);
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9c|%9.2f|\n", a,c);
printf("\t\t\t|%-9c|%9.3f|\n", b,d);
printf("\t\t\t|%-9d|%9.2f|\n", f,e);
return(0);
}
Всё дело в пробеле, который стоит после %d. Для этой функции пробел это разделитель. Поэтому когда идет считывание, ей нужно его как-бы тоже считать, ведь он описан в формате, поэтому считывание разделителя закончится, когда встретится новый символ отличный от разделителя (буква, цифра).
Удалить//proga
ОтветитьУдалить#include
int main(void) {
int a, b, f;
float c, d, e;
a = getchar();
b = getchar();
b = getchar();
c = 64.3;
d = 0.624;
e = 25.07;
f = 43900;
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|%-9c|%9.2f|\n", a, c);
printf("\t\t\t|%-9c|%9.3f|\n", b, d);
printf("\t\t\t|%-9d|%9.2f|\n", f, e);
return(0);
}
Добрый день, Александр.
УдалитьВы не совсем правильно поняли задачу. Значения в переменные c,d,e,f тоже должны вводиться пользователем с клавиатуры.
Помогите с одним вопросом: пробел \t везде работает как надо, но в начале, где я его написала после putchar(a), получился огромный длинный пробел. А в остальном,вроде бы все верно. Как сделать пробел коротким?
ОтветитьУдалить#include
int main()
{
int a, b;
int y = 43900;
float d = 64.3;
float k = 0.624;
float j = 25.07;
printf("Vvedite dva chisla: a=1, b=2 i najmite Enter");
a = getchar();
b = getchar();
putchar(a);
printf("\t");
putchar(b);
printf("\t");
printf("%1.1f\t", d);
printf("%3.3f\t", k);
printf("%4.2f\t", j);
printf("%2d\n\t\t\t", y);
printf("|=========|=========|\n\t\t\t");
printf("|%-9c|%9.2f|\n\t\t\t", a, d);
printf("|%-9c|%9.3f|\n\t\t\t", b, k);
printf("|%-9d|%9.2f|\n", y, j);
return (0);
}
Не совсем так. \t - всегда работает как длинный пробел. Чтобы сделать обычный пробел, достаточно добавить его в формат строку. Кроме того, с клавиатуры нужно вводить все числа, а не только первые два. Исправьте это.
Удалить#include
ОтветитьУдалитьint main()
{
int a=1,b=2;
a=getchar();
b=getchar();
double c=64.3;
double d=0.624;
double i=25.07;
int f=43900;
getchar();
printf("\t\t\t|=========|=========|\n");
printf("\t\t\t|1\t%2c|%4c64.30|\n");
printf("\t\t\t|2\t%2c|%4c0.624|\n");
printf("\t\t\t|43900\t%2c|%4c25.07|\n");
return(0);
}
Правильно?
Добрый день.
УдалитьНет, не совсем так.
Вы задаете значения переменным в коде программы, а их должен ввести пользователь. И введенные им числа уже нужно отобразить в таблице, а не самостоятельно туда записывать числа.
Здравствуйте. Работаю в Visual как и советовалось в первом уроке. Но когда начинаю вводить 3 задание, даже если ввожу программу комментаторов, которые отметили как правильную, мне выдает 1 ошибку. "error C2006: #include: требуется имя файла, а не "newline"" Как это исправить?
УдалитьЗдравствуйте. Работаю в Visual как и советовалось в первом уроке. Но когда начинаю вводить 3 задание, даже если ввожу программу комментаторов, которые отметили как правильную, мне выдает 1 ошибку. "error C2006: #include: требуется имя файла, а не "newline"" Как это исправить?
ОтветитьУдалить