GVKun编程网logo

c语言console.WriteLine什么意思?(c语言中console是什么意思)

10

想了解c语言console.WriteLine什么意思?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于c语言中console是什么意思的相关问题,此外,我们还将为您介绍关于.net–Con

想了解c语言console.WriteLine什么意思?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于c语言中console是什么意思的相关问题,此外,我们还将为您介绍关于.net – Console.WriteLine()和Debug.WriteLine()之间有什么区别?、.net – 为什么Console.ReadKey()阻止在另一个线程中调用Console.WriteLine的输出?、.NET9 Linux-x64 下 Console.WriteLine 原理、.NET9 Linux-x64下Console.WriteLine原理的新知识。

本文目录一览:

c语言console.WriteLine什么意思?(c语言中console是什么意思)

c语言console.WriteLine什么意思?(c语言中console是什么意思)

console.WriteLine是指输出到屏幕,常用于控制台程序中,输出内容为是一行。Console.WriteLine()方法是将要输出的字符串与换行控制字符一起输出,当次语句执行完毕时,光标会移到目前输出字符串的下一行。

Console.Write()和Console.WriteLine()都是System.Console提供的方法,两着主要用来将输出流由指定的输出装置(默认为屏幕)显示出来.

两着间的差异在Console.WriteLine()方法是将要输出的字符串与换行控制字符一起输出,当次语句执行完毕时,光标会移到目前输出字符串的下一行.

至于Console.Write()方法,光标会停在输出字符串的最后一个字符后,不会移动到下一行。

比如说

Console.WriteLine(a);Console.WriteLine(b)

就会输出在2行的

a
b

Console.Write(a);Console.Write(b)

就在同一行输出

a b

换行输出用:Console.WriteLine
不换行输出用:Console.Write

代码如下

// 在控制台上打印  Hello World!
Console.WriteLine(Hello World !);  //换行打印
            
Console.Write(hello);    //不换行打印
Console.Write(--);
Console.Write(world);
            
Console.ReadKey();//ReadKey()运行完结果不退出控制台

1.png

C#控制台输入/输出语句

Console.Read()方法: 从控制台窗口读取一个字符,返回int值

Console.ReadLine()方法: 从控制台窗口读取一行文本,返回string值

Console.ReadKey()方法: 监听键盘事件,可以理解为按任意键执行

Console.Write()方法: 将制定的值写入控制台窗口

Console.WriteLine()方法: 将制定的值写入控制台窗口,但在输出结果的最后添加一个换行符

再要换行的地方 +“\r\n”+

2.png

相关推荐:c语言教程视频

.net – Console.WriteLine()和Debug.WriteLine()之间有什么区别?

.net – Console.WriteLine()和Debug.WriteLine()之间有什么区别?

Console.WriteLine()和Debug.WriteLine()之间有什么区别?
Console.WriteLine写入标准输出流,无论是在调试还是释放。 Debug.WriteLine写入 Listeners集合中的跟踪侦听器,但仅当在调试中运行时。当应用程序在发布配置中编译时,Debug元素不会被编译到代码中。

当Debug.WriteLine写入Listeners集合中的所有跟踪监听器时,可能会在多个位置输出(Visual Studio输出窗口,控制台,日志文件,注册监听器的第三方应用程序(我相信DebugView这样做)等)。

.net – 为什么Console.ReadKey()阻止在另一个线程中调用Console.WriteLine的输出?

.net – 为什么Console.ReadKey()阻止在另一个线程中调用Console.WriteLine的输出?

我有一个非常简单的控制台应用程序
static void Main(string[] args)
{
    DoAsync();
    Console.ReadKey();
}

这里DoAsync启动任务集并返回不等待任务的完成.
每个任务都写入Console,但在按下键之前不显示ouptut.
当我使用Console.ReadLine时,一切正常.

所以我对ReadKey()的小说很好奇.

解决方法

从 the documentation开始,用于Console.ReadKey():

The ReadKey method waits,that is,blocks on the thread issuing the
ReadKey method,until a character or function key is pressed.

它实际上做的是获取Console.InternalSyncObject上的锁,这会阻止在控制台上进一步操作.

Console.ReadLine()方法不会以这种方式阻塞线程.

阅读this article我猜你安装了.NET 4.5?

.NET9 Linux-x64 下 Console.WriteLine 原理

.NET9 Linux-x64 下 Console.WriteLine 原理

【直播预告】程序员逆袭 CEO 分几步?

原文:.NET9 Linux-x64 下 Console.WriteLine 原理

1. 前言

