18 / 18 / 1
Регистрация: 27.01.2010
Сообщений: 150
|
|
1 | |
много вопросов о вводе-выводе03.02.2011, 09:54. Показов 3310. Ответов 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
|
03.02.2011, 09:54 | |
Ответы с готовыми решениями:
25
Много вопросов Много вопросов.. Много вопросов Много вопросов |
152 / 150 / 44
Регистрация: 09.02.2010
Сообщений: 407
|
|||||||||||
03.02.2011, 13:06 | 2 | ||||||||||
AC-93,
ответ на вопрос 1: << и >> это операторы языка С++, а printf, scanf - это язык С. Лучше и красивее использовать printf, scanf в программе на С, а >> , << в программе на С++. ответ на вопрос 2: таков синтаксис языка. И разве это имеет значение? Писать printf("%d", i) или как то иначе? Синтаксис языка С - это один из самых красивых и лаконичных синтаксисов. Добавлено через 1 минуту Код
1
|
54 / 54 / 9
Регистрация: 09.11.2010
Сообщений: 120
|
|||||||||||
03.02.2011, 13:20 | 3 | ||||||||||
3. Такие скобки ({}) используются для начальной инициализации массивов.
1
|
152 / 150 / 44
Регистрация: 09.02.2010
Сообщений: 407
|
|
03.02.2011, 13:27 | 4 |
6 вопрос:
%d -подстановка в это место значения типа int, которая указана после запятой. Добавлено через 4 минуты 8 вопрос: сами поняли что написали? В чем вопрос то? Модно начать с книги Керниган, Ритчи "Язык программирования Си"
1
|
silent_1991
|
03.02.2011, 14:01
#5
|
0
|
152 / 150 / 44
Регистрация: 09.02.2010
Сообщений: 407
|
|
03.02.2011, 14:08 | 6 |
silent_1991, да Вы конечно правы. Я имел ввиду это в контексте операторов cout, cin. А так дельное замечание.
0
|
23 / 23 / 9
Регистрация: 24.04.2010
Сообщений: 220
|
|||||||||||
03.02.2011, 14:25 | 7 | ||||||||||
и так работать не будет-вы забыли амперсанд... в языке си это происхоит так
можно сделать так:
1
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
03.02.2011, 14:29 | 8 |
Амперсанд ничего содержать не может, это оператор. Он возвращает адрес ячейки памяти своего операнда.
Не по теме: Что-то я сегодня злобный и к словам придираюсь :D
1
|
18 / 18 / 1
Регистрация: 27.01.2010
Сообщений: 150
|
|||||||||||
03.02.2011, 16:42 [ТС] | 9 | ||||||||||
Огромное спасибо за ответы) По красивости С не соглашусь) Мне операции read и write кажутся более логичными) без всяких доп. символов легко и красиво) Но тут на вкус и цвет)
Читаю программирование на С++ Глушаков. Дуравкин 2008. и С-С++ Культин. То, что пишу тут, оттуда понять не смог. Во всех учебниках дается как работать и писать но тонкости не описаны. 8) упс не так написал, клава незнакомая тут. у меня есть файл из которого читаю, можно ли сделать из этого файла стандартный поток, чтобы читать из него с помощью scanf printf, чтобы не писать каждый раз откуда читаешь fscanf(название,обычные символы для чтения) Нашел вариант в книге что что этого надо прописать
Нашел второй вариант-сделать из файла поток
про 7 вопрос не понял и если я не хочу закорачиваться с амперсандами и типами при чтении, могу забыть про все это и использовать << >> или в каких-то случаях погорю на этом?
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
03.02.2011, 19:44 | 10 |
Отличаете лаконичность языка от самописных функций? Да, функции printf/scanf входят в стандарт, но от этого они не перестают быть функциями, написанными каким-то программистом/группой программистов. Вам никто не мешает написать свои собственные функции работы с потоками, в которых не будет "ничего лишнего", зато будут блэк-джэк и шлю...
0
|
18 / 18 / 1
Регистрация: 27.01.2010
Сообщений: 150
|
|
03.02.2011, 19:47 [ТС] | 11 |
Прочитал эту книжку. В 7 главе как раз об этом, нашел ответ там на 7 вопрос. Остальных нету.
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
03.02.2011, 19:49 | 12 |
Далее.
Пишите либо на Си, используя printf/scanf, либо на Си++, используя потоки. Никогда не смешивайте эту часть языков (работа с потоками). Для Си, чтобы использовать стандартные функции printf/scanf для работы с вашим файлом, а не со стандартными потоками ввода/вывода, существует функция freopen. Поищите про неё в гугле, я её синтаксис не помню.
1
|
18 / 18 / 1
Регистрация: 27.01.2010
Сообщений: 150
|
|
03.02.2011, 20:01 [ТС] | 13 |
Ахаха) Супер) Пошел переписывать все функции делфи в сишку) Интересно примут ли такие решения. Блек джек и шл... и С++ АХаха. Супер
Добавлено через 45 секунд На будущее: В шарпе потоки или стандартный ввод вывод? Добавлено через 1 минуту Отлично, freopen понял, то что надо.
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
03.02.2011, 20:11 | 14 |
Это я вам как вариант предложил. Второй вариант - учите Си++, там поудобнее работа с потоками, тоже никаких "дополнительных символов".
0
|
18 / 18 / 1
Регистрация: 27.01.2010
Сообщений: 150
|
||||||
03.02.2011, 20:21 [ТС] | 15 | |||||
ругается *: 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
|
Freelance
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
|
|
03.02.2011, 20:27 | 16 |
1
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
03.02.2011, 20:54 | 17 |
AC-93, блин. Ну сказал же ясно, не мешать Си и Си++ потоки. А вы это умудрились не в пределах программы сделать, а в пределах операции. Не сможете вы подсунуть сишной функции, которая работает с данными типа FILE *, подсунуть объект плюсового потока.
0
|
18 / 18 / 1
Регистрация: 27.01.2010
Сообщений: 150
|
||||||
03.02.2011, 21:02 [ТС] | 18 | |||||
#include <stdio.h>
FILE *freopen(const char *fname, const char *mode, FILE *stream); Функция freopen() связывает существующий поток с другим файлом. Имя нового файла задается параметром fname, режим доступа — параметром mode, a переназначаемый поток определяется указателем stream. Возможные значения строки mode — те же, что и для функции fopen() (полное их описание можно найти в разделе, посвященном описанию fopen). я и пытался поток с файлом связать
http://www.cplusplus.com/refer... o/freopen/ по-моему функция работает именно как я и хотел...
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||
03.02.2011, 21:20 | 19 | |||||
AC-93, вы понимаете, что у Си-функций printf/scanf и Си++-объектов std::cin и std::cout разные потоки?
Добавлено через 4 минуты Хотя нет, поток-то один, stdin/stdout, так что в принципе можно перенаправить поток в файл. Добавлено через 7 минут Кстати, а чем вас такой вариант не устраивает?
0
|
18 / 18 / 1
Регистрация: 27.01.2010
Сообщений: 150
|
||||||
03.02.2011, 21:25 [ТС] | 20 | |||||
например когда я объявлял поток ifstream in; in.open("input.txt"); то поток обращался через in>>f; без лишних букв c. Далее если я прописал using namespace std; я все равно должен прописывать std перед in и out , вроде же нет... Простите что утомил... но... Добавлено через 3 минуты такой вариант не устраивает тем, что привык в делфи иметь возможность быстро переключаться с клавы-монтор на инпут-оутпут файл(закоментил строчку перенаправления файла в стандартный поток и все), а тут придется переписывать все команды.
0
|
03.02.2011, 21:25 | |
03.02.2011, 21:25 | |
Помогаю со студенческими работами здесь
20
Много вопросов Знаки вопросов при выводе из БД Много вопросов по АСПУШКЕ Много вопросов по stm32 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |