Um aviso - comparação entre expressões inteiras assinadas e não assinadas
Atualmente, estou trabalhando comC ++ acelerado e deparei com um problema no exercício 2-3.
Uma rápida visão geral do programa - o programa basicamente leva um nome e exibe uma saudação dentro de um quadro de asteriscos - ou seja, Olá! cercado emoldurado por * 's.
O exercício - No programa de exemplo, os autores usamconst int
para determinar o preenchimento (espaços em branco) entre a saudação e os asteriscos. Eles então pedem ao leitor, como parte do exercício, que peça ao usuário informações sobre o tamanho que ele deseja que o preenchimento seja.
Tudo isso parece fácil, solicito ao usuário dois números inteiros (int
), armazene-os e altere o programa para usar esses números inteiros, removendo os usados pelo autor, ao compilar, embora eu receba o seguinte aviso;
Exercise2-3.cpp: 46: warning: comparação entre expressões inteiras assinadas e não assinadas
Após algumas pesquisas, parece que o código tenta comparar um dos números inteiros acima (int
) a umstring::size_type
, o que é bom. Mas eu queria saber - isso significa que devo alterar um dos números inteiros paraunsigned int
? É importante declarar explicitamente se meus números inteiros estão assinados ou não?
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
Acima estão os bits relevantes do código, oc
é do tipostring::size_type
porque não sabemos quanto tempo a saudação pode demorar - mas por que agora eu recebo esse problema, quando o código do autor não encontrou o problema ao usarconst int
? Além disso - para qualquer pessoa que possa ter concluídoC ++ acelerado - isso será explicado mais adiante neste livro?
Estou no Linux Mint usando g ++ via Geany, se isso ajuda ou faz alguma diferença (como li que poderia ao determinar o questring::size_type
é).