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

C++

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

cin vs scanf - C++

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

Народ, объясните мне, почему многие предпочитают функцию scanf? ИМХО, cin для ввода данных гораздо проще... Может кто знает, что да как, да меня просветит темного.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2009, 10:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос cin vs scanf (C++):

scanf - C++
Пусть нужно читать из текста слова, пропуская все символы, кроме a-z и A-Z. То есть из текста Hello, world! ololo O_o получить только ...

cin из файла - как? - C++
именно CIN! Никаких там fstream'ов и fopen... То есть как сделать так, чтобы программа работала: cin >> i >> j; cout << i << "...

Cin.get() игнорируется компилятором - C++
Доброго времени суток, форумачане. в 43 строке компилятором пропускается данная функция: "cin.get(str, s);". не запрашивает ввод, а...

Исполняется ли приложение в консоли? (std::cin) - C++
Здравствуйте, уважаемые! Мне не удалось достаточно внятно задать вопрос гуглу, поэтому теперь спрашиваю у вас. В моем приложении...

Несоответствие работы cin.putback в разных компиляторах - C++
Здравствуйте! Озадачило меня следующее несоответствие (текст приведен в качестве примера): #include <iostream> #include <cstring>...

scanf в c++ builder - C++ Builder
Ребят,скажите,как посимвольно считать строку из ЛистБокса. Я делаю так,но не работает,выдает ошибку. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
22.01.2011, 22:43 #16
Ну да, наверное вы в чем то правы, но в большинстве программ( а писал я только по учёбе), мне было проще использовать cin, чем scanf.
0
Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
22.01.2011, 22:50 #17
Большинство использующих сишные функции просто не понимают идеологии С++ (или просто не дружат со стандартной библиотекой ). Преимущество потокового ввода - строгая типизация и защита от потенциальных ошибок, а семейство функций print/scan работают с переменными как с сырой памятью, слабо типизированы и подвержены ошибкам. Ну а тем кому охота разбирать строки - С++ предоставляет reg exp.
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
22.01.2011, 23:11 #18
ну вообщем единственная проблема безопасность, ну я помню подобная тема была
все сошлись, что когда появятся шаблоны с переменным числом параметров - всем будет щастье
0
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
22.01.2011, 23:41 #19
У обоих подходов есть плюсы и минусы. Использование той или иной технологии должно базироваться на разумности и соответствии поставленной задаче. Не стоит так же забывать об унификаци и стайл гайдах проекта.
Смешивание тоже может быть полезно. Например, логирование хорошо реализуется при помощи потоков, а интернационализация облегчается при использовании stdio за счет динамического позиционирования переменных.
0
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
23.01.2011, 09:07 #20
может быть вот так?
C++
1
2
3
char i; 
int a, b;
cin >> a >> i >> b;
Добавлено через 15 секунд
может быть вот так?
C++
1
2
3
char i; 
int a, b;
cin >> a >> i >> b;
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
24.01.2011, 06:12 #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;
}
0
easybudda
Модератор
Эксперт CЭксперт С++
9626 / 5574 / 947
Регистрация: 25.07.2009
Сообщений: 10,709
24.01.2011, 13:05 #22
На самом деле функции ввода/вывода С и С++ не сто'ит мешать совсем не только потому, что это "красивости" программе не прибавляет мягко говоря. И функции С и потоки С++ ввод/вывод буферизируют, при чём делают это по-своему. При достаточно фанатичном чередовании тех и других можно добиться того, что ввод, которого ждёт cin, "осел" в буфере, который использует scanf. Ну или обратный случай - вывод в cout перемешивается с выводом printf в какой-нибудь непредсказуемой последовательности. В любом случае - по-моему действительно лучше в С++ не использовать функции библиотеки С без крайней на то необходимости. Но если уж так привыкли к printf/scanf и хочется использовать их в программе на С++, то хотябы с cin/cout их мешать не нужно. Будьте последовательны!
0
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
24.01.2011, 16:08 #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
}
0
sfinexer
-6 / 8 / 2
Регистрация: 22.01.2011
Сообщений: 152
24.01.2011, 16:23 #24
Ну а как с помощью cin вывести число тип которого float, при этом вывестиодин знак до запятой, и 2 знака после запятой.
Например число Pi..... 3,1415.... хочу вывести cin чтобы было 3,14!
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
24.01.2011, 16:25 #25
sfinexer, с помощью манипуляторов setprecision
cout << setprecision(2) << M_PI;
1
sfinexer
-6 / 8 / 2
Регистрация: 22.01.2011
Сообщений: 152
01.03.2011, 13:26 #26
Цитата Сообщение от alex_x_x Посмотреть сообщение
sfinexer, с помощью манипуляторов setprecision
cout << setprecision(2) << M_PI;

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

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

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

Заменить scanf и printf на операторы, которые можно связать с Edit - C++ Builder
Здраствуйте! Помогите пожалуйста решить одну проблему! У меня есть программа написана на Си, с помощей которой можно перевести двоичную...

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

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

scanf/puts/cin в MS SQL? - SQL Server
Добрый день. Задача следующая: нужно вводить в таблицу настраиваемые данные. То есть не жестко оформлять это в запросе, а сначала...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.03.2011, 15:56
Ответ Создать тему
Опции темы

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