Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Пара вопросов по заголовкам C и C++ .  (Прочитано 5112 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн yaromir

  • Автор темы
  • Активист
  • *
  • Сообщений: 670
    • Просмотр профиля
Здравствуйте.
Наставьте студента на путь истинный.  ;)
В процессе изучения C++ (я не виноват  ;) , программа такая: с нуля учат C++) возникли некоторые вопросы.
В чем разница между заголовками, к примеру, stdio.h , cstdio ?
У Шилдта читал, что это C и C++ стиль, но C++ потоки ввода-вывода - это iostream. Получается, что cstdio - это C++ обертка для C потоков stdin и stdout.
Тогда что и как лучше использовать/не_использовать?
Разъясните, пожалуйста, эту вещь.
В связи с этим возник еще один вопрос.
В одной из работ нужно было использовать посимвольный ввод с клавиатуры. На http://www.cplusplus.com/ вычитал, что функции из conio.h, в частности getch(), лучше не использовать.
1) Почему этот заголовок лучше не использовать? Насколько понимаю, CONsole Input/Output - это windows-заголовок, а не заголовок стандартной библиотеки. Получается, что это из-за того, что "терминал" windows - сплошной костыль и его использование нужно минимизировать?
2) Для посимвольного считывания с клавиатуры я вместо getch() использовал cin.get(). Сейчас возникла необходимость посимвольного считывания из файла. Простой и неверный путь - fgetch(), но Ъ-программисты не ищут легких путей!  :D Существует ли какой-нибудь метод объекта cin класса istream для считывания из файла? Классы пока знаю чуть менее, чем никак, поэтому для чтения документации по iostream не хватает знаний. Пока просто обращаюсь за ответом на конкретный вопрос с надеждой, что понимание придет позже.
Заранее спасибо.
« Последнее редактирование: 02 Апреля 2009, 20:16:59 от Oldwise »

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: Пара вопросов по заголовкам C и C++ .
« Ответ #1 : 02 Апреля 2009, 21:39:38 »
В чем разница между заголовками, к примеру, stdio.h , cstdio ?
У Шилдта читал, что это C и C++ стиль, но C++ потоки ввода-вывода - это iostream. Получается, что cstdio - это C++ обертка для C потоков stdin и stdout.
Тогда что и как лучше использовать/не_использовать?

Насчет "stdio.h" и "cstdio": С++ как "расширенный" С - Пространства имен.
Насчет "stdio.h" и "iostream", думаю будет понятно из ссылок.

В одной из работ нужно было использовать посимвольный ввод с клавиатуры. На http://www.cplusplus.com/ вычитал, что функции из conio.h, в частности getch(), лучше не использовать.
1) Почему этот заголовок лучше не использовать? Насколько понимаю, CONsole Input/Output - это windows-заголовок, а не заголовок стандартной библиотеки. Получается, что это из-за того, что "терминал" windows - сплошной костыль и его использование нужно минимизировать?

Посмотри: http://ru.wikipedia.org/wiki/Conio.h

P.S.
Думаю, ты и сам мог бы найти все это в интернете. Есть Google, есть Wiki и куча других сайтов.
Также, если хочешь знать, что есть в библиотеках, то смотри справочники или сами заголовочные файлы.

Оффлайн yaromir

  • Автор темы
  • Активист
  • *
  • Сообщений: 670
    • Просмотр профиля
Re: Пара вопросов по заголовкам C и C++ .
« Ответ #2 : 03 Апреля 2009, 13:59:58 »
Спасибо за ссылки.
В том то и дело, что источников полно, но не все авторитетные. Например, википедия пару раз меня подводила.
Чтобы понять, что написано в заголовках, еще не хватает знаний.
А справочник по функциям Шилдта - это моя настольная книга.  ;)
Но иногда встречаются вещи не из стандартной библиотеки, а
1) В винде в VS библиотека msdn... в общем, о полезности хелпов виндов ходят легенды.
2) А в Linuxе к gcc прилагается обзор стандартной библиотеки и функций системных библиотек? Пока я ничего не нашел. Для изучения gtk+ использую этот мануал http://www.zetcode.com/tutorials/gtktutorial
« Последнее редактирование: 03 Апреля 2009, 16:48:38 от Oldwise »

