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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
time123
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
#1

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

16.11.2012, 02:40. Просмотров 2441. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2012, 02:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что значит char c[10] (C++):

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

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

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

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

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

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

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

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

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

unget возвращает последний символ, прочитанный из cin назад в поток cin
В результате следующий за ним getline прочитает строку, включая этот символ.
Иначе в c[10] оказалась бы введённая строка без первой буквы
2
alkagolik
Заблокирован
16.11.2012, 03:58 #4
Kuzia domovenok, это извращенный отлов экзепшнов. Такое только во сне может присниться.
0
time123
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
17.11.2012, 00:45  [ТС] #5
вчера устал видимо, гуглил я 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/cpp/str...string/getline http://ru.cppreference.com/w/cpp/io/getline функции видимо разные. но вот не понятно почему передается &c[0] по ссылке... а еще интересно в конце массив выводится, никаких циклов для того чтобы собрать массив, просто "с" указано и все
0
cvetik13
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 5
17.11.2012, 00:57 #6
time123
)) Судя по всему, вы переходите на С++ с паскаля или делфи)
Я так же новичок в С++ и мыслю точно так же, как и вы)
0
Croessmah
Эксперт CЭксперт С++
13205 / 7476 / 839
Регистрация: 27.09.2012
Сообщений: 18,377
Записей в блоге: 3
Завершенные тесты: 1
17.11.2012, 01:05 #7
Цитата Сообщение от time123 Посмотреть сообщение
функции видимо разные.
Вы правы, это разные функции.
Цитата Сообщение от time123 Посмотреть сообщение
здесь девять - это максимальное кол-во символов?
Это сколько символов считать из cin.
Цитата Сообщение от time123 Посмотреть сообщение
передается &c[0] по ссылке...
Передается не по ссылке, а передается адрес первого элемента массива.
Цитата Сообщение от time123 Посмотреть сообщение
никаких циклов для того чтобы собрать массив, просто "с" указано и все
имя массива (c) является указателем на первый элемент массива, поэтому будут выведены все символы от c[0], до завершающего символа '\0'. Если его не окажется в Вашем массиве, то будет прочитана память дальше массива.
0
time123
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
17.11.2012, 01:20  [ТС] #8
еще с указателями разбираюсь, вот к примеру код

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
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
17.11.2012, 01:22 #9
time123, Получите. В данном примере. А если char* попробуете вывести - нужно будет в void* привести, чтобы увидеть адрес.
0
time123
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
17.11.2012, 01:27  [ТС] #10
эм... что? зачем в void переводить? речь ведь идет об указателе на переменную типа char, или нет?
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
17.11.2012, 01:34 #11
time123, Да. По той простой причине, что для указателя на char перегружен оператор вывода в поток.
http://ideone.com/7oAABQ
http://ideone.com/I7XZMz

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

http://ideone.com/BLTjef

В данном случае нулем терминирован, но строка пустая.
0
Croessmah
Эксперт CЭксперт С++
13205 / 7476 / 839
Регистрация: 27.09.2012
Сообщений: 18,377
Записей в блоге: 3
Завершенные тесты: 1
17.11.2012, 01:38 #12
Цитата Сообщение от time123 Посмотреть сообщение
при таком раскладе зачем вообще объявлять к примеру просто int a = 5; если можно с указателями сразу жонглировать
А Вы умеете жонглировать сотней мячей? =)
Цитата Сообщение от time123 Посмотреть сообщение
получается если указать & перед названием переменной или массивом, то получаешь адрес?
Да. Это операция взятия адреса.
Цитата Сообщение от time123 Посмотреть сообщение
и если указать &b что это за адрес...
Указатель же тоже храниться в памяти. Так что это будет адрес указателя =)
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
17.11.2012, 01:39 #13
Croessmah, Кстати, не факт, что это оператор взятия адреса.) И чтобы не влететь в ситуацию, когда это не оператор взятия адреса иногда лучше юзать std::addressof/boost::addressof
0
Croessmah
Эксперт CЭксперт С++
13205 / 7476 / 839
Регистрация: 27.09.2012
Сообщений: 18,377
Записей в блоге: 3
Завершенные тесты: 1
17.11.2012, 01:41 #14
Цитата Сообщение от ForEveR Посмотреть сообщение
Croessmah, Кстати, не факт, что это оператор взятия адреса.) И чтобы не влететь в ситуацию, когда это не оператор взятия адреса иногда лучше юзать std::addressof/boost::addressof
ну это да. Но, думаю, новичку не надо с этим зацикливаться =) ибо он уйдет в такие дебри, откуда потом не выбериться
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
17.11.2012, 01:42 #15
Croessmah, Соглашусь. Просто уточнил.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2012, 01:42
Привет! Вот еще темы с ответами:

Что значит ->? - C++
Наткнулся на непонятное место в непонятном коде. Оно показалось мне особенно непонятным, загуглить не получилось. Что значит: new...

Что значит? - C++
std::cout &lt;&lt; (myCircle.pointInCircle(x, y) ? &quot;In circle&quot; : &quot;Out of circle&quot;); Что означет эта строчка?

что значит /= - C++
Бродил по форуму и наткнулся на вот такой синтаксис temp/=10; а что это значит

что значит ? - C++
что обозначает ? total += Добавлено через 2 минуты вот програма #include &lt;stdio.h&gt; #include &lt;locale.h&gt; #include &lt;conio.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.11.2012, 01:42
Ответ Создать тему
Опции темы

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