Visual Studio и C++/C#/Python: решение мелких проблем
сейчас в статье: 23 ответа Старая заметка для новых версий продукта уже не актуальна, а проблемы остаются. Попробуем здесь отвечать на типовые "мелочи", касающиеся как работы новых версий Visual Studio 2019, 2022, так и типовых затруднений новичков при решении задач. См также: типовые ошибки, каверзные вопросы.
Версии ниже указанных на сегодняшний день использовать не рекомендую.
Часть материала уже была в блоге, так что ответы могут представлять собой ссылки. Вопросы не упорядочены, будут добавляться по мере поступления.
1. Не работают многие функции, пишет, что устаревшие, а в консоли Qt работают
Укажите Волшебную Директиву. Более подробная заметка.
2. Скачал из интернета проект, а файл дизайнера формы недоступен после открытия проекта, хотя он есть в архиве
Разблокируйте файл средствами Windows перед открытием проекта. То же самое относится к файлу ресурсов .resx
.
3. Где в Studio поменять стандарт C++?
Командой верхнего меню Проект - Свойства - C/C++ - Язык - Стандарт языка C++.
4. Нет числа "Пи" в C++
Есть.
5. После выхода из Studio не могу удалить папку последнего проекта без перезагрузки компьютера
Снимите через диспетчер задач процесс PerfWatson2 и удаляйте. Эта шняга - давняя беда "Студии". При работе с C# может понадобиться также снять процесс VBCSCompiler.
6. Как перевести время из минут в часы и минуты и напечатать с лидирующими нулями (07:05)?
//time - минуты, переводим в часы h [0..23] и минуты m [0..59] #include <iostream> #include <iomanip> using namespace std; //... int time = 60 * 24 + 1, h = time / 60 % 24, m = time % 60; cout << setw(2) << setfill('0') << h << ':' << setw(2) << m << endl; //00:01
7. Как взять синус (или другую функцию) от угла в градусах, а не в радианах?
//Синус от 30 градусов, а не радиан: #include <iostream> #define _USE_MATH_DEFINES #include <math.h> using namespace std; //... cout << sin(30 * M_PI / 180) << endl; //0.5
8. Как перевести денежную сумму, заданную числом double, в рубли и копейки?
//Денежная сумма double переводится в рубли и копейки: #include <iostream> #include <cmath> //... double d = 37.112; int rub = floor(d), cop = (d - floor(d))*100; cout << rub << ' ' << cop; //37 11
9. Как ввести из консоли символ (однобайтовой) кириллицы и проверить, что он введён?
//Ввести символ кириллицы и проверить, что он введён #include <iostream> #include <windows.h> //... SetConsoleCP(1251); SetConsoleOutputCP(1251); unsigned char c; std::cin >> c; if (c >= (unsigned char)'А' && c <= (unsigned char)'я' || c == (unsigned char)'ё' || c == (unsigned char)'Ё') std::cout << "Русская буква";
10. Как проверить выполнение равенства с заданной точностью для вещественных чисел?
//Когда две части равенства отличаются на заданную величину... //"Отличие" - это модуль разности. #include <cmath> //... double left = 80, right = 78, delta = 3; if (abs(left - right) <= delta) { //left отличается от right не более, чем на delta }
И вот тут.
11. Как упорядочить три числа по возрастанию?
//Упорядочиваем значения a,b,c по возрастанию #include <iostream> //... double a = 5, b = 4, c = 3, t; if (a > b) { t = a; a = b; b = t; } if (a > c) { t = a; a = c; c = t; } if (b > c) { t = b; b = c; c = t; } //теперь точно a <= b <= c std::cout << a << ' ' << b << ' ' << c; /* Это не оптимальный алгоритм. В общем виде, для n чисел при таком подходе понадобится n*(n-1)/2 сравнений */
12. Читаю вещественные числа из текстового файла. Целую часть от дробной отделять точкой или запятой?
Если читаете Си-средствами - локаль влияет. Если через std::ifstream
и оператором >>
, то используйте точку.
13. Какая папка "текущая" для размещения туда файла данных?
При отладке проекта C++ из среды - папка с исходником Source.cpp
, например, как на картинке:
Текущая папка при отладке проекта
При отладке или запуске проекта C# из среды - та папка, где находится .exe-файл, например,
C:\Users\ЮЗЕР\source\repos\ConsoleApp1\bin\ПРОФИЛЬ\
, где ЮЗЕР
- название папки пользователя, ПРОФИЛЬ
- выбранная в среде конфигурация, Debug
или Release
.
При запуске .exe-файла вне среды - в любом случае та папка, где находится .exe-файл.
14. Как извлечь из натурального числа цифры?
//Извлечь в цикле цифры натурального числа, начиная с младшей #include <iostream> //... unsigned int n = 123456; do { unsigned int d = n % 10; std::cout << d << ' '; n /= 10; } while (n > 0);
15. А записать их в массив?
//Составить и вывести в консоль динамический массив из цифр натурального числа. #include <iostream> int main() { long int val = 412312423; int n = floor(log10(val)) + 1; int *arr = new int [n]; int k = n - 1; while (val) { arr[k--] = val % 10; val /= 10; } for (int i = 0; i < n; i++) std::cout << arr[i] << ' '; delete[] arr; return 0; }
16. Как программно узнать длину массива, если она не задана при описании или именованной константой?
//Узнать длину статического массива "на лету" #include <iostream> //... int arr[] = {5,-4,3,-2,1}; int n = sizeof(arr) / sizeof(arr[0]); std::cout << n;
17. Консоль открывается и сразу закрывается, как сделать останов без дополнительных операторов ожидания ввода?
Нажимайте Ctrl+F5 вместо F5 (для проектов на C#) или для C++ в верхнем меню Проект - Свойства (Имя_Проекта) - Компоновщик - Система пункт "Подсистема" измените на
Консоль(/SUBSYSTEM: CONSOLE)
18. Как настроить скобочный стиль для исходных текстов в Studio?
...например, чтобы сделать K&R (Керниган-и-Ритчи, он же Единственно Правильный)?
В верхнем меню заходим Средства - Параметры - Текстовый редактор - C# (или C/C++) - Стиль кода - Форматирование - Новые строки.
Там настраиваем нужный стиль, глядя на образцы в нижней части окна.
Скобки ставит кто прилично - программирует отлично :)
19. Как на C# узнать количество цифр в целом числе?
int n = -12345; int len = Math.Abs(n).ToString().Length; Console.WriteLine (len);
20. Почему у меня на C# неправильно округляются вещественные числа?
Видимо, речь идёт вот об этом (см. также ссылку):
using System; namespace ConsoleApp1 { class Program { static void Main () { //По умолчанию в .NET округление "банковское", Round(0.5)==0 Console.WriteLine (Math.Round (0.5)); //0 Console.WriteLine (Math.Round (0.25, 1)); //0.2 Console.WriteLine (Math.Round (0.245, 2)); //0.24 //А так будет арифметическое, Round(0.5)==1 Console.WriteLine (Math.Round (0.5, MidpointRounding.AwayFromZero)); //1 Console.WriteLine (Math.Round (0.25, 1, MidpointRounding.AwayFromZero)); //0.3 Console.WriteLine (Math.Round (0.245, 2, MidpointRounding.AwayFromZero)); //0.25 Console.ReadLine (); } } }
21. Как заставить Visual Studio автоматически сохранять новые файлы исходников C++ в UTF-8?
Верхнее меню Средства - Параметры - Окружение - Документы, включить опцию "Сохранять документы в формате Юникод".
22. В Python-проекте из командной строки разработчика не работает команда pip install
С сообщением "из-за новых ограничений системы безопасности установка из интернета может не работать" (оригинал).
Под учётной записью администратора используйте файл-менеджер или команду cmd
, запущенную не из Studio.
Перейдите в папку скриптов Питона (например, C:\Users\Admin\AppData\Local\Programs\Python\Python312\Scripts\
), а там уже выполняйте
pip install что-то
23. Как красиво отформатировать (выровнять) код в файле исходного текста C++/C#?
Форматировать фрагмент кода - жмём Ctrl + K, отпускаем и следом жмём Ctrl + F.
Форматировать весь код - жмём Ctrl + K, отпускаем и следом жмём Ctrl + D.
Настройки форматирования см. в ответе 18.
04.03.2023, 10:32 [509 просмотров]