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


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

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

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

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #15 : 12 Апреля 2008, 15:28:24 »
2 a-v: я не уверен был точно, что 1 - это дескриптор консоли, и да, знаю что он можт быть дескриптором кого угодно  - но у консольного ввода-вывода дескриптор то ли 1 то ли 2...
0 - stdin (стандартный ввод)
1 - stdout (стандартный вывод)
2 - stderr (вывод ошибок)
И никак иначе в Linux. Другое дело, что они могут быть перенаправлены туда-сюда, о чем и хотел поведать a-v.

1) есть ли в с/с++ функции для работы с типом string? (тогда как подключить нужную библиотеку)
Есть. В С++.
include <string>
include <iostream>

int main (void)
{
    string mystring1, mystring2;
    cout << "Enter first string:" << endl;
    cin >> mystring1;
    cout << "Enter second string:" << endl;
    cin >> mystring2;
    cout << "You've entered:" << endl;
    cout << "-" << mystring1 << endl;
    cout << "-" << mystring2 << endl;

    return 0;
}
Аналога string в С я не знаю. Там используются NULL-terminated строки, т.е. char* и пачка функций для работы с ними: strlen, strcat, strcmp...

2) если мне хотса создать окошко с кнопочкой, надо лезть обязательно в какие-то редакторы, типа эклипса того же или мона в gedit все набрать. (скорее всего мона, НО ГДЕ ВЗЯТЬ то, что нужно писать?)
Если хочется совсем низкоуровнево - то нужно смотреть в сторну xlib.
Если хочется уровнем по выше (объектно-ориентированное) - то wxWidgets (хорош под GNOME), QT (хорош под KDE). Обе кроссплатформенные. Будут работать и в винде.

но функция sizeof(s) будет выдавать 200, независимо от того, скока букв впечатали.
sizeof возвращает размер типа. Нельзя ее использовать со строками. В С для получения размера строки используется функция strlen. В С++, используя вышеприведенный класс string, можно использовать метод string::size().

можно написать свою библиотеку, конечно, что я и сделал.
Не изобретайте велосипед. :)

if (s == "NAME") {printf("YES\n");}
Экземпляры класса string можно сравнивать, как вы здесь приводите.

Еще:
printf - это стандартный способ вывода в С.
В С++ принято использовать <iostream> и cin, cout. Хотя printf тоже будет работать.
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Thread

  • Гость
Re: не компилируется программа на C++
« Ответ #16 : 12 Апреля 2008, 15:56:40 »
xwizard: пожалуйста, прочитай какую-нибудь книгу для начинающих про C++. Вот хорошее начало: http://en.wikibooks.org/wiki/C%2B%2B_Programming. Про C тоже рекомендуется почитать.

Комментарий к посту Lion-Simba: стандартный ввод/вывод C и стандартный ввод/вывод в C++ можно использовать в одной программе, однако результат их попеременного применения к одному и тоже же дескриптору неопределён (правда, есть функция std::sync_with_stdio()).

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #17 : 14 Апреля 2008, 10:13:13 »
...
char ** s[200]="";
 char ** s2[200]="";

то работать будет, но функция sizeof(s) будет выдавать 200, независимо от того, скока букв впечатали. + ограничение размера вводимой строки...
...
1) Увы ни каких ограничений здесь нет. Есть большая дырка для перполнения этих самых 200 символов, перезаписи всего что на стеке лежало и добро пожаловать в ад...
2) зачем так много звездочек? Звездная болезнь?
3) Молодой человек, прочтите наконец необходимый минимум литературы, сходите на курсы, уделите больше внимания университету/школе... Не надо пяткой в грудь стучать.
« Последнее редактирование: 14 Апреля 2008, 10:15:44 от Yurror »

Оффлайн xwizard

  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #18 : 14 Апреля 2008, 10:44:31 »
извиняйте, просто процесс познания идет кувырком.
спасибки за наезд, учту...

просто книги по си попадались либо скучные... либо непонятные... либо... те, которые я уже прочитал! :)
// вчера разобрался с модулем <string.h>
надо мне было просто структурированнно это все изучать, а я прочитал пару руководств в инете и полез руками все делать... только руки пока не от туда ростут...

ладно, буду юзать литературу. :)

Оффлайн Const@ntine

  • Новичок
  • *
  • Сообщений: 28
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #19 : 17 Апреля 2008, 23:45:42 »

<stdio.h>

int main(void)
{
    char ** s[]="";
    char ** s2[]="";

    printf("введите 1ую строку:\n");
    scanf("%s", s);  /*Не уверен, что %s, но по-моему так.*/
    printf("введите 2ую строку:\n");
    scanf("%s",s2);
    printf("\n\n\t Введено: \n -%s- \n -%s- \n", s, s2);

    return 0;
}
Я писал char s[]; и все нормально работает.
Цитировать
...то работать будет, но функция sizeof(s) будет выдавать 200, независимо от того, скока букв впечатали. ограничение размера вводимой строки...
функция sizeof() возвращает размер отведённый под переменную char 1 байт, но так как у тебя массив то функция возвращает размер массива.
А по умолчанию все что вводится подобным(s="Hello,World!"; )образом,  в массив заносится как s={'H', 'e', 'l', 'l', 'o' ... , '!', '\0'} и в конце будет нулевой символ, вот на него в цикле и надо проверять, чтобы узнать сколько символов в массиве.
Если использовать char s[];, то узнать длину можно вот так - sizeof(s[0])/sizeof(s).
А это- char ** s[]=""; если я не ошибаюсь, то это указатель на указатель.

Thread

  • Гость
Re: не компилируется программа на C++
« Ответ #20 : 17 Апреля 2008, 23:48:48 »
sizeof(s[0])/sizeof(s).

Это всегда будет равно либо 0, либо 1. И откуда вы берёте такие идеи? ):
Длина строки - strlen().

А это- char ** s[]=""; если я не ошибаюсь, то это указатель на указатель.

...указатель на указатель на массив

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #21 : 18 Апреля 2008, 05:38:43 »
Вот еще мой вариант: указатель на указатель на указатель на символ... :2funny:

Оффлайн Const@ntine

  • Новичок
  • *
  • Сообщений: 28
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #22 : 18 Апреля 2008, 08:51:16 »
Это всегда будет равно либо 0, либо 1. И откуда вы берёте такие идеи? ):
Из учебника)) "В.В. Подбельский, С.С. Фомин Программироввание на Языке Си (ФС)"
Вот только я опять перепутал кое что
sizeof(имя_массива)/sizeof(имя_массива[0]), а не как в прошлом посту))  :idiot2:

Thread

  • Гость
Re: не компилируется программа на C++
« Ответ #23 : 18 Апреля 2008, 09:23:46 »
sizeof(имя_массива)/sizeof(имя_массива[0])

Во-первых, sizeof(char) == sizeof(unsigned char) == sizeof(signed char) == 1 - всегда.
Во-вторых, эта штука выведет на 1 больше, чем надо.
В-третьих, оно всегда будет выводить константное значение вне зависимости от реальной длины содержащейся строки.

man 3 strlen, блин! хватит извращаться, а то так недолго в индуса превратиться.
« Последнее редактирование: 18 Апреля 2008, 09:30:14 от a-v »

Оффлайн Wuffur

  • Новичок
  • *
  • Сообщений: 32
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #24 : 18 Апреля 2008, 09:52:41 »
Во-первых, sizeof(char) == sizeof(unsigned char) == sizeof(signed char) == 1 - всегда.

А точно? Символ русского языка занимает в utf-8 2 байта.
Kernel panic - not syncing: Attempted to kill init!

Thread

  • Гость
Re: не компилируется программа на C++
« Ответ #25 : 18 Апреля 2008, 09:56:29 »
Во-первых, sizeof(char) == sizeof(unsigned char) == sizeof(signed char) == 1 - всегда.

А точно? Символ русского языка занимает в utf-8 2 байта.

char - это целочисленный тип, по стандарту всегда имеющий длину 1 (можно считать char == байт). Для символов Unicode есть wchar_t (размер которого определяется реализацией, но не меньше 8 битов).

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #26 : 18 Апреля 2008, 14:52:31 »
Во-первых, sizeof(char) == sizeof(unsigned char) == sizeof(signed char) == 1 - всегда.

А точно? Символ русского языка занимает в utf-8 2 байта.
Лучше жевать чем говорить. utf-8 это кодировка с переменной длиной символа. Афтар, вы с луны?

Оффлайн Const@ntine

  • Новичок
  • *
  • Сообщений: 28
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #27 : 18 Апреля 2008, 17:53:25 »
sizeof(имя_массива)/sizeof(имя_массива[0])

Во-первых, sizeof(char) == sizeof(unsigned char) == sizeof(signed char) == 1 - всегда.
Во-вторых, эта штука выведет на 1 больше, чем надо.
В-третьих, оно всегда будет выводить константное значение вне зависимости от реальной длины содержащейся строки.

man 3 strlen, блин!...
Ладно, твоя взяла)
Цитировать
... хватит извращаться, а то так недолго в индуса превратиться.
Отжёг

Оффлайн Wuffur

  • Новичок
  • *
  • Сообщений: 32
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #28 : 18 Апреля 2008, 18:30:49 »
Цитировать
Лучше жевать чем говорить. utf-8 это кодировка с переменной длиной символа. Афтар, вы с луны?

Спасибо, я с Проксимо-центавры, только сорвался с орбиты и теперь дрейфую в космосе.
« Последнее редактирование: 18 Апреля 2008, 18:34:31 от Wuffur »
Kernel panic - not syncing: Attempted to kill init!

Оффлайн S.Tokarev

  • Активист
  • *
  • Сообщений: 415
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #29 : 18 Апреля 2008, 18:52:42 »
Тема повеселила... А так скучно начиналась...

 

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