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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
AC-93
16 / 16 / 0
Регистрация: 27.01.2010
Сообщений: 150
#1

много вопросов о вводе-выводе - C++

03.02.2011, 09:54. Просмотров 1626. Ответов 25
Метки нет (Все метки)

Здравствуйте, законченный дельфист решил переехать... вопросов куча, просьба ответить.
1) много вариантов ввода вывода, например сравниать <<, >> и scanf printf по сути они аналогичны? Считается ли каой-то вариант более выгодным или красивым?
2) зачем в scan и print дополнительно указывать тип, если он уже задан при объявлении переменой.
3) при объявлении int a=0; int a={0} ; эти две команды аналогичны? что значат эти круглые скобки. есть ли разница.
4) почему без начального присваивания нельзя прочитать значение с помощью scan, а из потока можно.
int a; scanf("d",a); выдается ошибка.
5) если у меня куча переменных инт, могу я их разом обнулить (нач. присваивание), типа k1,k2,k3,k4=0;
6) при чтении и файла, что значит %d чем отличается от просто d , зачем пишется & перед переменной?
fscanf("%d",&a);
7) как прочитать числа через пробел из файла.
вариант fscanf("%d",k1,k2,k3,k4); не работает, кстати вот это "%d" относится ко всем или только к первому?
8) как сделать из файла стандартный потом, нашел вариант название исполн файла<<input.txt но если я не знаю как называется exe файл? или вдруг ег переименуют.
нашел как сделать из файла потом и читать как in<< и out>> но cin=in; con=out; не работает.
топик будет дополняться) спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2011, 09:54     много вопросов о вводе-выводе
Посмотрите здесь:

Много вопросов - C++
ребят подскажите как зделать Panel прозрачной а текст который в ней есть осталься видимым

Ошибка в вводе/выводе массива - C++
При выводе элемента массива всегда значение ноль. Вероятно ввожу массив неправильно. Помогите пожалуйста найти ошибку. P.S. жел-но не...

Русский язык в вводе/выводе - C++
с помощью функции setlocale(0, &quot;rus&quot;); Программа понимает русский язык, который написан в кавычках, но как сделать, что-бы Стринговская...

хочу понять как работает двумерный массив,буду задавть много вопросов - C++
решил про 2д массива изучать.правда в книге еще далеко... подскажите мне как работает идополните код программы решил написать прогу,про...

Ряд вопросов? - C++
Покажите плз как работать вот с этими(skipws,endl,ws) манипулятоми простым кодом ато чот не получается у меня. И еще манипулятор endl...

Несколько вопросов - C++
Здравствуйте. Возникло несколько вопросов: 1. Когда нажимаешь на определённую клавишу происходит определённое действие (типа меню)...Я на...

Куча вопросов.. - C++
В связи с последовательным изучением С++ и с параллельным при этом отсутствием рабочего подключения к Интернету у меня накопилась куча...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dampir_sanek
150 / 148 / 21
Регистрация: 09.02.2010
Сообщений: 407
03.02.2011, 13:06     много вопросов о вводе-выводе #2
AC-93,
ответ на вопрос 1:
<< и >> это операторы языка С++, а printf, scanf - это язык С. Лучше и красивее использовать printf, scanf в программе на С, а >> , << в программе на С++.
ответ на вопрос 2: таков синтаксис языка. И разве это имеет значение? Писать printf("%d", i) или как то иначе? Синтаксис языка С - это один из самых красивых и лаконичных синтаксисов.

Добавлено через 1 минуту
Код
C
1
int a; scanf("d",a);
работать не будет, нужно так
C
1
int a; scanf("%d",a);
Escapable
54 / 54 / 1
Регистрация: 09.11.2010
Сообщений: 120
03.02.2011, 13:20     много вопросов о вводе-выводе #3
3. Такие скобки ({}) используются для начальной инициализации массивов.
C++
1
int a[5] = {0, 1, 2, 3, 4}; // челочисленый массив состоящий из пяти элементов
5. Да.
C++
1
2
3
4
5
int a = 5, b = 10, с = 15;
cout << a << " " << b << " " << с << endl; // на экране 5 10 15
 
a = b = с = 0; // обнуляем
cout << a << " " << b << " " << с << endl; // на экране 0 0 0
dampir_sanek
150 / 148 / 21
Регистрация: 09.02.2010
Сообщений: 407
03.02.2011, 13:27     много вопросов о вводе-выводе #4
6 вопрос:
%d -подстановка в это место значения типа int, которая указана после запятой.

& перед переменной?
Вы уже наверное заметили, что когда мы в scanf указываем переменные, в которые нужно поместить считываемые данные, то перед именем переменной ставим знак & (амперсанд), в то время как в printf при печати значений переменных амперсанд не ставится.

