Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/56: Рейтинг темы: голосов - 56, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53

Что значит char c[10]

16.11.2012, 02:40. Показов 11711. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
объясните пожалуйста пошагово этот код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main( )
{
   char c[10], c2;
 
   cout << "Type 'abc': ";
   c2 = cin.get( );
   cin.unget( );
   cin.getline( &c[0], 9 );
   cout << c << endl;
}
хочу понять, что значит char c[10] это создание массива из 10 символов?
что делает функция get и unget, и getline... что это за параметры, &c[0] передается по ссылке... а нельзя просто передать, зачем по ссылке передавать? и что девять означает. эх, вот начинаю C++ изучать. конечно непривычно весьма.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.11.2012, 02:40
Ответы с готовыми решениями:

что значит static char?
подскажите что означает static char ret;

Что значит две звездочки у char?
int main(int argc, char** argv)

Что значит запись char massiv[] = "text" ?
Почему не указан размер массива и присваивается строка?

30
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 11
16.11.2012, 02:46
Может тебе поможет, неплохая статья для совсем начинающих, по си++
http://www.programmersclub.ru/main/

К слову вот статья именно про функции, что ты спрашиваешь http://programmersclub.ru/33/
А &c[0] - это адрес начала строки(читай массива)
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
16.11.2012, 02:50
Цитата Сообщение от Lintu Посмотреть сообщение
Может тебе поможет, неплохая статья для совсем начинающих, по си++
http://www.programmersclub.ru/main/
Дружище, ты хоть одно слово unget во всех разделах статьи там видел? ТС не про вывод HelloWorld нас спрашивает, а спрашивает именно про этот метод.

Если уж кидать ссылку, то вот http://www.cplusplus.com/refer... eam/unget/

unget возвращает последний символ, прочитанный из cin назад в поток cin
В результате следующий за ним getline прочитает строку, включая этот символ.
Иначе в c[10] оказалась бы введённая строка без первой буквы
2
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
16.11.2012, 03:58
Kuzia domovenok, это извращенный отлов экзепшнов. Такое только во сне может присниться.
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
17.11.2012, 00:45  [ТС]
вчера устал видимо, гуглил я unget, но вот сейчас решил подробнее разобрать пример который там:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// istream::unget example
#include <iostream>
using namespace std;
 
int main () {
  char c;
  int n;
  char str[256];
 
  cout << "Enter a number or a word: ";
  c = cin.get();
 
  if ( (c >= '0') && (c <= '9') )
  {
    cin.unget();
    cin >> n;
    cout << "You have entered number " << n << endl;
  }
  else
  {
    cin.unget();
    cin >> str;
    cout << " You have entered word " << str << endl;
  }
 
  return 0;
}
получается сначала мы читаем первый символ

c = cin.get();

если это цифра то значит юзер ввел цифру

кстати, а ведь если ввести "1ывдаоывдаоыва" то программа посчитает что ввели мы число. как посоветуете нормально реализовать?

unget значит просто возвращает символ обратно в поток ввода, чтобы заново его считать. с этим разобрался, спасибо.

Только вот насчет строки cin.getline( &c[0], 9 ); здесь девять - это максимальное кол-во символов? странно, разные описания функции getline http://ru.cppreference.com/w/c... ng/getline http://ru.cppreference.com/w/cpp/io/getline функции видимо разные. но вот не понятно почему передается &c[0] по ссылке... а еще интересно в конце массив выводится, никаких циклов для того чтобы собрать массив, просто "с" указано и все
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 5
17.11.2012, 00:57
time123
)) Судя по всему, вы переходите на С++ с паскаля или делфи)
Я так же новичок в С++ и мыслю точно так же, как и вы)
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
17.11.2012, 01:05
Цитата Сообщение от time123 Посмотреть сообщение
функции видимо разные.
Вы правы, это разные функции.
Цитата Сообщение от time123 Посмотреть сообщение
здесь девять - это максимальное кол-во символов?
Это сколько символов считать из cin.
Цитата Сообщение от time123 Посмотреть сообщение
передается &c[0] по ссылке...
Передается не по ссылке, а передается адрес первого элемента массива.
Цитата Сообщение от time123 Посмотреть сообщение
никаких циклов для того чтобы собрать массив, просто "с" указано и все
имя массива (c) является указателем на первый элемент массива, поэтому будут выведены все символы от c[0], до завершающего символа '\0'. Если его не окажется в Вашем массиве, то будет прочитана память дальше массива.
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
17.11.2012, 01:20  [ТС]
еще с указателями разбираюсь, вот к примеру код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{
    int *a = new int; // Объявление указателя для переменной типа int
    int *b = new int(5); // Инициализация указателя
 
    *a = 10;
    *b = *a + *b;
 
     cout << "b is " << *b << endl;
 
    delete b;
    delete a;
 
    return 0;
}
при таком раскладе зачем вообще объявлять к примеру просто int a = 5; если можно с указателями сразу жонглировать
получается если указать & перед названием переменной или массивом, то получаешь адрес? еще такой вопрос, а если просто указать в данном примере cout << "b is " << b << endl; то получу адрес указателя, или нет? и если указать &b что это за адрес...

p.s. cvetik13, а вы, судя по нику, девушка?)
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.11.2012, 01:22
time123, Получите. В данном примере. А если char* попробуете вывести - нужно будет в void* привести, чтобы увидеть адрес.
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
17.11.2012, 01:27  [ТС]
эм... что? зачем в void переводить? речь ведь идет об указателе на переменную типа char, или нет?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.11.2012, 01:34
time123, Да. По той простой причине, что для указателя на char перегружен оператор вывода в поток.
http://ideone.com/7oAABQ
http://ideone.com/I7XZMz

Во втором примере, вместо того что мы хотели выведет бред в первом выводе, т.к. указатель на char не терминирован нулем, потому вывод будет кривой.

http://ideone.com/BLTjef

В данном случае нулем терминирован, но строка пустая.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
17.11.2012, 01:38
Цитата Сообщение от time123 Посмотреть сообщение
при таком раскладе зачем вообще объявлять к примеру просто int a = 5; если можно с указателями сразу жонглировать
А Вы умеете жонглировать сотней мячей? =)
Цитата Сообщение от time123 Посмотреть сообщение
получается если указать & перед названием переменной или массивом, то получаешь адрес?
Да. Это операция взятия адреса.
Цитата Сообщение от time123 Посмотреть сообщение
и если указать &b что это за адрес...
Указатель же тоже храниться в памяти. Так что это будет адрес указателя =)
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.11.2012, 01:39
Croessmah, Кстати, не факт, что это оператор взятия адреса.) И чтобы не влететь в ситуацию, когда это не оператор взятия адреса иногда лучше юзать std::addressof/boost::addressof
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
17.11.2012, 01:41
Цитата Сообщение от ForEveR Посмотреть сообщение
Croessmah, Кстати, не факт, что это оператор взятия адреса.) И чтобы не влететь в ситуацию, когда это не оператор взятия адреса иногда лучше юзать std::addressof/boost::addressof
ну это да. Но, думаю, новичку не надо с этим зацикливаться =) ибо он уйдет в такие дебри, откуда потом не выбериться
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.11.2012, 01:42
Croessmah, Соглашусь. Просто уточнил.
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
17.11.2012, 03:23  [ТС]
так, значит в первом случае получаем адрес указателя, а во втором адрес переменной типа char

C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
int main()
{
    char c = 'a';
    char* pc = &c;
    std::cout << &pc << std::endl;
    std::cout << static_cast<void*>(pc) << std::endl;
}
а здесь вот http://ideone.com/7oAABQ не понятно почему это они вдруг в char сразу 4 символа поместили