Оффлайн Surzh

  • Участник
  • *
  • Сообщений: 153
    • Просмотр профиля
Re: Пара вопросов по заголовкам C и C++ .
« Ответ #3 : 03 Апреля 2009, 16:12:15 »
Насчет getchar... А чем тебя смущает функция get у того же ifstream?
return 0;

Оффлайн yaromir

  • Автор темы
  • Активист
  • *
  • Сообщений: 670
    • Просмотр профиля
Re: Пара вопросов по заголовкам C и C++ .
« Ответ #4 : 03 Апреля 2009, 16:55:20 »
cin.get(), насколько понимаю, это метод get класса istream. cin - это объект класса istream, но cin , использует стандартный поток ввода - клавиатуру. На http://www.cplusplus.com/ читал, что потоки можно перенаправить, но как это сделать, там не написано.
На авось делать не хочу. Спрашиваю совета у более опытных комрадов.
Допустим, если есть переменная FILE* input_file = fopen(in.txt, "r"); Посимвольное считывание из неё - это cin.get(input_file) ? Насколько понимаю, метод класса - это тоже функция, тогда она должна иметь входные параметры и возвращаемое значение. Вот этого описания мне не хватает.

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: Пара вопросов по заголовкам C и C++ .
« Ответ #5 : 04 Апреля 2009, 03:43:32 »
cin.get(), насколько понимаю, это метод get класса istream. cin - это объект класса istream, но cin , использует стандартный поток ввода - клавиатуру. На http://www.cplusplus.com/ читал, что потоки можно перенаправить, но как это сделать, там не написано.

#include <iostream>
#include <fstream>
using namespace std;

int main () {

  ifstream infile;

  infile.open ("test.txt", ifstream::in);

  while (infile.good())
    cout << (char) infile.get();

  infile.close();

  return 0;
}

http://www.cplusplus.com/reference/iostream/ifstream/open.html

Оффлайн Alexey-S

  • Активист
  • *
  • Сообщений: 296
    • Просмотр профиля
Re: Пара вопросов по заголовкам C и C++ .
« Ответ #6 : 06 Апреля 2009, 23:59:16 »
Как человек старой закалки, постараюсь ответить.
В языке C есть стандартные потоки - stdinp, stdout и stderr.
Есть также работа с консолью - вывод на консоль и чтение с консоли. Если вы предпочли консоль, то данные больше никуда перенаправить нельзя.
Работа с C++ потоками - по своему интересная, но муторная.
Постараюсь объяснить. На практике, чаше всего имеем дело с форматным вводом и выводим. Этот функционал заложен в базовых функциях - fprintf и fscanf.
Для написания нечто подобного с помощью двойных стрелок - дело неблагодарное и трудно читаемое.

Оффлайн digiwhite

  • Активист
  • *
  • Сообщений: 732
  • http://www.welinux.ru
    • Просмотр профиля
    • http://www.welinux.ru
Re: Пара вопросов по заголовкам C и C++ .
« Ответ #7 : 07 Апреля 2009, 09:17:46 »
Ну наверное с другой стороны можно использовать sprintf и потом результат выводить через потоки :) Если сильно хочется :).
Социальная сеть не фанатично настроенных Linuxойдов - http://www.welinux.ru

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Пара вопросов по заголовкам C и C++ .
« Ответ #8 : 07 Апреля 2009, 16:05:31 »
Про conio.h
Этот заголовок есть далеко не везде, например в linux gcc его нет.
Первоначально он появился в Борландовских компиляторах Turbo C, потом Borland C++.

На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

 

Страница сгенерирована за 0.018 секунд. Запросов: 22.