В настоящее время я работаю через Ускоренный C++ и столкнулся с проблемой в упражнении 2-3.Предупреждение - сравнение между целыми выражениями с подписью и без знака
Краткий обзор программы - программа в основном принимает имя, а затем отображает приветствие в рамке звездочек - т. Е. Привет! окруженный рамками *.
Упражнение - В примере программы авторы используют const int
для определения заполнения (пробелов) между приветствием и звездочками. Затем они просят читателя, как часть упражнения, попросить пользователя ввести информацию о том, насколько велики они хотят отступы.
Все это кажется достаточно простым, я прошу пользователя указать два целых числа (int
) и сохранить их и изменить программу на использование этих целых чисел, удалив те, которые используются автором, при компиляции, хотя я получаю следующее предупреждение ;
Exercise2-3.cpp: 46: предупреждение: сравнение между подписанным и неподписанным целыми выражениями
После некоторых исследований он, как представляется, так как код пытается сравнить одну из представленных выше чисел (int
) до string::size_type
, что хорошо. Но мне было интересно - это означает, что я должен изменить один из целых чисел на unsigned int
? Важно ли явно указывать, подписаны ли мои целые числа или нет?
cout << "Please enter the size of the frame between top and bottom you would like ";
int padtopbottom;
cin >> padtopbottom;
cout << "Please enter size of the frame from each side you would like: ";
unsigned int padsides;
cin >> padsides;
string::size_type c = 0; // definition of c in the program
if (r == padtopbottom + 1 && c == padsides + 1) { // where the error occurs
Выше соответствующие биты кода, то c
имеет тип string::size_type
, потому что мы не знаем, как долго может быть приветствие - но почему я получаю эту проблему сейчас, когда код автора не получил проблема при использовании const int
? Кроме того, любой, кто мог бы завершить Ускоренный C++ - будет ли это объяснено позже в книге?
Я нахожусь в Linux Mint, используя g ++ через Geany, если это помогает или имеет значение (поскольку я читал, что он мог бы определить, что такое string::size_type
).
бы не один предполагаем, что вы хотели бы беззнаковых целых чисел в любом случае? Я не могу думать о логической причине, почему верх и низ должны быть отрицательными. – Woot4Moo
Это правда, и я упомянул об этом в приведенном выше сообщении, но я до сих пор не понимаю, почему эта проблема не возникала в примерной программе автора, когда они использовали const int?Я уверен, что доберусь до этого в книге, но не могу не быть любопытным. –
Лома, которая, очевидно, не давала предупреждения в этой ситуации, потому что int всегда будет 1 ... oops. –