в тип void приводится сам указатель, так? тогда а можно его с самого начала объявить как void, если тип char, или это будет неправильно? и еще интересует, на какие именно операции перегружен оператор для char-указателя? любопытно то что здесь http://ideone.com/BLTjef выдается пустая строка... с чего бы это, ну сам символ NULL там походу хранится.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
17.11.2012, 03:34
Цитата Сообщение от time123 Посмотреть сообщение
выдается пустая строка... с чего бы это, ну сам символ NULL там походу хранится.
Вообще то принято, чтобы строка заканчивалась символом '\0', поэтому у Вас пустая строка.
попробуйте вот этот код:
C++
1
2
3
4
5
6
7
#include <iostream>
 
int main()
{
    char* pc = "MyString\0Hello World";
    std::cout << pc << std::endl;
}
Цитата Сообщение от time123 Посмотреть сообщение
тогда а можно его с самого начала объявить как void, если тип char, или это будет неправильно?
Указатель void, это указатель на какой-то кусок памяти.
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
17.11.2012, 03:40  [ТС]
тоесть указатель на указатель? или указатель на какой-то диапазон адресов памяти?

Мне бы еще разобраться с передачей значений в функцию, вот например часть кода

string mumble( int *array, int size )

что если передать int array
вообще вот если не ошибаюсь то можно передавать в функции переменные, массивы со знаками & *
если передать без знака то передается просто значение переменной (не по ссылке), если указать знак & то передается адрес ячейки памяти, а если указать со знаком * то передается значение по данному указателю, верно? то есть в этом примере array - это походу указатель на начало массива видимо, или нет... вот кусок этого кода

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <sstream>
string program_name( "our_program" );
string version( 0.01 );
// ...
 
string mumble( int *array, int size )
{
   if ( ! array ) {
      ostringstream out_message;
 
      out_message << "ошибка: "
                  << program_name << "--" << version
                  << ": " << __FILE__ << ": " << __LINE__
                  << " -- указатель равен 0; "
                  << " а должен адресовать массив.\n";
 
      // возвращаем строку, в которой находится сообщение
      return out_message.str();
   }
   // ...
}
насчет "MyString\0Hello World" ну я в курсе что это символ конца строки, таким образом в том примере это пустая строка получается
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
17.11.2012, 04:00
Цитата Сообщение от time123 Посмотреть сообщение
тоесть указатель на указатель? или указатель на какой-то диапазон адресов памяти?
Указатель на ЧТО-ТО.

Пример:
http://ideone.com/Hawfby
Цитата Сообщение от time123 Посмотреть сообщение
то есть в этом примере array - это походу указатель на начало массива видимо
судя по тексту ошибки - да. Но может быть и указатель на переменную типа int, собственно массив из одного элемента
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 5
18.11.2012, 18:18
Цитата Сообщение от time123 Посмотреть сообщение

p.s. cvetik13, а вы, судя по нику, девушка?)
Логично, что девушка. Ето что-то меняет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.11.2012, 18:18
Помогаю со студенческими работами здесь

Строки: почему компилятор пишет , что переменная типа char несовместима с const char?
char pass; int password( int d) { int m; char p; cout &lt;&lt; &quot;Введите пароль для доступа к информации:&quot;; cin &gt;&gt; p; ...

Что означает такая запись char *smt=new char[1]?
что означает такая запись char *smt=new char?

Sleep(8000) - что значит? На что можно заменить в борланд с++?
Не распознаёт Sleep(8000) . Если за комментировать пишет что f заданно но не используется. Как исправить? ...

Что значит Handle hf? Что в эту функцию нужно передавать
мне нужно создать функцию Node * ReadNode(HANDLE hf); (Node это структура) Так вот вопрос в том что значит Handle hf? Что в эту функцию...

Что значит ^= ?
нашел в коде данную фичу (язык С) не понимаю что конкретно она выполняет пример из кода ... mistake ^= i+1; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru