Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我要做c-48?\a和%2.f是什么意思?_C_Visual Studio_Performance_Variables_Calculator - Fatal编程技术网

为什么我要做c-48?\a和%2.f是什么意思?

为什么我要做c-48?\a和%2.f是什么意思?,c,visual-studio,performance,variables,calculator,C,Visual Studio,Performance,Variables,Calculator,这个程序是一个简单的计算器。 首先很抱歉我的英语不好,我想知道“\a”和“%2.f”是什么意思 我知道%f代表double,但为什么是'2'。在'f'前面? 在结束之前,我们将“dgt”设置为“c-48”,我想知道为什么“-48” 我是一个信息型的学生,我在一开始,你有一些特别的提示给我吗 #include <stdio.h> #include <conio.h> #include <stdlib.h> int main() { printf("

这个程序是一个简单的计算器。 首先很抱歉我的英语不好,我想知道“\a”和“%2.f”是什么意思 我知道%f代表double,但为什么是'2'。在'f'前面? 在结束之前,我们将“dgt”设置为“c-48”,我想知道为什么“-48” 我是一个信息型的学生,我在一开始,你有一些特别的提示给我吗

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main()
{
   printf("Simple Calculator: \nValid inputs are +-*/=and digits 0,...,9\n");
   printf("Your input: \n");
   double r = 0.0;
   double dgt = 0.0;
   char lst_opt = '+';
   const int nxt_dgt = 1;
   const int nxt_opt = 2;
   int nxt_npt = nxt_dgt;
   while (1)
   {
       char c = _getch();
       switch (c)
       {
        case '+': 
        case '-':
        case '*':
        case '/':
            if (nxt_npt != nxt_opt)
            {
                printf("\a");
                break;
            }
            printf("%c", c);
            lst_opt = c;
            nxt_npt = nxt_dgt;
            break;
        case '=': 
            if (nxt_npt != nxt_opt)
            {
               printf("\a");
               break;
            }
               printf("\n=%.2f", r); //double, but why .2?
               nxt_npt = nxt_opt;
               break;
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            if (nxt_npt != nxt_dgt)
            {
               printf("\a");
               break;
            }
            printf("%c", c);
            dgt = c-48;
            switch (lst_opt)
            {
              case '+': r += dgt; break;
              case '-': r -= dgt; break;
              case '*': r *= dgt; break;
              case '/': r /= dgt; break;
            }
            nxt_npt = nxt_opt;
            break;
            }
      }
_getch();
}
#包括
#包括
#包括
int main()
{
printf(“简单计算器:\n有效输入为+-*/=和数字0,…,9\n”);
printf(“您的输入:\n”);
双r=0.0;
双dgt=0.0;
字符lst_opt='+';
常数int nxt_dgt=1;
常数int nxt_opt=2;
int nxt_npt=nxt_dgt;
而(1)
{
char c=_getch();
开关(c)
{
格“+”:
案例'-':
案例“*”:
案例“/”:
如果(nxt_npt!=nxt_opt)
{
printf(“\a”);
打破
}
printf(“%c”,c);
lst_opt=c;
nxt_npt=nxt_dgt;
打破
案例“=”:
如果(nxt_npt!=nxt_opt)
{
printf(“\a”);
打破
}
printf(“\n=%.2f”,r);//双精度,但为什么是.2?
nxt_npt=nxt_opt;
打破
案例“0”:
案例“1”:
案例“2”:
案例“3”:
案例“4”:
案例“5”:
案例“6”:
案例“7”:
案例“8”:
案例“9”:
如果(nxt_npt!=nxt_dgt)
{
printf(“\a”);
打破
}
printf(“%c”,c);
dgt=c-48;
开关(lst_opt)
{
案例“+”:r+=dgt;中断;
案例'-':r-=dgt;中断;
案例“*”:r*=dgt;中断;
案例“/”:r/=dgt;中断;
}
nxt_npt=nxt_opt;
打破
}
}
_getch();
}
\a是用来发出声音的 c-48:如注释中所述,48是字符“0”的ascii值。所以c-48转换ascii字符“0”。。'9'到整数值0。。。9 在打印文档中,您可以看到%2.f表示您打印的浮点值在小数点左侧至少有2个字符,没有小数点,例如: 2.643 -> ´ 2’ 123.4->'123'

  • \a
    是什么意思
\n
,一个转义字符,意思是“换行符”,它也是一个转义字符,意思是“警报”,当“打印”时会发出嘟嘟声。 您可以找到信息(包括其他特殊转义字符)

  • 为什么减48
在代码中,它试图从字符中获取整数。而不是像这样做
if(c=='3')i=3,它使用字符“0”~“9”在中的排序方式。你可以看到,'0'~'9'是从48到57紧密排列的。也就是说,
'0'-48
生成的结果为0,其他结果也是如此

  • %2.f
您知道
%f
用于打印
float
变量,这很好,但是还有更多需要了解的内容。您可以格式化如何打印变量。
2.
代表“打印至少2个字符宽的浮点数,也可以是无” 应打印“小数点后的第1位”。更多
printf()
格式信息

“\a”是什么意思

这一点实际上有些模糊。出现在字符常量或字符串文本中的转义序列
\a
表示一个字符,当发送到终端时,该字符会在不改变输出位置的情况下发出和/或显示警报信号。信号的细节是特定于环境的,但它可能会发出嘟嘟声或导致屏幕闪烁或类似情况。这是很少使用这些天

&“%2.f”我知道%f代表double,但为什么是“2”。在“f”前面

关于
printf
格式字符串的信息,最好查阅好的参考资料——在线手册页(搜索关键字“man printf”)是我的建议,尽管语言规范文档是最终权威。教科书和教程通常不涵盖所有的细节,其中有很多

如果这样做,您会发现
2
是一个(最小)字段宽度,
.0
的缩写,这是一个精度规范,指示
printf
发出零个小数位数

在结束之前,我们将“dgt”设置为“c-48”,我想知道为什么“-48”

必须理解数字字符和它们所代表的数字之间存在差异。48是字符
'0'
的ASCII代码,C要求每个后续十进制数字的代码大于前一个,因此,假设实现使用ASCII兼容字符代码,
dgt-48
将任何十进制数字字符转换为其对应的数值


但是,这将更安全、更习惯地表示为
dgt-“0”
。更清楚的是,它至少提供了一个关于正在发生什么的线索,甚至在使用不兼容ASCII的字符编码的实现上也能起作用。

48应该是“0”