visual Почему эта программа на C ++ работает в некоторых компиляторах, а в других нет? В чем главное отличие компиляторов с ++?

Я написал эту программу для своего класса. Я обнаружил, что он компилируется и прекрасно работает с компилятором GNU g ++. Мой профессор автоматически оценивает наши программы на своем веб-сайте, который использует компилятор Microsoft Visual Studio и выдает ошибку. Я также пробовал эту программу в clang-компиляторе BSD, и я получаю совершенно другую ошибку.

#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdlib>

using namespace std;
double dec2Bin(int value, char binaryString[])
{
int x = 1;
string hold = "";
while(x <= value){
x *= 2;
}
x /= 2;

while(x >= 1){
//cout << x << " ";
if(value > x){
hold += "1";
value -= x;
}
else if(value < x){
hold += "0";
}
else if(value == x){
hold += "1";
value = 0;
//return hold;
}
x /= 2;

//cout << hold << endl;
}
return atoi(hold);

}
int main()
{
char binstr[100];
int num = 0;
cout << "Enter a decimal string: ";
cin >> num;
cout << "its "<<dec2Bin(num, binstr) << endl;

}

Что делает все эти компиляторы такими разными? Что я могу сделать, чтобы мой код работал в любом компиляторе?

-2

Решение

Ваш код неверен (звонки atoi прохождение std::string случай, когда функция ожидает const char * вместо этого), и он не должен компилироваться чисто. Учитесь всегда включать все предупреждения и учитесь понимать их значение.

Однако то, что указано в этом вопросе, действительно может произойти с C ++, и причина кроется в «неопределенном поведении».

Когда вы делаете что-то не так во время выполнения в программе на C ++, в большинстве случаев то, что происходит, совершенно непредсказуемо; он может дать сбой (если вам очень повезло), он может дать вам бессмысленные результаты (если вам немного повезло) или он может работать в любом случае, несмотря на вашу ошибку (самый опасный, но распространенный случай). Конечно, поведение может меняться в зависимости от компилятора, ОС, фазы луны.

Закон Мерфи, примененный к C ++, говорит, что все будет работать в любом случае, пока вы тестируете свою программу, но это будет потерпеть неудачу когда вы находитесь на сцене, показывающей программу на большом экране перед огромной толпой, в которую входят ваш начальник и родители 🙂

1

Другие решения

«Что делает все эти компиляторы такими разными? Что я могу сделать, чтобы мой код работал в любом компиляторе?»

Этот программный код на самом деле не будет работать с любым компилятором c ++. Если у вас была программа, скомпилировавшая программу без каких-либо ошибок или предупреждений, она имеет серьезную ошибку (другое подозрение может заключаться в том, что вы не показываете свой оригинальный код здесь).

Когда я компилирую ваша программа на Ideone Я получаю следующее сообщение об ошибке

prog.cpp:34:21: error: cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '1' to 'int atoi(const char*)'

Это указывает на то, что вы должны использовать

 return atoi(hold.c_str());

так как std::string не преобразуется автоматически в const char*, Упомянутый std::string::c_str() Функция есть, чтобы сделать это.

Также вы скучали по #include <string>и вместо using namespace std; тебе лучше лучше подробно написать std::string,

Вот скомпилируйте чистую версию вашего кода.

5

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector