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

Влияет ли манипуляторы hex,oct,dec на массив символов? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Дана строка. Подсчитать количество букв k в последнем ее слове. http://www.cyberforum.ru/cpp-beginners/thread312920.html
Дана строка. Подсчитать количество букв k в последнем ее слове.
C++ Объявление типов данных. Зачем это нужно? Это как-то связано с выделением памяти. Может, чтобы быстрее управлять данными? :) http://www.cyberforum.ru/cpp-beginners/thread312904.html
ошибка в сортировке C++
#include <iostream.h> #include <fstream.h> #include <conio.h> #include <stdlib.h> #include <string.h> ofstream fout; ifstream fin; struct bileti { char fio;
C++ Бинарные файлы и Stack around the variable was corrupted
Добрый день. Делаю программу (лабу), которая работает с бинарными файлами: Сначала заполняет бинарный файл случайным количеством случайных чисел, а затем - считывает этот файл, из последних его элементов строит матрицу из 25 элементов (5х5), а также подсчитывает сумму отрицательных элементов под главной диагональю. Компилятор MS Visual Studio 2010 при выходе из функции SetTheFile ругается на...
C++ конструктор с параметрами http://www.cyberforum.ru/cpp-beginners/thread312878.html
Не получается конструктор с параметром.. помогите пожалуйста! вот весь класс, нужно чтобы можно было в main писать вот так например: Student Petrov("Fam2","Im1","Otch1"); #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> class Student { private:
C++ Модифицировать элементы массива по заданному правилу Дан двумерный массив целых чисел. Модифицировать его элементы по следующему правилу: ко всем четным элементам массива прибавить последний элемент соответствующей строки, к остальным - первый элемент соответствующего столбца. подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17288 / 5536 / 345
Регистрация: 30.03.2009
Сообщений: 15,064
Записей в блоге: 26
04.06.2011, 19:03     Влияет ли манипуляторы hex,oct,dec на массив символов?
С точки зрения компилятора и хранения данных char - это действительно такой же int, но более короткий. Но при этом массив char'ов как правило трактуется как строка. При этом надо понимать, что строка - это всего лишь массив целых чисел, но числа при этом кодируют не свои значения, а некоторые символы. Это становится критичным только в случае ввода-вывода. Т.е. при печати char'а может возникнуть двоякая ситуация: распечатать его как число или распечатать как символ (который закодирован в виде числа).

В Си'шном printf'е с этим вопросом всё более-менее ясно. При печати любого переданного значения мы явно указываем, каким образом трактовать это значение (%d - как целое число, %c - как символ):

C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main (void)
{
  char c;
 
  c = 70;
  printf ("%d\n", c);
  printf ("%c\n", c);
  return 0;
}
будет напечатано

Код
70
F
Потому что значение 70, рассмотренное (трактованное) как кодировка символа, является буквой F. Это НЕ свойство языка программирования и НЕ свойство процессора. Это некое человеческое соглашение

В Си++ с этим делом несколько иначе сделано. У тебя есть перегруженный оператор << который привязан к типу, но при этом нет возможности указать, а каким же образом трактовать переданное значение. Разработчики сделали так, что для char'а оператор << будет печатать его как символ (т.е. трактовать char как кодировку). При вводе всё тоже самое, только у тебя символьное представление превращается в числовое. Если char в данном случае трактовать как целое число, то введённое значение "0" должно превратиться в однобайтовое число со значением 0. Если же трактовать как символ, то "0" должен превратиться в однобайтовое число, кодирующее символ "0" - это число 48. Оператор >> и cin работают симметрично cout'у и оператору << и трактуют char как символ (т.е. cin >> в отношении char'а работает не так, как в отношении прочих целых типов)

Ну и дополнительно массив char'ов трактуется cin'ом и cout'ом как строка символов. Как в таком случае должен работать hex - хз, ибо hex следует применять при работе с числами, а не символами

Добавлено через 1 минуту
Очередная идиотская статья, написанная "для галочки" ("чтобы было"), из которой начинающий ничерта не сможет понять
 
Текущее время: 05:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru