C#学习笔记1:输入、输出、注释、变量、类型转换、增量表达式、逻辑运算

-呈阶梯状分布- 122 次阅读 1533 字 发布于 2026-06-22 最后更新于 2026-06-22 C#学习笔记


输出

C#中使用Console.WriteLine("我是字符串");进行换行输出,相当于Python中的print("我是字符串")

使用Console.Write("我是字符串")可以进行不换行输出,相当于Python中的print("我是字符串", end="")

输入

C#中使用Console.ReadLine();可以进行单行字符串输入读取,返回值为string类型,可以使用string user_input = Console.ReadLine();进行输入结果的接收,但是不能直接写入提示词。可以将Console.Write()和Console.ReadLine()结合来达到有提示词的输入的效果。

Console.Read();会进行单字符输入,返回值为int类型,int的数值为输入字符的对应ASCII码表上的数字。但是,注意,回车键(\r)和换行键(\n)都属于输入。所以,当你输入a并按下回车确认输入后,实际是输入了a、\r、\n这三个字符。

然而,char user_input = Console.Read()中,user_input只会存储一个'a'字符,另外两个字符去哪里了呢?

你可以尝试输入以下代码:

using System;

namespace Csharp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("-----start-----");
            int a = Console.Read();
            Console.WriteLine("-----1-----");
            string b = Console.ReadLine();
            Console.WriteLine("-----2-----");
            Console.WriteLine(a);
            Console.WriteLine("-----3-----");
            Console.WriteLine(b);
            Console.WriteLine("------end------");
        }
    }
}

运行结果如下:

-----start-----
a
-----1-----
-----2-----
97
-----3-----

------end------

可以看到,Console.ReadLine()并没有要求我们填写内容,而是直接往后运行,这是为什么呢?

首先输入并不是直接到达变量的,而是有一个输入→缓冲区→变量的过程。

首先,我们输入了三个字符a(ASCII码97)、\r(回车键)、\n(换行)到缓冲区内。
然后,Console.Read()由于只读取单个字符,就取走了字符a放入变量a中,此时,缓冲区剩余\r和\n。
最后,Console.ReadLine()看到缓冲区中还有字符,就没有要求用户输入,而是直接从缓冲区拿走剩余的\r和\n。

我们可以用以下代码验证:

using System;

namespace Csharp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("-----start-----");
            int a = Console.Read();
            int b = Console.Read();
            int c = Console.Read();
            Console.WriteLine(a);
            Console.WriteLine(b);
            Console.WriteLine(c);
        }
    }
}

运行结果如下:

-----start-----
a
97
13
10
Image

查阅ASCII码表可以发现,13和10对应的就是回车键和换行,验证了我们的想法。

不过,一般情况下,我们只需使用Console.ReadLine()即可,缓冲区相关知识仅作为扩展。

注释

C#中注释使用双斜杠//。如://我是注释。

多行注释下,使用/*代表注释开始,*/代表注释结束。即完整的多行注释为/*我是多行注释*/。

变量

C#作为强类型语言,变量定义时必须确定其类型。

比较基础的类型有string,int,double,char,bool。
分别对应字符串,整数,小数(双精度),字符,布尔类型(true和false)

using System;

namespace Csharp
{
    class Program
    {
        static void Main(string[] args)
        {
            int int_value = 1;
            double double_value = 1.1;
            char char_value = 'a';
            string string_value = "123456789";
            bool bool_t = true;
            bool bool_f = false;
        }
    }
}

其中,字符字面量需使用单引号,如'a';字符串字面量则需使用双引号,如"abcde"。bool类型只有两种值,分别为true(真)和false(假)。

可以使用var a = "abcde",此时看似没有定变量a的类型,实际上var会根据a被赋的值的类型确认a的类型,后续a都被视为这一类型,无法改变,和直接声明变量a的类型没有区别。

类型转换

首先,要明确一个概念:类型的大小。

如int,它的值范围约为正负21亿;而char的值的范围为ASCII码表的范围,也就是0~255。
很明显,int类型是比char类型大的。

假如现在有变量a(char类型)和变量b(int类型)
我们可以写int c = a,却不能写char c = b,就是因为int是大容器,而char是小容器。我们只能把小箱子放进大箱子里,而不能把大箱子放进小箱子里。
这样,把小箱子直接放进大箱子的类型转换,就叫隐式转换。

然而,int类型的值尽管可以为正负21亿,int类型变量的值也有可能在0~255之间,这时候想把int类型转为char类型,该怎么办呢?

我们照上面的例子,可以写char c = (char)b,通过在int类型的变量前加上(char)来表明,我就是要强行转换。
这样,强行把大类型转为小类型的转换,就叫显式转换。

int和char类型之间的转换会根据ASCII码表,进行字符和对应表内数字的转换。

我们知道,Python中有int()可以把带有数字的字符串转为int类型,即把"12345"转为了12345。那么,C#中要怎么进行这样的转换呢?

我们可以使用Convert.ToInt32()。在括号内填入string类型的数,会返回对应的int类型的数,和Python中的int()效果一致。

增量表达式

在Python中,如果我们想让一个int变量a自增,会写a += 1,而自减则是 a-=1。

在C#中,我们可以使用a++和a--代替。不需要重新赋值,a++就等效于a = a+1,a--同理。

除了a++,你也可以写++a,这两种写法在你单独一行写是没有任何区别。
但是,当你把他们套入其他式子时就会发生区别。

using System;

namespace Csharp
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 1;
            Console.WriteLine(a);
            Console.WriteLine(a++);
            Console.WriteLine(a);
            Console.WriteLine(++a);
            Console.WriteLine(a);
        }
    }
}

运行结果如下:

1
1
2
3
3

可以看出,++a会先自增,再把自增后的结果返回;而a++则是会先把a返回,再进行自增。自减同理。

逻辑运算

C#中的与或非分别为&&、||、!。对应Python中的and、or、not。

其余没有区别。

顺序结构完结!下一篇讲选择结构~