Archiwa tagu: C++

Examples of QString::number

Some examples of a very useful Qt function: QString::number. This function is helpful in converting double/float to string. QString, to be more precise 😉

QString::number has got 3 parameters:

  • double n – number, which will be converted
  • char format = ‚g – format: available formats are f, e, E, g, G. Default is ‚g’:
  • int precision = 6 – precision.

Let me show some examples. On the end of each line is a output from console:


//f - float
QString::number(3.14159265359, 'f', 0); //3
QString::number(3.14159265359, 'f', 1); //3.1
QString::number(3.14159265359, 'f', 2); //3.14
QString::number(3.14159265359, 'f', 15);//3.141592653590000

//e - exponential notation
QString::number(3.14159265359, 'e', 15); //3.141592653590000e+00
QString::number(3.14159265359, 'E', 15); //3.141592653590000E+00

//g/G - "general" - in this case: "f"
QString::number(3.14159265359, 'g', 0); //3
QString::number(3.14159265359, 'g', 1); //3
QString::number(3.14159265359, 'g', 2); //3.1
QString::number(3.14159265359, 'g', 15); //3.14159265359

QString::number(3.14159265359, 'G', 2); //3.1
QString::number(3.14159265359, 'G', 15); //3.14159265359

//g/G - "general" - in this case: "e/E"
QString::number(2.5e+5, 'g', 0); //2e+05
QString::number(2.5e+5, 'g', 1); //2e+05
QString::number(2.5e+5, 'g', 2); //2.5e+05
QString::number(2.5e+5, 'g', 15); //250000

QString::number(2.5e+5, 'G', 2); //2.5E+05
QString::number(2.5e+5, 'G', 15); //250000

//comparision with f and e/E:
QString::number(2.5e+5, 'f', 2); //250000.00

QString::number(2.5e+5, 'e', 15); //2.500000000000000e+05
QString::number(2.5e+5, 'E', 2); //2.50E+05

How to run tests in Visual Studio?

