替换 getchar 的返回值

subsructing getchar's return value

本文关键字:返回值 getchar 替换      更新时间:2023-10-16

>假设我有一个由单个字符串组成的文件

a1

如果我写这个:

char ch = getchar();
char ch1 = getchar();
cout << ch - 'a'  << " " << ch1 - '0' << endl;

我的输出0 1。但是如果我写这个:

cout << getchar() - 'a'  << " " << getchar() - '0' << endl;

我有-48 49.getchar(( 不返回正常的字符吗?为什么结果不一样?

您遇到此问题是因为对getchar()的两个调用是以未指定的顺序计算的,而您的编译器碰巧首先评估最右边的调用。

C++对表达式中子表达式的计算顺序有相当宽松的规则,以提供更多优化机会。cout行是一个表达式,其中保证以下内容:

  • 第一个getchar()将在第一个-之前进行评估
  • 第二个getchar()将在第二个-之前进行评估
  • 第一个-将在第一个<<之前进行评估
  • 第二个-将在第三个<<之前进行评估
  • << S 将按左侧的顺序进行评估。

请注意,没有其他订购限制。例如,编译器可以自由地计算getchar()调用和第一个<<之前的-。最重要的是,没有规则强制在第二个getchar()之前评估第一个。