Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873

cin vs scanf

20.03.2009, 10:48. Показов 9814. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ, объясните мне, почему многие предпочитают функцию scanf? ИМХО, cin для ввода данных гораздо проще... Может кто знает, что да как, да меня просветит темного.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.03.2009, 10:48
Ответы с готовыми решениями:

Cin точнее scanf?
Здравствуйте. Во время написания кода и попытки понимания возникновения ошибки, отправил на проход тестов два идентичных кода, отличия были...

Операторы cin и scanf
Пример кода: void func(float* p){ cout << "Введите значение"; scanf("%f\n", &p); } Как можно прочитать ссылку через cin ? При...

Из scanf в std::cin
Как тоже самое сделать с помощью std::cin? printf("Введите автора %d книги.\n",i+1); scanf("%31s ",ar.author); ...

30
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
24.01.2011, 06:12
Студворк — интернет-сервис помощи студентам
no0ker, А почему нет-то? оО

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int main()
{
    int a;
    double b;
    char c;
 
    std::cin>>a>>b>>c;
    std::cout<<c<<' '<<b<<' '<<a<<'\n';
    return 0;
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12846 / 7595 / 1766
Регистрация: 25.07.2009
Сообщений: 13,981
24.01.2011, 13:05
На самом деле функции ввода/вывода С и С++ не сто'ит мешать совсем не только потому, что это "красивости" программе не прибавляет мягко говоря. И функции С и потоки С++ ввод/вывод буферизируют, при чём делают это по-своему. При достаточно фанатичном чередовании тех и других можно добиться того, что ввод, которого ждёт cin, "осел" в буфере, который использует scanf. Ну или обратный случай - вывод в cout перемешивается с выводом printf в какой-нибудь непредсказуемой последовательности. В любом случае - по-моему действительно лучше в С++ не использовать функции библиотеки С без крайней на то необходимости. Но если уж так привыкли к printf/scanf и хочется использовать их в программе на С++, то хотябы с cin/cout их мешать не нужно. Будьте последовательны!
0
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
24.01.2011, 16:08
ForEveR, в вашем примере переменные вводимые пользователем разделяются пробелами. а мне нужно '/'. =(

Добавлено через 3 минуты
easybudda, вы говорите разумные вещи. если бы можно было осуществить форматированный ввод (так что ли это называется...) используя исключительно 'cin>>', зачем бы он сдался - этот scanf().

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int main()
{
    int a,b,c;
    char t;
    std::cin >>a>>t>>b>>t>>c;
    // вводится 1/02/10
    std::cout<<"d-"<<a<<" m-"<<b<<" y-"<<c;
    // выводится d-1 m-02 y-10
}
0
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 201
24.01.2011, 16:23
Ну а как с помощью cin вывести число тип которого float, при этом вывестиодин знак до запятой, и 2 знака после запятой.
Например число Pi..... 3,1415.... хочу вывести cin чтобы было 3,14!
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
24.01.2011, 16:25
sfinexer, с помощью манипуляторов setprecision
cout << setprecision(2) << M_PI;
1
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 201
01.03.2011, 13:26
Цитата Сообщение от alex_x_x Посмотреть сообщение
sfinexer, с помощью манипуляторов setprecision
cout << setprecision(2) << M_PI;

У меня проблема с этой штукой(((
float u=1.99999;
cout << setprecision(2) << u;

Выдает двойку а не 1,99 как я хочу((((

Ну или 2,00
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
01.03.2011, 14:52
sfinexer, при установке точности на эн символов происходит не отбрасывание цифр начиная со следующей после эн, а округление числа. И это единственно верное решение, потому что иначе произойдёт потеря точности. Так что никакой «проблемы» тут нет, всё как надо.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12846 / 7595 / 1766
Регистрация: 25.07.2009
Сообщений: 13,981
01.03.2011, 15:20
Цитата Сообщение от sfinexer Посмотреть сообщение
cout << setprecision(2) << u;
Выдает двойку а не 1,99 как я хочу
C
1
printf("%.2f", 1.9999999);
тоже 2.00 выведет.
0
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 201
01.03.2011, 15:32
Цитата Сообщение от easybudda Посмотреть сообщение
C
1
printf("%.2f", 1.9999999);
тоже 2.00 выведет.
Но у меня выдает 2 а не 2,00 вот в чем проблема.....
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12846 / 7595 / 1766
Регистрация: 25.07.2009
Сообщений: 13,981
01.03.2011, 15:56
Цитата Сообщение от sfinexer Посмотреть сообщение
Но у меня выдает 2 а не 2,00 вот в чем проблема.....
C++
1
2
3
4
5
6
7
#include <iostream>
#include <iomanip>
 
int main(){
  std::cout << std::fixed << std::setprecision(2) << 1.999999 << std::endl;
  return 0;
}
0
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 201
01.03.2011, 20:07
Цитата Сообщение от easybudda Посмотреть сообщение
C++
1
2
3
4
5
6
7
#include <iostream>
#include <iomanip>
 
int main(){
  std::cout << std::fixed << std::setprecision(2) << 1.999999 << std::endl;
  return 0;
}
Компилятор у меня ругается на file.setprecision file это файловый поток, файл открыт ранее.
Иными словами, у меня таблица порядка 50 значений надо туда записать (там многое в цикле).

Но 50 раз писать setprecision(2) который тоже вобщето както странновато работает, и он работает только для последующего выводимого значения, иными словами это усложнит программу.
Я хочу написать.
file.fixed;
file.precision(2);
И дальше уже file<<ЧИСЛО;

Но у меня при этом число выводится без плавающей запятой.
Если вывести переменную которая равна 0,0005488
Оно выведет и нули, а мне надо степень, ибо числа разные.
Надо вывести 4 значащих цифры и степень.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.03.2011, 20:07

Переделаем вместе scanf() в cin>>
Был исходник: void Comp::Get() // Ввод данных с клавиатуры =) { printf (&quot;\n Введите действительную часть числа &quot;); scanf...

Scanf vs cin (double variant)
double k = 0.0; scanf(&quot;%f&quot;, &amp;k); double k1 = 0.0 cin &gt;&gt; k1; Вводим -1,5. Получаем: k = 1.589424581709e-314#DEN double k1...

Заменить cin cout на printf scanf
Преподаватель не хочет принимать код по минимальному основанию системы счисления , из-за того, что вместо функций printf и scanf были...

Заменить cin / cout на scanf / printf
#include&lt;iostream&gt; #include&lt;locale.h&gt; #include&lt;Windows.h&gt; #include&lt;string&gt; #include &quot;123.h&quot; using namespace std; float...

Переделать scanf и printf в cin и cout
#include &quot;stdio.h&quot; #include &quot;math.h&quot; int main() { float S=0; int n=3; printf(&quot;For\n&quot;); for (n=3; n &lt;= 9;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Опции темы

Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru