В вашем случае вы можете сделать что-то вроде этого:
ifstream file { "file.txt" };
if (!file.is_open()) return -1;
int my_array [3][5]{};
for (int i{}; i != 3; ++i) {
for (int j{}; j != 5; ++j) {
file >> my_array[i][j];
}
}
Лучше всего использовать std::vector
:
vector my_array;
int num { 0 };
while (file >> num)
my_array.emplace_back(num);
Я был рад найти хороший разговор на этом предмете, поскольку я действительно не дал его, очень думал прежде.
, Таким образом, подписанный хороший общий выбор - даже когда Вы абсолютно уверенны, все числа положительны - если Вы собираетесь сделать арифметику на переменной (как в типичном для случая цикла).
, Если Вы собираетесь сделать поразрядные вещи как маски, неподписанные запуски, чтобы иметь больше смысла. Или, если Вы отчаянно пытаетесь получать тот дополнительный положительный диапазон путем использования в своих интересах знакового бита.
Лично, мне нравится подписанный, потому что я не доверяю мне, чтобы остаться последовательным и постараться не смешиваться, два типа (как статья предостерегает от).
В Вашем примере выше, когда 'я' всегда буду положителен и более высокий диапазон был бы выгоден, неподписанный будет полезно. Как то, если Вы используете, 'объявляют' операторы, такие как:
#declare BIT1 (unsigned int 1)
#declare BIT32 (unsigned int reallybignumber)
Особенно, когда эти значения никогда не будут изменяться.
Однако при выполнении бухгалтерской программы, где люди являются безответственными со своими деньгами и постоянно в долгах, Вы совершенно определенно захотите использовать 'подписанный'.
я действительно соглашаюсь со святым, хотя это, которое хорошее эмпирическое правило должно использовать подписанный, какой C на самом деле значения по умолчанию к, таким образом, Вы застрахованы.
C и компиляторы C++ генерирует предупреждение при сравнении подписанных и неподписанных типов; в Вашем примере кода Вы не могли сделать свою переменную цикла неподписанной и иметь компилятор, генерируют код без предупреждений (принимающий, сказал, что предупреждения были включены).
Естественно, Вы компилируете с предупреждениями, превращенными полностью, правильно?
И, Вы полагали, что компиляция с "предупреждениями обработки как ошибки" берет его что один шаг вперед?
оборотная сторона с использованием чисел со знаком - то, что существует искушение перегрузить их так, чтобы, например, значения 0-> n были выбором пункта меню и-1 средством, которые ничто не выбрало - вместо того, чтобы создать класс, который имеет две переменные, один, чтобы указать, выбрано ли что-то и другой для хранения, каков тот выбор. Перед знанием этого Вы тестируете на отрицательный повсеместно, и компилятор жалуется на то, как Вы желаете сравнить выбор пункта меню с количеством выборов пункта меню, которые Вы имеете - но это опасно, потому что они - различные типы. Не делайте этого.
Я думал бы, что, если Ваша экономическая модель диктует, что отрицательное число недопустимо, Вы были бы хотеть показать ошибку или брошенный.
, Имея это в виду, я только что недавно узнал о целых числах без знака при работе над проектом, обрабатывающим данные в двоичном файле и хранящим данные в базу данных. Я намеренно "повреждал" двоичные данные и закончил тем, что получил отрицательные величины вместо ожидаемой погрешности. Я нашел это даже при том, что преобразованное значение, значение не было допустимо для моей экономической модели.
Моя программа не сделала ошибки, и я закончил тем, что получил неправильные данные в базу данных. Было бы лучше, если бы я использовал uint
и имел сбой программы.
size_t
часто хороший выбор для этого, или size_type
, если Вы используете класс STL.