Операция «амперсанд» — это операция взятия адреса. Если a есть значение переменной a, то &a — это адрес в памяти компьютера, где хранится переменная a: одно есть само число, другое — место, где это число хранится.

Функции scanf нужно знать не текущее значение переменной, а её адрес, чтобы положить туда результат считывания. Функции printf нужно знать значения переменных, чтобы их печатать. Функции scanf нужно передавать адреса переменных, куда помещать считываемые данные.
отсюда

Добавлено через 4 минуты
8 вопрос: сами поняли что написали? В чем вопрос то?
топик будет дополняться) спасибо
Перед дополнением топика,попробуйте книжки почитать. Ваши вопросы - это первый параграф в любой книге по Си/Си++.
Модно начать с книги Керниган, Ритчи "Язык программирования Си"
silent_1991
03.02.2011, 14:01
  #5

Не по теме:

Цитата Сообщение от dampir_sanek Посмотреть сообщение
<< и >> это операторы языка С++
Вообще это операторы языка Си, и их изначальное значение - побитовый сдвиг. А уж разработчики Си++ только перегрузили эти операторы для передачи и взятия из потока. Но в определённом контексте эти операторы так и остаются операторами сдвига.

dampir_sanek
150 / 148 / 21
Регистрация: 09.02.2010
Сообщений: 407
03.02.2011, 14:08     много вопросов о вводе-выводе #6
silent_1991, да Вы конечно правы. Я имел ввиду это в контексте операторов cout, cin. А так дельное замечание.
Mogul-kan
23 / 23 / 2
Регистрация: 24.04.2010
Сообщений: 220
03.02.2011, 14:25     много вопросов о вводе-выводе #7
Цитата Сообщение от dampir_sanek Посмотреть сообщение
int a; scanf("%d",a);
и так работать не будет-вы забыли амперсанд... в языке си это происхоит так
C
1
scanf("%d", & a);
амперсанд &-содержит адрес ячейки куда будут ложить переменную без него во всяком случае в си не заработает...

Цитата Сообщение от AC-93 Посмотреть сообщение
5) если у меня куча переменных инт, могу я их разом обнулить (нач. присваивание), типа k1,k2,k3,k4=0;
можно сделать так:
C
1
к1=к2=к3=0;
Цитата Сообщение от AC-93 Посмотреть сообщение
вариант fscanf("%d",k1,k2,k3,k4); не работает, кстати вот это "%d" относится ко всем или только к первому?
%d-относится только к первому(поэтому нужно ставить для каждой переменной)
silent_1991
Эксперт С++
4961 / 3037 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
03.02.2011, 14:29     много вопросов о вводе-выводе #8
Цитата Сообщение от Mogul-kan Посмотреть сообщение
амперсанд &-содержит адрес ячейки
Амперсанд ничего содержать не может, это оператор. Он возвращает адрес ячейки памяти своего операнда.

Не по теме:

Что-то я сегодня злобный и к словам придираюсь

AC-93
16 / 16 / 0
Регистрация: 27.01.2010
Сообщений: 150
03.02.2011, 16:42  [ТС]     много вопросов о вводе-выводе #9
Огромное спасибо за ответы) По красивости С не соглашусь) Мне операции read и write кажутся более логичными) без всяких доп. символов легко и красиво) Но тут на вкус и цвет)


Цитата Сообщение от dampir_sanek Посмотреть сообщение
Добавлено через 4 минуты
8 вопрос: сами поняли что написали? В чем вопрос то?

Перед дополнением топика,попробуйте книжки почитать. Ваши вопросы - это первый параграф в любой книге по Си/Си++.
Модно начать с книги Керниган, Ритчи "Язык программирования Си"
Читаю программирование на С++ Глушаков. Дуравкин 2008. и С-С++ Культин.
То, что пишу тут, оттуда понять не смог. Во всех учебниках дается как работать и писать но тонкости не описаны.


8) упс не так написал, клава незнакомая тут.
у меня есть файл из которого читаю, можно ли сделать из этого файла стандартный поток, чтобы читать из него с помощью scanf printf, чтобы не писать каждый раз откуда читаешь fscanf(название,обычные символы для чтения)
Нашел вариант в книге что что этого надо прописать
C++
1
название_файла_exe<<название файла из которого читаем.
но этот вариант не подходит т.к. не знаю название exe и при его переименовании все перестанет работать.
Нашел второй вариант-сделать из файла поток
C++
1
2
ofstream os("text.txt");
os << "Hello";
но на команду cin=os; он начинает ругаться. т.е. опять не плучается с помощью scanf() читать.

про 7 вопрос не понял

и если я не хочу закорачиваться с амперсандами и типами при чтении, могу забыть про все это и использовать << >> или в каких-то случаях погорю на этом?
silent_1991
Эксперт С++
4961 / 3037 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
03.02.2011, 19:44     много вопросов о вводе-выводе #10
Цитата Сообщение от AC-93 Посмотреть сообщение
По красивости С не соглашусь) Мне операции read и write кажутся более логичными
Отличаете лаконичность языка от самописных функций? Да, функции printf/scanf входят в стандарт, но от этого они не перестают быть функциями, написанными каким-то программистом/группой программистов. Вам никто не мешает написать свои собственные функции работы с потоками, в которых не будет "ничего лишнего", зато будут блэк-джэк и шлю...
AC-93
16 / 16 / 0
Регистрация: 27.01.2010
Сообщений: 150
03.02.2011, 19:47  [ТС]     много вопросов о вводе-выводе #11
Цитата Сообщение от dampir_sanek Посмотреть сообщение

Перед дополнением топика,попробуйте книжки почитать. Ваши вопросы - это первый параграф в любой книге по Си/Си++.
Модно начать с книги Керниган, Ритчи "Язык программирования Си"
Прочитал эту книжку. В 7 главе как раз об этом, нашел ответ там на 7 вопрос. Остальных нету.
silent_1991
Эксперт С++
4961 / 3037 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
03.02.2011, 19:49     много вопросов о вводе-выводе #12
Далее.
Пишите либо на Си, используя printf/scanf, либо на Си++, используя потоки. Никогда не смешивайте эту часть языков (работа с потоками).
Для Си, чтобы использовать стандартные функции printf/scanf для работы с вашим файлом, а не со стандартными потоками ввода/вывода, существует функция freopen. Поищите про неё в гугле, я её синтаксис не помню.
AC-93
16 / 16 / 0
Регистрация: 27.01.2010
Сообщений: 150
03.02.2011, 20:01  [ТС]     много вопросов о вводе-выводе #13
Цитата Сообщение от silent_1991 Посмотреть сообщение
Отличаете лаконичность языка от самописных функций? Да, функции printf/scanf входят в стандарт, но от этого они не перестают быть функциями, написанными каким-то программистом/группой программистов. Вам никто не мешает написать свои собственные функции работы с потоками, в которых не будет "ничего лишнего", зато будут блэк-джэк и шлю...
Ахаха) Супер) Пошел переписывать все функции делфи в сишку) Интересно примут ли такие решения. Блек джек и шл... и С++ АХаха. Супер

Добавлено через 45 секунд
На будущее: В шарпе потоки или стандартный ввод вывод?

Добавлено через 1 минуту
Отлично, freopen понял, то что надо.
silent_1991
Эксперт С++
4961 / 3037 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
03.02.2011, 20:11     много вопросов о вводе-выводе #14
Цитата Сообщение от AC-93 Посмотреть сообщение
Пошел переписывать все функции делфи в сишку
Это я вам как вариант предложил. Второй вариант - учите Си++, там поудобнее работа с потоками, тоже никаких "дополнительных символов".
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2011, 20:21     много вопросов о вводе-выводе
Еще ссылки по теме:

Несколько вопросов - C++
Делаю небольшую консольную игру для тренировки и есть несколько вопросов. char *lev; //char lev; //как передать правильно этот массив...

Пара вопросов по C++ 11 - C++
1. чем отличаются std::forward_list и std::initializer_list? 2. не получается применять constexpr в msvs 2013 pro constexpr auto n = 0;...

Несколько вопросов - C++
Добрый день. Начал писать одну программу в VS 2008 C++ (консоль) и столкнулся в несколькими проблемами. В общем желательно нужно, чтобы...

Пачка вопросов по C++ - C++
1. Какая функция в консольном приложении для создания файла? 2. Какая функция в консольном приложении для открытия файла? 3. Как в...

Пара вопросов по С++ - C++
возникло несколько вопросов, с которыми что то не могу никак разобраться 1. Как происходит выравнивание при создании структуры? ...


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

Или воспользуйтесь поиском по форуму:
AC-93
16 / 16 / 0
Регистрация: 27.01.2010
Сообщений: 150
03.02.2011, 20:21  [ТС]     много вопросов о вводе-выводе #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <stdio.h>
#include <fstream> 
 
 
using namespace std;
int main()
{   int a;
    freopen("input.txt","r",cin);
    freopen("output.txt","w",cout);
    cin>>a;
    cout<<a;
    return(0);
}
ругается
*: error C2664: 'freopen' : cannot convert parameter 3 from 'std::istream' to 'FILE *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
*: error C2664: 'freopen' : cannot convert parameter 3 from 'std::ostream' to 'FILE *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

пытаюсь перенаправить из файлов в стандартный поток ввода-вывода

Добавлено через 1 минуту
и кстати как комментировать код не по строчкам? Чтобы блоком целым.
конечно я буду учить С++) Тем более потоки довольно красивые.
Yandex
Объявления
03.02.2011, 20:21     много вопросов о вводе-выводе
Ответ Создать тему
Опции темы

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