Я написал простую программу для вывода различных единиц измерения температуры с использованием заданных преобразований. Когда я запускаю код в Visual Studio, он не запускается из-за ошибок сборки, но ошибки не отображаются. Я видел подобные вопросы, но не мог найти ответа, который решил бы мою проблему. Мне также было интересно, следует ли мне объявлять переменные до или после основной функции.
#include <iostream>
using namespace std;
int fahrenheit, i=0;
float celsius, absolute_value;
main() {
cout.width(20);
cout << "Fahrenheit" << "Celsius" << "Absolute value\n";
for (i = 0; i = 15; i += 1) {
fahrenheit = i * 20;
celsius = ((fahrenheit - 30) * 5) / 9;
absolute_value = celsius + 273.15;
cout.width(20); /*each item in next output will have width of at least 20*/
cout << fahrenheit << celsius << absolute_value;
}
system("pause");
return 0;
}
Вы получаете ошибку сборки или исключение во время выполнения?
Какие ошибки? Вам не хватает включений для iostream и возвращаемого значения для основной функции.
i = 15
— задание.
main
требуется для возвращаемого типа int
в c++.
Включите возвращаемый тип для основного метода int main() {
и посмотрите, что он делает.
@RSahu Я добавил запятую, чтобы уточнить
@NathanOliver Я получил стандартное сообщение: «Были ошибки сборки. Вы хотите продолжить и запустить последнюю успешную сборку».
@jdog, это все еще не проясняет, что вы видите в своем коде. Есть ли ошибка времени компиляции? Есть ли ошибка времени ссылки? Есть ли ошибка времени выполнения?
@jdog Вы смотрели на вкладку «Вывод» или «Список ошибок»?
Если вы скажете «нет» внизу, есть ли ошибки, перечисленные там в окне сборки?
@ThomasSablik Я уже включил это
Переключите нижнюю панель с вкладки «Список ошибок» на вкладку «Вывод» и посмотрите, дает ли полный вывод сборки лучшую диагностику.
@RSahu "Это все еще не проясняет, что вы видите в своем коде." Это текст внутри окна сообщения, который вы получаете при попытке запустить проект VS, если в таком проекте есть ошибки компиляции/связывания.
@Nordii, это сработало, спасибо. Зачем мне нужно включать int с main?
@FrançoisAndrieux спасибо. это тоже помогло.
@jdog 1) «Зачем мне включать int с main» main
— это функция. Функции должны иметь возвращаемый тип. Тип возвращаемого значения main
определяется стандартом C++. 2) Подумайте об обучении на хорошая книга по С++ вместо случайного кодирования.
@AlgirdasPreidžius Извините. Теперь я понимаю, что это был глупый вопрос. Я неправильно прочитал мой пример кода.
Рад, что это сработало. Опубликовано объяснение в качестве ответа.
@ user4581301 Как мне это сделать?
@Nordii Единственная проблема в том, что теперь форматирование неправильное. Он не создает таблицу, как ожидалось.
Мой ответ состоял в том, чтобы заставить ваш код компилироваться и запускаться. Следующий шаг – получение правильных результатов. Если у вас работает цикл for
, не забудьте использовать пробелы и новые строки, чтобы настроить форматирование ваших температур.
Я исправил некоторые ошибки кодирования. Я думаю, что есть еще какие-то логические ошибки, но теперь код компилируется, и программа должна работать
#include <iostream>
using namespace std;
int main() {
cout.width(20);
cout << "Fahrenheit" << "Celsius" << "Absolute value\n";
for (int i = 0; i <= 15; i += 1) {
int fahrenheit = i * 20;
float celsius = ((fahrenheit - 30) * 5) / 9;
float absolute_value = celsius + 273.15;
cout.width(20); /*each item in next output will have width of at least 20*/
cout << fahrenheit << ' ' << celsius << ' ' << absolute_value << '\n';
}
system("pause");
return 0;
}
Вам не хватает включений для iostream и возвращаемого типа для функции main
. Я также переместил объявление глобальных переменных туда, где переменные используются в первый раз. Цикл for был бесконечным циклом. Поэтому я изменил i = 15
на i <= 15
. Возможно, вам нужно условие цикла, например i < 15
. Я также добавил пробелы и разрывы строк между значениями.
Рекомендовать отмечать и объяснять внесенные изменения. Вы уверены, что хотите i <= 15
в цикле for
?
@ user4581301 «Вы уверены, что хотите i <= 15
в цикле for
?» ИМО не наносит никакого вреда.
Обратите внимание, что cout.width(20);
влияет только на вывод следующий, а не на «каждый элемент в следующем выводе». Также fahrenheit
- это `int'...
@πάνταῥεῖ Не буду спорить. Я плохо сформулировал комментарий и должен был порекомендовать назвать его потенциальной логической ошибкой. >= — это необычно видеть в цикле for
, а необычное обычно является ошибкой.
Вам нужно добавить тип возвращаемого значения int
к подписи main
.
В C++ стандарт ожидает, что функция main
вернет int
, точно так же, как ожидается, что функция будет вызываться main
. Возврат чаще всего используется как код выхода, где 0
обычно означает успешное выполнение без ошибок.
Добавление этого должно позволить вашей программе скомпилироваться и запуститься.
#include <iostream>
int main() {
std::cout << "Fahrenheit\t" << "Celsius\t\t" << "Absolute value\n";
for (int i = 0; i <= 15; i++)
{
const int fahrenheit = i * 20;
const float celsius = ((fahrenheit - 32.0) * 5) / 9;
const float absolute_value = celsius + 273.15;
std::cout << fahrenheit << "\t\t" << celsius << "\t\t"<< absolute_value << "\n";
}
system("pause");
return 0;
}
Исправлены проблемы:
int
using namespace std;
следует избегатьconst
правильностьБольшое спасибо. Можете ли вы дать ответ, используя цикл for и cout.width(), как нам сказали сделать это в конспектах лекций. Зачем использовать const с этими переменными? Итак, я прав, думая, что если Цельсий является числом с плавающей запятой, я часто использую 32,0, а не 32?
32.0 гарантирует, что вы действительно получите результат с плавающей запятой для градусов Цельсия. Если хотите, вы можете использовать cout.width, в этом нет ничего плохого. const используется, потому что переменные не изменяются (они создаются заново при каждом запуске цикла)
также вы можете взглянуть на руководство по книге С++
с 32 вместо 32,0 цельсий будет рассчитываться как целое число, преобразованное в число с плавающей запятой после вычисления во время присваивания, .0 обеспечивает использование арифметики с плавающей запятой при расчете