본문 바로가기
공부/C#

C# 공부(1) 1~10

by 라이티아 2024. 8. 21.

쉬는 기간동안 여러 대회를 나가서 수상도 하고 상금도 받으며, 회사에서 인턴마냥 일을 하면서 느꼈던 것이 있다

너무 기초가 안되어 있는 것 같다....

대회에서는 크게 느끼지 못했는데, 회사에서 굴러다니다 보니, 내 코드가 얼마나 쓰레기 같은지 다시 끔 느끼고 있다

가장 큰 문제는, 이때까지 공부한 유니티 스크립트 코딩이 전체적으로 C#에 근거해서 짜야 하는데, 나는 C#을 배운적이 없다.....!

이 무슨 덧셈 뺄셈도 모르면서 곱하기 나누기를 하고 있는 판국인가 싶어서 C# 기초를 파보기로 했다.

 

책은 강벽익님의

"초보자를 위한 C#200제"를 사용했다

part1 ~ 5 까지 나누어져 있는데, 약 100제까지 해보면 대충 감이 올 것 같다.

 

이 카테고리에서는 예제를 전체적으로 정리하는 부분이 될 것 같다.

 

1. 간단한 C# 프로그램을 명령줄에서 컴파일하기

--------------------------------------------------------------------------------------------------------------
using System;

class Hello
{
    static void Main()
    {
        Console.WriteLine("Hello, World");
    }
}

--------------------------------------------------------------------------------------------------------------

 

가장 먼저 보는 안녕, 세상! 코드

가장 무서운 사실 나는 지금 console. 코드를 처음 보는것이다.

이 무슨.......

 

2. 비주얼 스튜디오 설치하고 출력


--------------------------------------------------------------------------------------------------------------

using System;
namespace A002_HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Test");
        }
    }
}
--------------------------------------------------------------------------------------------------------------

 

전체적인 틀을 보여준다. C#에서는 네임 스페이스 -> 클레스 -> 메인

순으로 틀을 잡고 시작한다.

 

3. 콘솔에서 읽고 쓰기
--------------------------------------------------------------------------------------------------------------

using System;

namespace Part1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Hello ");
            Console.WriteLine("World!");
            Console.Write("이름을 입력하세요: ");

            string name = Console.ReadLine();
            Console.Write("안녕하세요, ");
            Console.Write(name);
            Console.WriteLine("님");
        }
    }
}
--------------------------------------------------------------------------------------------------------------

 

cpp에서 쉽게 보든 cin cout의 C#버전이다

아쉽게도 유니티에서 쓸일은 없으니 지식적으로만 알고있으면 될 것 같다.

 

혹시나 유니티에서 프롬포트를 쓸일이 있으면? 쓸?수도

 

4. 변수 선언 및 자료형
--------------------------------------------------------------------------------------------------------------

using System;

namespace Part1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("이름을 입력하세요 : ");
            string name = Console.ReadLine();
            Console.Write("나이를 입력하세요 : ");
            int age = int.Parse(Console.ReadLine());

            Console.Write("안녕하세요, ");
            Console.Write(name + "님!");
            Console.WriteLine("나이는 " + age + "세 입니다.");
        }
    }
}
--------------------------------------------------------------------------------------------------------------

 

C#에서 사용되는 변수형을 알려주는 코드인데, 그냥 cpp랑 동일하다

int, short, double 등등, 그냥 다른 c언어 코드를 알고 있으면 굳이굳이?

 

다만, C#에는 뜬금없이 decimal이라는 자료형도 존제하는데, 128bit짜리 자료형이다.

금융계에서 큰 자리수를 사용할때 쓴다는데.......

그렇다 지식적으로만 알고 있으면 될 것 같다.

 

5. 문자와 문자열
--------------------------------------------------------------------------------------------------------------

using System;

// 5. 문자와 문자열

namespace Part1
{
    class Program
    {
        static void Main(string[] args)
        {
            string a = "hello";
            string b = "h";

            b = b + "ello";
            Console.WriteLine(a == b);
            Console.WriteLine("b = " + b);

            int x = 10;
            string c = b + '!' + " " + x;
            Console.WriteLine("c = " + c);
        }
    }
}
--------------------------------------------------------------------------------------------------------------

 

그냥 string에 +로 문자열을 붙이는걸 보여주는 것이다

 

6. 대입 연산자와 대입문
--------------------------------------------------------------------------------------------------------------

using System;

namespace Part1
{
    class Program
    {
        static void Main(string[] args)
        {
            int i;
            double x;

            i = 5;
            x = 3.141592;
            Console.WriteLine("i = " + i + ", x = " + x);

            x = i;
            i = (int)x;
            Console.WriteLine("i = " + i + ", x = " + x);
        }
    }
}
--------------------------------------------------------------------------------------------------------------

 

코딩의 기초인 =에 대해서 알려주는 코드이다

x = i;
i = (int)x;

흔히 볼 수 있는 형변환 예시도 보여준다

 

7. Console.WriteLine 메소드
--------------------------------------------------------------------------------------------------------------

using System;

namespace Part1
{
    class Progaram
    {
        static void Main(string[] args)
        {
            bool b = true;
            char c = 'A';
            decimal d = 1.234m;
            double e = 1.23456789;
            float f = 1.23456789f;

            int i = 1234;
            string s = "Hello";

            Console.WriteLine(b);
            Console.WriteLine(c);
            Console.WriteLine(d);
            Console.WriteLine(e);
            Console.WriteLine(f);
            Console.WriteLine(i);
            Console.WriteLine(s);
        }
    }
}
--------------------------------------------------------------------------------------------------------------

 

각 자료형들을 출력하면 어떻게 나오는지 보여주는 코드이다.

 

