Код C++ не будет работать в Visual Studio из-за ошибок, но ошибки не отображаются

Я написал простую программу для вывода различных единиц измерения температуры с использованием заданных преобразований. Когда я запускаю код в 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;
}
Visual Studios не запускается из-за ошибок сборки, но ошибки не отображаются Это предложение не имеет смысла.
R Sahu 28.05.2019 22:44

Вы получаете ошибку сборки или исключение во время выполнения?

NathanOliver 28.05.2019 22:47

Какие ошибки? Вам не хватает включений для iostream и возвращаемого значения для основной функции.

Thomas Sablik 28.05.2019 22:48
i = 15 — задание.
François Andrieux 28.05.2019 22:50
main требуется для возвращаемого типа int в c++.
François Andrieux 28.05.2019 22:50

Включите возвращаемый тип для основного метода int main() { и посмотрите, что он делает.

Nordii 28.05.2019 22:50

@RSahu Я добавил запятую, чтобы уточнить

jdog 28.05.2019 22:54

@NathanOliver Я получил стандартное сообщение: «Были ошибки сборки. Вы хотите продолжить и запустить последнюю успешную сборку».

jdog 28.05.2019 23:00

@jdog, это все еще не проясняет, что вы видите в своем коде. Есть ли ошибка времени компиляции? Есть ли ошибка времени ссылки? Есть ли ошибка времени выполнения?

R Sahu 28.05.2019 23:00

@jdog Вы смотрели на вкладку «Вывод» или «Список ошибок»?

Algirdas Preidžius 28.05.2019 23:00

Если вы скажете «нет» внизу, есть ли ошибки, перечисленные там в окне сборки?

NathanOliver 28.05.2019 23:00

@ThomasSablik Я уже включил это

jdog 28.05.2019 23:01

Переключите нижнюю панель с вкладки «Список ошибок» на вкладку «Вывод» и посмотрите, дает ли полный вывод сборки лучшую диагностику.

user4581301 28.05.2019 23:02

@RSahu "Это все еще не проясняет, что вы видите в своем коде." Это текст внутри окна сообщения, который вы получаете при попытке запустить проект VS, если в таком проекте есть ошибки компиляции/связывания.

Algirdas Preidžius 28.05.2019 23:02

@Nordii, это сработало, спасибо. Зачем мне нужно включать int с main?

jdog 28.05.2019 23:03

@FrançoisAndrieux спасибо. это тоже помогло.

jdog 28.05.2019 23:04

@jdog 1) «Зачем мне включать int с main» main — это функция. Функции должны иметь возвращаемый тип. Тип возвращаемого значения main определяется стандартом C++. 2) Подумайте об обучении на хорошая книга по С++ вместо случайного кодирования.

Algirdas Preidžius 28.05.2019 23:04

@AlgirdasPreidžius Извините. Теперь я понимаю, что это был глупый вопрос. Я неправильно прочитал мой пример кода.

jdog 28.05.2019 23:06

Рад, что это сработало. Опубликовано объяснение в качестве ответа.

Nordii 28.05.2019 23:13

@ user4581301 Как мне это сделать?

jdog 28.05.2019 23:13
Этот вопрос совершенно не связан, но содержит изображение, показывающее расположение вкладки вывода.
user4581301 28.05.2019 23:15

@Nordii Единственная проблема в том, что теперь форматирование неправильное. Он не создает таблицу, как ожидалось.

jdog 28.05.2019 23:19

Мой ответ состоял в том, чтобы заставить ваш код компилироваться и запускаться. Следующий шаг – получение правильных результатов. Если у вас работает цикл for, не забудьте использовать пробелы и новые строки, чтобы настроить форматирование ваших температур.

Nordii 28.05.2019 23:28
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
23
83
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я исправил некоторые ошибки кодирования. Я думаю, что есть еще какие-то логические ошибки, но теперь код компилируется, и программа должна работать

#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 28.05.2019 23:10

@ user4581301 «Вы уверены, что хотите i <= 15 в цикле for ИМО не наносит никакого вреда.

πάντα ῥεῖ 28.05.2019 23:16

Обратите внимание, что cout.width(20); влияет только на вывод следующий, а не на «каждый элемент в следующем выводе». Также fahrenheit - это `int'...

Bob__ 28.05.2019 23:18

@πάνταῥεῖ Не буду спорить. Я плохо сформулировал комментарий и должен был порекомендовать назвать его потенциальной логической ошибкой. >= — это необычно видеть в цикле for, а необычное обычно является ошибкой.

user4581301 28.05.2019 23:22

Вам нужно добавить тип возвращаемого значения 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?

jdog 28.05.2019 23:42

32.0 гарантирует, что вы действительно получите результат с плавающей запятой для градусов Цельсия. Если хотите, вы можете использовать cout.width, в этом нет ничего плохого. const используется, потому что переменные не изменяются (они создаются заново при каждом запуске цикла)

skeller 28.05.2019 23:48

также вы можете взглянуть на руководство по книге С++

skeller 28.05.2019 23:49

с 32 вместо 32,0 цельсий будет рассчитываться как целое число, преобразованное в число с плавающей запятой после вычисления во время присваивания, .0 обеспечивает использование арифметики с плавающей запятой при расчете

skeller 28.05.2019 23:53

Другие вопросы по теме