C 函数中的参数;不同结果
我刚开始参加C基础课程。今天我遇到了这个问题 为什么用OutputF函数输入Y和N会产生与直接传递Y和N不同的结果C 函数中的参数;不同结果,c,C,我刚开始参加C基础课程。今天我遇到了这个问题 为什么用OutputF函数输入Y和N会产生与直接传递Y和N不同的结果 printf("%d", OutputF(InputF(), InputF())); printf("%d", OutputF('Y', 'N')); 以下是全部代码: #include<stdio.h> char InputF(void) { char a = getchar(); while (getchar() != '\n'); re
printf("%d", OutputF(InputF(), InputF()));
printf("%d", OutputF('Y', 'N'));
以下是全部代码:
#include<stdio.h>
char InputF(void) {
char a = getchar();
while (getchar() != '\n');
return a;
}
int OutputF(char Input1, char Input2) {
if (Input1 == 'y' || Input1 == 'Y')
if (Input2 == 'y' || Input2 == 'Y')
return 200;
else
return 300;
else
if (Input2 == 'y' || Input2 == 'Y')
return 400;
else
return 500;
}
int main(void)
{
printf("%d", OutputF(InputF(), InputF()));
printf("%d", OutputF('Y', 'N'));
return 0;
}
假设OutputFInputF,InputF按照函数调用参数中声明的顺序调用InputF。这是C语言中未定义的行为。
根据C规范:
功能指示器的评估顺序,实际
参数,并且实际参数中的子表达式是
未指定,但在实际调用之前有一个序列点
编译器可以做任何它想做的事情。请尝试以下方法:
int main(void)
{
char in1 = InputF();
char in2 = InputF();
printf("%d\n", OutputF(in1,in2));
printf("%d\n", OutputF('Y', 'N'));
return 0;
}
有关未定义行为的更多详细信息,请参见此原因是调用函数Input printf%d、OutputFInputF、InputF;,您可以在调试器中看到Input1将是“Y”,Input2将是“N”。第二次调用的结果正好相反,产生不同输出的原因,第一次是400,第二次是300 第一次调用在第一次输入“Y”和第二次输入“N”时:
Input1 78 'N' char
Input2 89 'Y' char
产量为400
第二个电话:
Input1 89 'Y' char
Input2 78 'N' char
输出为300。您得到的意外输出是什么?不编译