8. Console.WriteLine 메소드로 여러개의 값을 출력
--------------------------------------------------------------------------------------------------------------

using System;

namespace Part1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("10 이하의 소수: {0}, {1}, {2}, {3}", 2, 3, 5, 7);

            string primes;
            primes = String.Format("10 이하의 소수: {0}, {1}, {2}, {3}", 2, 3, 5, 7);
            Console.WriteLine(primes);
        }
    }
}
--------------------------------------------------------------------------------------------------------------

 

Console.WriteLine(A, B, C, D ....)

이런식으로 여러개를 동시에 출력하는 방법에 대한 이야기이다.

c에서는 %d를 사용했던것을 {0}. {1} 이렇게 출력하는 방식으로 되는 것 같다.

 

특이한것은 String.Format()이라는 것인데, 출력에서 사용하는 문법을 string 자료형에 적용할 수 있는 것 이다.

유니티에서 유용하게 사용할 수 있을 것 같다.

 

9. 두 변수를 출력하는 방법
--------------------------------------------------------------------------------------------------------------

using System;

namespace Part1
{
    class Program
    {
        static void Main(string[] args)
        {
            int v1 = 100;
            double v2 = 1.234;
            Console.WriteLine(v1.ToString() + ", " + v2.ToString());
            Console.WriteLine("v1 = {0}, v2 = {1}", v1, v2);
            Console.WriteLine($"v1 = {v1}, v2 = {v2}");

            string test = String.Format($"v1 = {v1}, v2 = {v2}");
            Console.WriteLine(test);
        }
    }
}
--------------------------------------------------------------------------------------------------------------

 

8번에서 사용한 방식의 연장선으로 앞에 $를 붙이게 되면 {}사이에 직접적으로 변수명을 입력하는 것이 허용된다.

 

10. 형식지정자를 사용한 Console.WriteLine메소드
--------------------------------------------------------------------------------------------------------------

using System;

namespace Part1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Clear();

            Console.WriteLine(
                "(C) Currency : {0:C}\n" +
                "(D) Decimal : {0:D}\n" +
                "(E) Scientific : {1:E}\n" +
                "(F) Fixed point : {1:F}\n" +
                "(G) General : {0:G}\n" +
                "(N) Number : {0:N}\n" +
                "(P) Percent : {1:P}\n" +
                "(R) Rount-trip: {1:R}\n" +
                "(X) Hexadecimal: {0:X}\n",
                -12345678, -1234.5678f);
        }
    }
}
--------------------------------------------------------------------------------------------------------------

 

C#에서 사용되는 형식 지정자에 대한 코드

C 통화단위가 붙음

D 정수(십진수)가 됨

E E+003처럼 10의 3제곱 표현을 해줌

F 소수점을 고정해줌

G 위와 비슷하게 작동하지만, 소수점보다 더 큰 단위로 처리함

EX - 1234.5678을 G5로 정리하면 1234.6이 됨

N 천의 자리로, 를 붙여줌

P 퍼센트단위로 변경해줌

R 라운드....트림....? 몰?루

GPT왈

C#에서 형식 지정자 R(또는 Round-trip)은 숫자 값을 문자열로 변환할 때, 가능한 한 정확하게 원래 값을 복원할 수 있도록 형식을 지정하는 방식입니다. R 형식 지정자는 숫자의 정확도를 유지하면서도, 문자열로 변환된 값을 다시 숫자로 변환했을 때 원래의 값과 같도록 합니다.

R 형식 지정자는 주로 부동 소수점 숫자에 사용되며, 수치 데이터가 손실되지 않고 변환될 수 있도록 하는 것이 목적입니다. 이 형식 지정자는 유용할 때가 있지만, 문자열의 길이와 형식이 원래 값의 정확도를 보장하지 않을 수도 있습니다.

예제

다음은 R 형식 지정자를 사용하는 예제입니다:

csharp
double number = 12345.67890123456789; string formatted = number.ToString("R"); Console.WriteLine(formatted);

이 코드에서 formatted 문자열은 R 형식 지정자를 사용하여 부동 소수점 숫자를 문자열로 변환합니다. 결과는 대개 다음과 같은 형태일 것입니다:

코드 복사
12345.678901234567

이 문자열을 다시 숫자로 변환하면 원래 숫자와 동일한 값을 얻을 수 있습니다.

주요 사항

  • R 형식 지정자는 숫자의 정밀도를 유지하기 위해 최대한 정확하게 표현합니다.
  • 이 형식 지정자는 Double 또는 Single(float) 타입에서 주로 사용됩니다.
  • 변환된 문자열이 매우 길어질 수 있으며, 출력의 길이가 일정하지 않을 수 있습니다.

R과 F의 차이점

  • R(Round-trip)은 정확한 원래 값을 복원할 수 있도록 표현합니다.
  • F(Fixed-point)는 소수점 이하의 자릿수를 지정하여 고정된 소수점 형태로 표현합니다. 예를 들어, F2는 소수점 이하 2자리까지 표시합니다.

이처럼 R 형식 지정자는 정확성을 유지하면서도, 숫자를 문자열로 변환하고 다시 숫자로 변환할 때 원래 값을 그대로 복원할 수 있는 유용한 방식입니다.

 

진짜 모름

 

X 16진수로 바꿔줌

 
 
 
 

'공부 > C#' 카테고리의 다른 글

C# 공부(5) 51~56 (Part 1 End)  (0) 2024.08.24
C# 공부(4) 41~50  (0) 2024.08.24
C# 공부(3) 31~40  (0) 2024.08.23
C# 공부(2) 21~30  (0) 2024.08.22
C# 공부(2) 11~20  (0) 2024.08.21