之前聊过 Windows 下面 Console.WriteLine 的运行过程常用 Console.WriteLine 原理,你知道吗?本篇看下它在 Linu-x64 下面最新.NET9 运行过程

2. 托管代码:

.NET 里面流读写数据一般都是通过 StreamReader StreamWriter 这两个类操作。它们命名空间在:System.IO。托管库:System.Runtime.dll,比如以下简单的操作小例子:

using (StreamWriter writer = File.CreateText("newfile.txt")){    await writer.WriteLineAsync("First line of example");    await writer.WriteLineAsync("and second line");}

StreamWriter 和 StreamReader 分别派生自 TextWriter 和 TextReader。Console.WriteLine 打印出的字符串,则是在 CLR 库里面直接通过 TextWriter 写入到的数据流 / 设备。

比如例子:

static void Main(string[] args){   Console.WriteLine("Call Main");}

Console.WriteLine 会调用 Out.EnsureInitialized 函数,Out 即是 TextWriter 类型,代码如下:​​​​​​​

https://github.com/dotnet/runtime/blob/main/src/libraries/System.Console/src/System/Console.cs        public static TextWriter Out        {            get            {                static TextWriter EnsureInitialized()                {                    lock (s_syncObject)                    {                        if (s_out == null)                        {                            Volatile.Write(ref s_out, CreateOutputWriter(ConsolePal.OpenStandardOutput()));                        }                        return s_out;                    }                }            }        }

EnsureInitialized 函数里面调用了 Volatile.Write 函数,Volatile.Write 函数的意思是,把参数二的值写入到参数一字段里面去。这里的解释就是把 CreateOutputWriter(ConsolePal.OpenStandardOutput ()) 返回的值写入 s_out 字段,s_out 也是 TextWriter 类型。

这里看下 CreateOutputWriter (ConsolePal.OpenStandardOutput ()) 返回的值是啥。CreateOutputWriter 函数如下:​​​​​​​

https://github.com/dotnet/runtime/blob/main/src/libraries/System.Console/src/System/Console.cs
private static TextWriter CreateOutputWriter(Stream outputStream){    return outputStream == Stream.Null ?        TextWriter.Null :        TextWriter.Synchronized(new StreamWriter(            stream: outputStream,            encoding: OutputEncoding.RemovePreamble(),             bufferSize: WriteBufferSize,            leaveOpen: true)            {                AutoFlush = true            });}

可以看到 CreateOutputWriter 返回的依旧是 TextWriter,也就是说 Volatile.Write 把流数据写入到流数据,然后从设备上打印出来。

这里写入的流数据值到底是什么呢?继续看 ConsolePal.OpenStandardOutput () 函数,它返回的是 Stream 类型。​​​​​​​

https://github.com/dotnet/runtime/blob/main/src/libraries/System.Console/src/System/ConsolePal.Unix.cs
public static Stream OpenStandardOutput(){    return new UnixConsoleStream(Interop.CheckIo(Interop.Sys.Dup(Interop.Sys.FileDescriptors.STDOUT_FILENO)), FileAccess.Write);}

这里是 Linux/Unix 下面的操作,OpenStandardOutput 里面实例化了一个 UnixConsoleStream 类,UnixConsoleStream 的构造函数里面,第一个参数是 Interop.CheckIo (Interop.Sys.Dup (Interop.Sys.FileDescriptors.STDOUT_FILENO))。Interop.Sys.Dup 是 Linux 下面进行文件表项操作的函数。CheckIo 则是个检查函数,此处可以忽略。

举个例子,一般的来说 Linux 下面在终端打印一个 hello World 通常通过 printf ("hello Word")

printf -> stdout(标准输出) -> Dup(STDOUT_FILENO) ->终端输出

可见 Linux 下面是通过 Dup 函数传递参数 STDOUT_FILENO 进行终端操作的,UnixConsoleStream 第二个参数是 FileAccess.Write,表示写入字符串。然后把这个 Stream 封装后返回,通过 Volatile.Write 写入到终端流里面打印出来。

那么其实很清晰了,流程大致如下:

Console.WriteLine ->Out.EnsureInitialized -ConsolePal.OpenStandardOutput() -Interop.Sys.Dup ->Volatile.Write

这里面有很多可以讨论和深入的细节点,可以关注公众号:jianghupt,一起学习进步。

.NET9 Linux-x64下Console.WriteLine原理

.NET9 Linux-x64下Console.WriteLine原理

.net9 linux-x64下console.writeline原理

1.前言

之前聊过Windows下面Console.WriteLine的运行过程常用Console.WriteLine原理,你知道吗?本篇看下它在Linu-x64下面最新.NET9运行过程

2.托管代码

在.NET中,通常使用StreamReader和StreamWriter这两个类来进行流读写操作,它们的命名空间位于System.IO中。这些类包含在托管库System.Runtime.dll中。下面是一个简单的示例操作:

using (StreamWriter writer = File.CreateText("newfile.txt"))
{
await writer.WriteLineAsync("First line of example");
await writer.WriteLineAsync("and second line");
}
登录后复制

StreamWriter和StreamReader分别派生自TextWriter和TextReader。Console.WriteLine打印出的字符串,则是在CLR库里面直接通过TextWriter写入到的数据流/设备。

比如例子:

static void Main(string[] args)
{
 Console.WriteLine("Call Main");
}
登录后复制

Console.WriteLine会调用Out.EnsureInitialized函数,Out即是TextWriter类型,代码如下:

源码地址:https://github.com/dotnet/runtime/blob/main/src/libraries/System.Console/src/System/Console.cs

public static TextWriter Out
{
get
{
static TextWriter EnsureInitialized()
{
lock (s_syncObject)
{
if (s_out == null)
{
Volatile.Write(ref s_out, CreateOutputWriter(ConsolePal.OpenStandardOutput()));
}
return s_out;
}
}
}
}
登录后复制

EnsureInitialized函数里面调用了Volatile.Write函数,Volatile.Write函数的意思是,把参数二的值写入到参数一字段里面去。这里的解释就是把CreateOutputWriter(ConsolePal.OpenStandardOutput())返回的值写入s_out字段,s_out也是TextWriter类型。

这里看下CreateOutputWriter(ConsolePal.OpenStandardOutput())返回的值是啥。CreateOutputWriter函数如下:

源码地址:https://github.com/dotnet/runtime/blob/main/src/libraries/System.Console/src/System/Console.cs


private static TextWriter CreateOutputWriter(Stream outputStream)
{
return outputStream == Stream.Null ?
TextWriter.Null :
TextWriter.Synchronized(new StreamWriter(
stream: outputStream,
encoding: OutputEncoding.RemovePreamble(), 
bufferSize: WriteBufferSize,
leaveOpen: true)
{
AutoFlush = true
});
}
登录后复制

可以看到CreateOutputWriter返回的依旧是TextWriter,也就是说Volatile.Write把流数据写入到流数据,然后从设备上打印出来。

这里写入的流数据值到底是什么呢?继续看ConsolePal.OpenStandardOutput()函数,它返回的是Stream类型。

源码地址:
https://github.com/dotnet/runtime/blob/main/src/libraries/System.Console/src/System/ConsolePal.Unix.cs


public static Stream OpenStandardOutput()
{
return new UnixConsoleStream(Interop.CheckIo(Interop.Sys.Dup(Interop.Sys.FileDescriptors.STDOUT_FILENO)), FileAccess.Write);
}
登录后复制

这里是Linux/Unix下面的操作,OpenStandardOutput里面实例化了一个UnixConsoleStream类,UnixConsoleStream的构造函数里面,第一个参数是Interop.CheckIo(Interop.Sys.Dup(Interop.Sys.FileDescriptors.STDOUT_FILENO))。Interop.Sys.Dup是Linux下面进行文件表项操作的函数。CheckIo则是个检查函数,此处可以忽略。

举个例子,一般的来说Linux下面在终端打印一个hello World通常通过printf(“hello Word”)

printf -> stdout(标准输出) -> Dup(STDOUT_FILENO) ->终端输出
登录后复制

可见Linux下面是通过Dup函数传递参数STDOUT_FILENO进行终端操作的,UnixConsoleStream第二个参数是FileAccess.Write,表示写入字符串。然后把这个Stream封装后返回,通过Volatile.Write写入到终端流里面打印出来。

那么其实很清晰了,流程大致如下:

Console.WriteLine ->Out.EnsureInitialized -> ConsolePal.OpenStandardOutput() -> I
登录后复制

以上就是.NET9 Linux-x64下Console.WriteLine原理的详细内容,更多请关注php中文网其它相关文章!

今天的关于c语言console.WriteLine什么意思?c语言中console是什么意思的分享已经结束,谢谢您的关注,如果想了解更多关于.net – Console.WriteLine()和Debug.WriteLine()之间有什么区别?、.net – 为什么Console.ReadKey()阻止在另一个线程中调用Console.WriteLine的输出?、.NET9 Linux-x64 下 Console.WriteLine 原理、.NET9 Linux-x64下Console.WriteLine原理的相关知识,请在本站进行查询。

本文标签: