БлогNot. Visual Studio и C++/C#: решение мелких проблем

Visual Studio и C++/C#: решение мелких проблем

сейчас в статье: 21 ответ Старая заметка для новых версий продукта уже не актуальна, а проблемы остаются. Попробуем здесь отвечать на типовые "мелочи", касающиеся как работы новых версий 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?

Верхнее меню Средства - Параметры - Окружение - Документы, включить опцию "Сохранять документы в формате Юникод".

04.03.2023, 10:32 [428 просмотров]


теги: c# программирование c++ ошибка памятка studio

К этой статье пока нет комментариев, Ваш будет первым