C学习笔记25: 控制台应用程序开发精讲

C学习笔记25: 控制台应用程序开发精讲介绍 C 控制台程序开发的数据输入与获取 命令行参数解析 控制台窗口设置的相关细节

目录

1 基础知识

1.1 名称空间

1.2 接口(interface)

2 控制台的操作

2.1 输出文本到控制台

2.2 获取键盘的输入

2.3 命令行参数

2.4 设置控制台的外观

2.5 控制台的窗口区分析


1 基础知识

1.1 名称空间

命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式。

在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。

定义命名空间:命名空间的定义是以关键字 namespace 开始,后跟命名空间的名称。

using 关键字:表明程序使用的是给定命名空间中的名称。

嵌套命名空间:命名空间可以被嵌套,即您可以在一个命名空间内定义另一个命名空间。

               名称空间 . 对象模型  对象实例 = new 名称空间 . 对象模型();

名称空间 描述
using.System 包含系统定义数据类型、事件、时间处理程序的基本类
using.System.Data 提供数据访问功能的名称空间和类
using.System.IO 包含数据流读写相关的类
using System.Windows.Form windows窗体开发所需要的窗体类
using System.Web 所有网站开发所需要的类

1.2 接口(interface)

接口定义了所有类继承接口时应遵循的语法合同。

接口定义了语法合同 “是什么” 部分,派生类定义了语法合同 “怎么做” 部分。

接口定义了属性、方法和事件的声明,使用interface关键字,通常以字母【 I 】开头,默认使用public修饰符,这些都是接口的成员。

接口只包含了成员的声明。成员的实现是派生类的责任。接口提供了派生类应遵循的标准结构。

接口使得实现接口的类或结构在形式上保持一致。

C学习笔记25: 控制台应用程序开发精讲

接口的特点:

  • 继承于接口的类必须实现接口中的所有方法;继承于类的类不一定要实现所有的成员
  • 类只能继承一个基类,但是类可以继承多个接口,用逗号隔开;多个接口的所有成员必须实现
  • 接口是不能实例化的

例子:

C学习笔记25: 控制台应用程序开发精讲

2 控制台的操作

2.1 输出文本到控制台

函数名称 功能
Console.Write() 两种重载版本:第一是将传入的参数对象视为字符串直接输出;第二种为输入格式化字符串
Console.WriteLine() 每输出一次,就会在字符串的最后加上一个换行符

输出格式化字符串:

C学习笔记25: 控制台应用程序开发精讲

使用0开始的{}标记对应的索引位置应输出的对象,示例如下:

C学习笔记25: 控制台应用程序开发精讲

C学习笔记25: 控制台应用程序开发精讲

2.2 获取键盘的输入

函数名称 功能
Console.Read() 每次仅读取一个字符,在用户输入【ctrl + z】时返回-1;否则在用户按下【Enter】后,读取输入的第一个字符
Console.ReadKey() 读取用户输入的字符,返回一个ConsoleKeyInfo的结构
Console.ReadLine() 每次读入一行,以字符串形式返回,得到的字符串不包括最后输入的换行符

用法要点:

  • 单独调用Console.Read();只会读取输入的第一个字符,其后的字符会被丢弃
int k = Console.Read(); Console.WriteLine("{0}-{1}",(char)k, k.ToString());

C学习笔记25: 控制台应用程序开发精讲

  • ConsoleKeyInfo结构
