Заметил ошибку в одной из программ, над которой я работал, извлек код, и это в основном это.
Это беззнаковое сравнение с подписанным междунар и приводит к бесконечному циклу:ошибка сравнения C++ unsigned without loop loop
#include <iostream>
int main()
{
unsigned int i = 0;
while (i < 1000000)
{
printf("%o\n", i);
++i;
}
return 0;
}
Я попытался использовать это вместо того, чтобы:
#include <iostream>
int main()
{
unsigned int i = 0;
while (i < 1000000u)
{
printf("%o\n", i);
++i;
}
return 0;
}
Что я думал, исправить подписанную/без знака сравнения, и он этого не делает, он все еще сталкивается с бесконечным циклом. Поэтому я также попробовал перевести его в unsigned int и без костей, все еще бесконечных циклов.
Использование Visual Studio 2015, полная оптимизация, выпуск компилятора.
Вы уверены, что это бесконечный цикл? Это выглядит очень длинным циклом для меня, тем более, что печать занимает значительное время. Измените значение 'i + = 1000', чтобы увидеть, работает ли условие выхода. – dasblinkenlight
Это не проблема сравнения с подписью/без знака. Значение '1000000' находится в обоих диапазонах, и вы попытались решить проблему, предположив, что это причина этого, но это не сработало. – AhmadWabbi
Почему вы '#include', но затем используйте 'printf'? –
dxiv