Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.64
Lord_Voodoo
Супер-модератор
8577 / 2177 / 61
Регистрация: 07.03.2007
Сообщений: 10,863
Завершенные тесты: 1
#1

cin vs scanf - C++

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

Народ, объясните мне, почему многие предпочитают функцию scanf? ИМХО, cin для ввода данных гораздо проще... Может кто знает, что да как, да меня просветит темного.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
24.01.2011, 06:12     cin vs scanf #21
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;
}
easybudda
Эксперт С++
9455 / 5468 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
24.01.2011, 13:05     cin vs scanf #22
На самом деле функции ввода/вывода С и С++ не сто'ит мешать совсем не только потому, что это "красивости" программе не прибавляет мягко говоря. И функции С и потоки С++ ввод/вывод буферизируют, при чём делают это по-своему. При достаточно фанатичном чередовании тех и других можно добиться того, что ввод, которого ждёт cin, "осел" в буфере, который использует scanf. Ну или обратный случай - вывод в cout перемешивается с выводом printf в какой-нибудь непредсказуемой последовательности. В любом случае - по-моему действительно лучше в С++ не использовать функции библиотеки С без крайней на то необходимости. Но если уж так привыкли к printf/scanf и хочется использовать их в программе на С++, то хотябы с cin/cout их мешать не нужно. Будьте последовательны!
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
24.01.2011, 16:08     cin vs scanf #23
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
}
sfinexer
-7 / 7 / 2
Регистрация: 22.01.2011
Сообщений: 137
24.01.2011, 16:23     cin vs scanf #24
Ну а как с помощью cin вывести число тип которого float, при этом вывестиодин знак до запятой, и 2 знака после запятой.
Например число Pi..... 3,1415.... хочу вывести cin чтобы было 3,14!
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
24.01.2011, 16:25     cin vs scanf #25
sfinexer, с помощью манипуляторов setprecision
cout << setprecision(2) << M_PI;
sfinexer
-7 / 7 / 2
Регистрация: 22.01.2011
Сообщений: 137
01.03.2011, 13:26     cin vs scanf #26
Цитата Сообщение от alex_x_x Посмотреть сообщение
sfinexer, с помощью манипуляторов setprecision
cout << setprecision(2) << M_PI;

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

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

Ну или 2,00
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
01.03.2011, 14:52     cin vs scanf #27
sfinexer, при установке точности на эн символов происходит не отбрасывание цифр начиная со следующей после эн, а округление числа. И это единственно верное решение, потому что иначе произойдёт потеря точности. Так что никакой «проблемы» тут нет, всё как надо.
easybudda
Эксперт С++
9455 / 5468 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
01.03.2011, 15:20     cin vs scanf #28
Цитата Сообщение от sfinexer Посмотреть сообщение
cout << setprecision(2) << u;
Выдает двойку а не 1,99 как я хочу
C
1
printf("%.2f", 1.9999999);
тоже 2.00 выведет.
sfinexer
-7 / 7 / 2
Регистрация: 22.01.2011
Сообщений: 137
01.03.2011, 15:32     cin vs scanf #29
Цитата Сообщение от easybudda Посмотреть сообщение
C
1
printf("%.2f", 1.9999999);
тоже 2.00 выведет.
Но у меня выдает 2 а не 2,00 вот в чем проблема.....
easybudda
Эксперт С++
9455 / 5468 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
01.03.2011, 15:56     cin vs scanf #30
Цитата Сообщение от 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2011, 20:07     cin vs scanf
Еще ссылки по теме:

C++ Заменить printf на cout, scanf на cin
C++ Scanf vs cin (double variant)
Отличие printf/scanf от cout/cin C++
Ограничение на ввод символов scanf() и cin C++
C++ Заменить cout на printf а cin на scanf

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

Или воспользуйтесь поиском по форуму:
sfinexer
-7 / 7 / 2
Регистрация: 22.01.2011
Сообщений: 137
01.03.2011, 20:07     cin vs scanf #31
Цитата Сообщение от 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 значащих цифры и степень.
Yandex
Объявления
01.03.2011, 20:07     cin vs scanf
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru