Day05_接受用户输入_基础符号_类型转换

主要内容

  • 接受用户输入
  • 转义符
  • 算数运算符
  • 类型转换

接受用户输入

  • 新函数: string str = Console.ReadLine();
  • 注意: string 可以存储所有的类型, 且要求必须用string来接受

转义符

  • 转义符是指一个由一个反斜杠("\")和一个特殊字符组成的一个具有特殊意义的字符
反斜杠后的字符 效果
n 换行
\r\n windows系统换行
" 表示双引号
t 等距空格(相当于按Tab键), 多用于排版
b 相当于退格键, 删除前面的一个字符; 但是放在字符串的最前和最后是没有用的
\\ 单纯表示一个\
  • 注意: \n只能在控制台,Winform和苹果系统中起到作用
    若要让windows(比如文本框)识别, 需要使用 \r\n

  • 补充: \起到转义作用时不被视作字符
    要让\在字符串中不起到转义的作用, 就在字符串的最前面紧接一个"@“符号

char chara = ‘/b’
string path = @“D:\path\a\b\c\d\p.avi”

  • “@“的作用
    • 取消\在字符串中的转义作用
    • 将字符串按照编辑的原格式输出

算数运算符

符号 名称 举例
+ 10+3=>13
- 10-3=>7
* 10*3=>30
/ 10/3=>$3.\dot3$(要看result变量的类型)
% 取余 10/3=>1

类型转换

  • “=“作为赋值运算符, 等号两端数据类型必须一致
    但是, 即便不同也可能不会报错
  • 如果不一致, 当满足下列条件时, 会发生自动类型转换(亦称隐式类型转换)
    • 数据类型兼容, 例如 int和double
    • 目标类型大于源类型, int$\rightarrow$double

如果是int$\rightarrow$double称为自动/隐式类型转换
如果是double$\rightarrow$int称为强制/现式类型转换

  • 强制类型转换
  • 条件:
    • 两者相兼容
    • 目标类型小于源类型
  • 语法: (目标类型)要转换的值
double d = 2.33;
int n = (int)d;

补充

  • 整数类型之间的运算的结果全部都是整数类型
  • 注意: 如果操作数中存在一个double类型, 则整个运算表达式就被提升为double类型

注意一下这些例子的区别

int n1 = 10;
int n2 = 3;
double ans = n1 / n2;
//3
double ans = n1 * 1.0 / n2;
//此时出现一个double操作数
//3.333
double ans = n1 / n2 * 1.0;
//实际上被视作了:
//double ans = (n1 / n2) * 1.0;
//也就是1.0作为一个普通数字投入运算, 由于前面是int, 自动适配类型为int
//3
double ans = n1 / n2 * 1.2;
//实际上被视作了:
//double ans = (n1 / n2) * 1.2;
//此时1.2显然是double, 因此运算式被提升了
//3.599996
double ans = n1 / (n2 * 1.0);
//3.3333

小知识

  • 若要使输出保留特定位数的小数点, 则使用以下语法:
Console.WriteLine("变量ans1保留小数点后三位的输出结果为: {0:0.000}\n同理,四位的话是这样表示: {1:0.0000}", ans1, ans2);

小练习

  • 计算几天(46天)是第几周零几天
  • 107653秒是几天几小时几分钟几秒
  • 可以改为让用户输入

我的答案

int days = 46;
int day = days % 7;
int week = days / 7;
Console.WriteLine("结果是:\n第{0}周\n第{1}天", week, day);
Console.ReadKey();
int time = 107653;
int day = time / (3600 * 24);
int hour = time % (3600 * 24) / 3600;
int minute = time % 3600 / 60;
int second = time % 60;
Console.WriteLine("结果是:\n{0}天\n{1}小时\n{2}分钟\n{3}秒", day, hour, minute, second);
Console.ReadKey();