В настоящее время я работаю с помощью ускоренного С++ и сталкивался с проблемой в упражнении 2-3.
Краткий обзор программы - программа в основном принимает имя, а затем отображает приветствие в рамке звездочек - т.е. Hello! окруженный рамками *.
Упражнение. В примере программы авторы используют const int
для определения заполнения (пробелов) между приветствием и звездочками. Затем они просят читателя, как часть упражнения, попросить пользователя ввести информацию о том, насколько большой они хотят, чтобы прокладка была.
Все это кажется достаточно простым, я предлагаю пользователю два целых числа (int
) и сохранять их и изменять программу для использования этих целых чисел, удаляя те, которые используются автором, при компиляции, хотя я получаю следующее предупреждение;
Exercise2-3.cpp: 46: warning: сравнение выражений с подписью и без знака
После некоторых исследований, похоже, это потому, что код пытается сравнить одно из вышеуказанных целых чисел (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
).