#region 程序集 mscorlib.dll, v4.0.30319 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\mscorlib.dll #endregion namespace System { // 摘要: // 描述按下的控制台键,包括控制台键表示的字符以及 Shift、Alt 和 Ctrl 修改键的状态。 [Serializable] public struct ConsoleKeyInfo { // // 摘要: // 用指定的字符、控制台键和修改键初始化 System.ConsoleKeyInfo 结构的新实例。 // // 参数: // keyChar: // 与 key 参数对应的 Unicode 字符。 // // key: // 与 keyChar 参数对应的控制台键。 // // shift: // true 指示按下了 Shift 键;否则为 false。 // // alt: // true 指示按下了 Alt 键;否则为 false。 // // control: // true 指示按下了 Ctrl 键;否则为 false。 // // 异常: // System.ArgumentOutOfRangeException: // key 参数的数值小于 0 或大于 255。 public ConsoleKeyInfo(char keyChar, ConsoleKey key, bool shift, bool alt, bool control); // 摘要: // 指示指定的 System.ConsoleKeyInfo 对象是否不等。 // // 参数: // a: // A System.ConsoleKeyInfo object. // // b: // 一个 System.ConsoleKeyInfo 对象。 // // 返回结果: // 如果 a 不等于 b,则为 true;否则为 false。 public static bool operator !=(ConsoleKeyInfo a, ConsoleKeyInfo b); // // 摘要: // 指示指定的 System.ConsoleKeyInfo 对象是否相等。 // // 参数: // a: // A System.ConsoleKeyInfo object. // // b: // 一个 System.ConsoleKeyInfo 对象。 // // 返回结果: // 如果 a 等于 b,则为 true;否则为 false。 public static bool operator ==(ConsoleKeyInfo a, ConsoleKeyInfo b); // 摘要: // 获取当前 System.ConsoleKeyInfo 对象表示的控制台键。 // // 返回结果: // 标识按下的控制台键的 System.ConsoleKey 值。 public ConsoleKey Key { get; } // // 摘要: // 获取当前 System.ConsoleKeyInfo 对象表示的 Unicode 字符。 // // 返回结果: // 与当前 System.ConsoleKeyInfo 对象表示的控制台键对应的 System.Char 对象。 public char KeyChar { get; } // // 摘要: // 获取 System.ConsoleModifiers 值的一个按位组合,指定与控制台键同时按下的一个或多个修改键。 // // 返回结果: // System.ConsoleModifiers 值的按位组合。没有默认值。 public ConsoleModifiers Modifiers { get; } // 摘要: // 获取一个值,该值指示指定的 System.ConsoleKeyInfo 对象是否等于当前的 System.ConsoleKeyInfo 对象。 // // 参数: // obj: // 要与当前 System.ConsoleKeyInfo 对象进行比较的 System.ConsoleKeyInfo 对象。 // // 返回结果: // 如果 obj 等于当前的 System.ConsoleKeyInfo 对象,则为 true;否则为 false。 public bool Equals(ConsoleKeyInfo obj); // // 摘要: // 获取一个值,该值指示指定的对象是否等于当前的 System.ConsoleKeyInfo 对象。 // // 参数: // value: // 要与当前的 System.ConsoleKeyInfo 对象进行比较的对象。 // // 返回结果: // 如果 value 为等于当前的 System.ConsoleKeyInfo 对象的 System.ConsoleKeyInfo 对象,则为 true;否则为 // false。 public override bool Equals(object value); // // 摘要: // 返回当前 System.ConsoleKeyInfo 对象的哈希代码。 // // 返回结果: // 32 位有符号整数哈希代码。 public override int GetHashCode(); } }
  • Console.ReadLine()
string k = Console.ReadLine(); Console.WriteLine(k);
C学习笔记25: 控制台应用程序开发精讲
仅输入【ctrl + z】读取为空

 

C学习笔记25: 控制台应用程序开发精讲
在字符串中输入【ctrl + z】

2.3 命令行参数

为应用程序指定命令行参数

C学习笔记25: 控制台应用程序开发精讲

Main函数的args参数就是可以从外部向应用程序传递的命令行参数,解析该参数的方法有两种:直接解析法:直接解析用户给args参数传递的数据,但该方法只能在Main函数中对args传入数据进行解析;如果需要在程序的其他位置对传入的命令行参数进行解析,就需要使用Environment.GetCommandLineArgs方法。

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace main { class Program { static void Main(string[] args) { foreach (string str in args) { Console.WriteLine("直接解析法:" + str);//用户为输入命令行时,args为空 } Console.WriteLine(); //Environment.GetCommandLineArgs解析法 var paras = Environment.GetCommandLineArgs(); foreach(string str in paras) { Console.WriteLine("Environment.GetCommandLineArgs方法" + str);//用户为输入命令行时,paras为exe的路径 } } } }

程序运行结果

C学习笔记25: 控制台应用程序开发精讲

 

2.4 设置控制台的外观

 Console.Title = "控制台应用程序精讲";//设置控制台的标题 Console.ForegroundColor = ConsoleColor.Cyan;//设置背景色 Console.BackgroundColor = ConsoleColor.Blue;//设置前景色 Console.ResetColor();//将前景色和背景色重置为默认值

2.5 控制台的窗口区分析

控制台包括窗口区和缓冲区两个概念,如下图:

C学习笔记25: 控制台应用程序开发精讲

 

 Console.Title = "控制台应用程序精讲"; Console.ForegroundColor = ConsoleColor.Cyan; Console.BackgroundColor = ConsoleColor.Blue; Console.SetWindowSize(50, 33); Console.SetBufferSize(70, 100);//设置缓冲区为70列8行 Console.SetWindowPosition(0, 0);//控制台窗口相对于缓冲区的位置 Console.WriteLine("控制台的缓冲区宽度:{0}", Console.BufferWidth.ToString()); Console.WriteLine("控制台的缓冲区高度:{0}", Console.BufferHeight.ToString()); Console.WriteLine("控制台的最大行数:{0}", Console.LargestWindowHeight); Console.WriteLine("控制台的最大列数:{0}", Console.LargestWindowWidth); Console.WriteLine("控制台的窗口宽度:{0}", Console.WindowWidth); Console.WriteLine("控制台的窗口高度:{0}", Console.WindowHeight);

C学习笔记25: 控制台应用程序开发精讲

缓冲区的大小应大于窗口的大小,窗口尺寸不能大于控制台的最大行数和列数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229821.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午3:48
下一篇 2026年3月16日 下午3:48


相关推荐

  • strsep函数用法

    strsep函数用法1 位置 在 kernel lib string c 中 头文件 linux string h 中 2 函数功能 破坏性分割字符串 返回分割前一部分 后一部分保存在原字符中 3 函数原型 char strsep char constchar strsep Splitastring s Thestringtob ct Thecharacter linux

    2026年3月17日
    2
  • 机器学习(2)Pandas数据读取、选择、定位(loc、iloc、ix)

    机器学习(2)Pandas数据读取、选择、定位(loc、iloc、ix)读取 csv 文件该文本中的分割符既有空格又有制表符 t sep 参数用 s 可以匹配任何空格 importpandas pd read csv C Users 62497 Desktop data1 csv sep s header None 没有每列的 columnname 可以自己设定 encoding

    2026年3月26日
    3
  • iReport自定义快捷键「建议收藏」

    iReport自定义快捷键「建议收藏」设置方法:工具-选项-快捷键映射预览CTRL+D工具-选项-快捷键映射-designer-runreport编辑sql语句ALT+A工具-选项-快捷键映射-designer-editorReportqueryadapttopartentheight快捷键ALT+S页面设计ALT+D适应band的宽度ALT+F顶部对齐ALT+G左对齐ALT+H子报表参考ALT

    2025年10月20日
    7
  • 递归函数及例题

    递归函数及例题定义 一种计算过程 如果其中每一步都要用到前一步或前几步的结果 称为递归的 用递归过程定义的函数 称为递归函数 例如连加 连乘及阶乘等 凡是递归的函数 都是可计算的 即能行的 古典递归函数 是一种定义在自然数集合上的函数 它的未知值往往要通过有限次运算回归到已知值来求出 故称为 递归 它是古典递归函数论的研究对象 条件 1 递归出口即结束条件 2 递推关系 例题 1 求任意正整数的逆置数示例 1 输入 890 输出解题思路 1 递归出口 n 0 时可结束 2 递推关系 使用变量

    2026年3月16日
    1
  • Spring源码阅读指南_redis编译安装

    Spring源码阅读指南_redis编译安装1.前言:经过多次拉取Spring源码编译失败经历,一下抓取配置编译过程各个软件版本可能有影响因此先做以记录(时间不同也会导致版本出入要注意)Idea:2020.1.1(参考文献博主2019.3.3版本也可)插件:maven(3.6.3)(未用到)Gradle(4.10.3)Kotlin(idea内装)JDK:原机安装1.8版本需要11版本(后续会说明JDK1.8问题)注:流程可能较长,源码拉取编译不易,耐心阅读2.流程2.1抓取Spring源码GITHUB网址:https://gi

    2022年8月12日
    12
  • 掌握JedisPoolConfig参数配置,学会调优技能

    点击上方☝Java编程技术乐园,轻松关注!及时获取有趣有料的技术文章做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!你好,JedisPoolConfigJava中…

    2022年2月28日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号