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

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

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

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

03.02.2011, 09:54. Просмотров 1741. Ответов 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; не работает.
топик будет дополняться) спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2011, 09:54
Я подобрал для вас темы с готовыми решениями и ответами на вопрос много вопросов о вводе-выводе (C++):

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

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

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

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

Кирилица отображается нормально при выводе из программы, но иероглифы при вводе в консоль - C++
Что надо подключить что бы в консоли писать русскими буквами? cin &gt;&gt; kol; cin &gt;&gt; x; cout &lt;&lt; &quot;У вас есть &quot; &lt;&lt; kol &lt;&lt; &quot; &quot; &lt;&lt; x; ...

Почему при вводе числа программа работает нормально, а при вводе буквы уходит в бесконечный цикл? - C++
void mainmenu() { cout &lt;&lt; &quot;Введи число&quot; &lt;&lt; endl; cin &gt;&gt; choice; if (choice == 1) { cout &lt;&lt; &quot;Hello&quot; &lt;&lt; endl; } ...

25
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);
1
Escapable
54 / 54 / 2
Регистрация: 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
1
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 вопрос: сами поняли что написали? В чем вопрос то?
топик будет дополняться) спасибо
Перед дополнением топика,попробуйте книжки почитать. Ваши вопросы - это первый параграф в любой книге по Си/Си++.
Модно начать с книги Керниган, Ритчи "Язык программирования Си"
1
silent_1991
03.02.2011, 14:01
  #5

Не по теме:

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

0
dampir_sanek
150 / 148 / 21
Регистрация: 09.02.2010
Сообщений: 407
03.02.2011, 14:08 #6
silent_1991, да Вы конечно правы. Я имел ввиду это в контексте операторов cout, cin. А так дельное замечание.
0
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-относится только к первому(поэтому нужно ставить для каждой переменной)
1
silent_1991
Эксперт С++
5006 / 3064 / 149
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
03.02.2011, 14:29 #8
Цитата Сообщение от Mogul-kan Посмотреть сообщение
амперсанд &-содержит адрес ячейки
Амперсанд ничего содержать не может, это оператор. Он возвращает адрес ячейки памяти своего операнда.

Не по теме:

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

1
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 вопрос не понял

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

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

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

Добавлено через 1 минуту
Отлично, freopen понял, то что надо.
0
silent_1991
Эксперт С++
5006 / 3064 / 149
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
03.02.2011, 20:11 #14
Цитата Сообщение от AC-93 Посмотреть сообщение
Пошел переписывать все функции делфи в сишку
Это я вам как вариант предложил. Второй вариант - учите Си++, там поудобнее работа с потоками, тоже никаких "дополнительных символов".
0
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 минуту
и кстати как комментировать код не по строчкам? Чтобы блоком целым.
конечно я буду учить С++) Тем более потоки довольно красивые.
0
03.02.2011, 20:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2011, 20:21
Привет! Вот еще темы с ответами:

Составить программу, которая при вводе символа с клавиатуры выво-дит "латинская буква" при вводе латинской буквы и "не латинская бук-ва" во всех остал - C++
Составить программу, которая при вводе символа с клавиатуры выво-дит &quot;латинская буква&quot; при вводе латинской буквы и &quot;не латинская бук-ва&quot;...

Много вопросов - Базы данных
Вопрос 1: Есть ли в SQL такое понятие как, определение имен таблиц. Типа есть БД и в ней нужно узнать сколько существует таблиц и вывести...

Знаки вопросов при выводе из БД - PHP БД
Здравствуйте,сейчас разрабатываю сайт и столкнулся с проблемой кодировок страниц,а именно:я сделал опрос,данные для которого запрашиваются...

Много вопросов по АСПУШКЕ - C# ASP.NET
1) Можно ли в мастер страниц запихнуть другую мастер страниц, если ДА то как? 2) Как сделать многоязычный сайт, в АСПУШКЕ есть свойство...


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

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

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