Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.64/33: Рейтинг темы: голосов - 33, средняя оценка - 4.64
Супер-модератор
8727 / 2402 / 138
Регистрация: 07.03.2007
Сообщений: 11,522
1

cin vs scanf

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

Народ, объясните мне, почему многие предпочитают функцию scanf? ИМХО, cin для ввода данных гораздо проще... Может кто знает, что да как, да меня просветит темного.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2009, 10:48
Ответы с готовыми решениями:

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

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

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

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

30
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10838 / 6653 / 1614
Регистрация: 25.07.2009
Сообщений: 12,430
24.01.2011, 13:05 22
На самом деле функции ввода/вывода С и С++ не сто'ит мешать совсем не только потому, что это "красивости" программе не прибавляет мягко говоря. И функции С и потоки С++ ввод/вывод буферизируют, при чём делают это по-своему. При достаточно фанатичном чередовании тех и других можно добиться того, что ввод, которого ждёт cin, "осел" в буфере, который использует scanf. Ну или обратный случай - вывод в cout перемешивается с выводом printf в какой-нибудь непредсказуемой последовательности. В любом случае - по-моему действительно лучше в С++ не использовать функции библиотеки С без крайней на то необходимости. Но если уж так привыкли к printf/scanf и хочется использовать их в программе на С++, то хотябы с cin/cout их мешать не нужно. Будьте последовательны!
0
101 / 88 / 7
Регистрация: 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
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 183
24.01.2011, 16:23 24
Ну а как с помощью cin вывести число тип которого float, при этом вывестиодин знак до запятой, и 2 знака после запятой.
Например число Pi..... 3,1415.... хочу вывести cin чтобы было 3,14!
0
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
24.01.2011, 16:25 25
sfinexer, с помощью манипуляторов setprecision
cout << setprecision(2) << M_PI;
1
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 183
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
268 / 170 / 11
Регистрация: 14.03.2010
Сообщений: 501
01.03.2011, 14:52 27
sfinexer, при установке точности на эн символов происходит не отбрасывание цифр начиная со следующей после эн, а округление числа. И это единственно верное решение, потому что иначе произойдёт потеря точности. Так что никакой «проблемы» тут нет, всё как надо.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10838 / 6653 / 1614
Регистрация: 25.07.2009
Сообщений: 12,430
01.03.2011, 15:20 28
Цитата Сообщение от sfinexer Посмотреть сообщение
cout << setprecision(2) << u;
Выдает двойку а не 1,99 как я хочу
C
1
printf("%.2f", 1.9999999);
тоже 2.00 выведет.
0
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 183
01.03.2011, 15:32 29
Цитата Сообщение от easybudda Посмотреть сообщение
C
1
printf("%.2f", 1.9999999);
тоже 2.00 выведет.
Но у меня выдает 2 а не 2,00 вот в чем проблема.....
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10838 / 6653 / 1614
Регистрация: 25.07.2009
Сообщений: 12,430
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
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 183
01.03.2011, 20:07 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 значащих цифры и степень.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.03.2011, 20:07

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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 =...

Заменить cin cout на 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;...

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


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

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

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