How to run tests (unit tests, Selenium or any other in Microsoft Visual Studio? This is quite simple.

My instruction is for Visual Studio Professional 2015.

  1. First – choose test runner (nUnit, MSTest, xUnit or other). I choosed nUnit, because of its popularity.
  2. Install a test runner. I use NuGet to manage dependencies in my projects. To install nUnit, click (right) on project and click „Manage NuGet Packages”, search „nUnit” and install it. A current version number is 3.4.1.
  3. Prepare a simple test. Remember about:
    • making class containing tests public (public class TestClass{})
    • making test methods public (public void TestMethod(){})
    • marking test methodss with [Test] attribute.
  4. Prepared test should be visible in Test Explorer (open this window from menu: Test -> Windows -> Test Explorer). If Test Explorer window is empty and after building project Visual Studio doesn’t display any tests, you need to install nUnit Test Adapter (version 3.x is compatible with nUnit 3.x). To install nUnit Test Adapter, choose „Extensions and Updates” from „Tools” menu, search for „nUnit Test Adapter” and install it. After rebooting Visual Studio and rebuilding project, tests should be displayed in Test Explorer Window.

Przekazywanie parametrów do funkcji – Java kontra C#

Parametry przekazywane do funkcji w Javie są przez wartość, co oznacza że wewnątrz funkcji operujemy na kopii obiektu. I kropka. W przypadku typów prostych faktycznie nie ma problemu:

int mainInt = 60;
System.out.println("mainInt before changes: " + mainInt);
m.changePrimitive(mainInt);
System.out.println("mainInt after changes: " + mainInt);
public void changePrimitive(int localInt){
localInt = 3;
System.out.println("localInt in function: " + localInt);
}

mainInt before changes: 60
localInt in function: 3
mainInt after changes: 60

W przypadku typów obiektowych (referencyjnych) również kopiowany jest obiekt, lecz w praktyce wygląda to nieco inaczej niż w przypadku typów prostych. Czytaj dalej

C# i string contains, equals

Wpis z kategorii – C# dla początkujących.

Tak się składa, że po wielu miesiącach pracy raczej w środowisku javowym, odświeżam sobie C#. Jako że nie do końca ufam swojej pamięci oraz nie uznaję czegoś takiego jak „wiedza teoretyczna” – każdą rzecz muszę doświadczalnie sprawdzić. Programując, często mam otwartą drugą instancję Visuala, w której testuję, czy aby na pewno dana funkcja zachowa się tak, jak podejrzewam. Przeważnie funkcje są grzeczne, a moja pamięć całkiem niezła;) Wolę jednak sprawdzić te drobiazgi, niż potem zastanawiać się, dlaczego mój „produkcyjny” całkiem-duży-kawałek-programu nie działa.

Dziś o stringach w C#, konkretnie o ich porównywaniu i sprawdzaniu, czy string zawiera inny napis.

var part = "this";
var full = "this is some text";
Console.WriteLine(full.Contains(part));//true. Nic nadzwyczajnego.

// Contains jest wrażliwy na wielkości znaków:
Console.WriteLine(full.ToUpper().Contains(part));//false
Console.WriteLine(full.Contains(part.ToUpper()));//false
Console.WriteLine(full.Contains(part.ToUpperFirstLetter()));//false
Console.WriteLine(full.ToUpperFirstLetter().Contains(part));//false

Metoda ToUpperFirstLetter() to Extension method – jej szkic znalazłam na StackOverflow, a oto pełna implementacja:

public static class Extension
{
  public static string ToUpperFirstLetter(this string value)
  {
    return (string.IsNullOrEmpty(value)) ?
      String.Empty
      : (value.First().ToString().ToUpper() + value.Substring(1));
  }
}

Analogicznie jak Contains zachowuje sie metoda Equals.

Wybieranie wartosci w zbindowanym ComboBox

Link do wpisu, gdzie prezentowane jest podejście do problemu, jakim jest wybranie wartości w zbindowanym do DataSource ComboBoxie (C#, Windows Forms):

http://kakaprogramming.blogspot.com/2007/09/selecting-combobox-item.html

W skrócie sztuczka polega na:
cboCategory.SelectedIndex = cboCategory.FindString(category);

Konwersje stringa do floata/double oraz problem niestandardowych separatorów – przecinek, kropka (C#)

C# posiada kilka przydatnych metod do zmiany typu danych z tekstowych do liczbowych (tu: zmiennoprzecinkowych):
zmiennaDouble = Convert.ToDouble(zmiennaString);
zmiennaDouble = double.Parse(zmiennaString);
zmiennaDouble = (double)innaZmiennaLiczbowa;//zmienna musi być liczbowa (int, float itp.), bo rzutowanie ze stringa niestety nie zadziała.

Co w przypadkach niestandardowych, gdy problemem jest przecinek zamiast kropki? Zobaczmy dalej.

Czytaj dalej

Wyświetlanie kodu znaków

Jak uzyskać kod znaku? Pisałam o wyświetlaniu kodów znaków przez linuksową aplikację. Można jednak napisać swój program, który jest banalny w swej prostocie – zwłaszcza w C. I działa niezależnie od systemu:)

W tym celu wystarczy wyświetlić znak (char) jako liczbę (int), np.:

printf("znak entera: %d\n", '\n');
printf("znak spacji: %d\n", ' ');
printf("znak r: %d\n", '\r');
printf("znak a: %d\n", 'a');

Takie rozwiązanie często pojawia się w prostych konsolowych programach, w których nawigacja po aplikacji opiera się o konkretne znaki specjalne, gdzie w pętli while sprawdzamy, czy wpisany znak jest konkretnym klawiszem nawigacyjnym. Jeśli tak, wykonujemy przypisane mu akcje.

Kolorowy tekst w konsoli Linux – C/C++

Czasem, dla zwiększenia czytelności programu, chcielibyśmy pokolorować tekst wyświetlany w konsoli – np. aby błędy krytyczne wypisywać na czerwono, lub po prostu dla uatrakcyjnienia wyglądu programu czy skryptu.

kolorykonsoli
Wcale nie trzeba używać do tego bibliotek graficznych. Z pomocą przychodzą opcje już wbudowane w linuxową konsolę – wystarczy na początku wyświetlanego tekstu wpisać odpowiedni kod koloru – np. jak w poniższym przykładzie programu napisanego w języku C/C++:


#include <stdio.h>
void Reset()
{
  printf("%c[%dm ",0x1B,0);//przywrocenie naturalnych kolorow konsoli
}
#define BG_BLACK 40
#define BRIGHT 1
#define RED 31
#define GREEN 32
#define YELLOW 33
#define BLUE 34
#define PINK 35
#define CYAN 36
#define WHITE 37

int main()
{
  printf("%c[%dm Czerwony\n",0x1B,RED);
  printf("Bez kodu, ale nadal w barwie czerwieni\n");
  printf("%c[%dm Zielony\n",0x1B,GREEN);
  printf("Nadal obowiązuje kolor zielony.\n");
  Reset();
  printf("Po resecie: domyślny kolor wraca. \n");
  getchar();
  return 0;
}

Przekazywanie struktur do funkcji w C

Przekazywanie struktur jako argumentów funkcji w języku C jest zupełnie normalne. Czyli bez wskaźników, gwiazdek i tym podobnych znaczników;) Zupełnie jak w językach wysokiego poziomu jak Java czy C#.

przekazywanie_struktur_do_funkcjo

Można to zrobić na przykład tak, w poniższym kodzie:


typedef struct
{
  char chars[100];
  int counter;
} TXT;

void PrettyFunction(TXT structure)
{
  int i=0;
  for( i = 0; i < structure.counter; i++ )
  {
    printf("%c", structure.chars[i]);
  }
}