【发布时间】:2017-04-23 05:52:13
【问题描述】:
我正在使用 fgetc 从文本文件中读取和验证流,一次一个字符,但由于某种原因,它会重新排序字符。文本文件包含类似“abc”的内容
void newFunction(int i, int j, int k);
int main()
{
FILE *fp;
/...opens text file.../
newFunction(fgetc(fp), fgetc(fp), fgetc(fp));
}
void newFunction(int i, int j, int k)
{
printf("%d %d %d", i, j, k,);
}
我期待a b c,但为什么我的代码给出c b a?
【问题讨论】:
-
未定义参数的评估顺序。
-
@Someprogrammerdude 你的意思是优先级?我会尝试用括号括起来。
-
Operator 优先级与此无关。很简单,可以按任何顺序评估参数。您将不知道将首先调用哪个
fgetc电话。请阅读例如this evaluation order reference 了解更多信息。 -
不,@Someprogrammerdude 意味着您无法预测哪个
fgetc()将首先被评估。此外,像这样“缩短”代码是一种糟糕的做法,而且它对给定的输入文件过于具体,你不应该编写一个程序来处理给定的输入文件,一个“文件格式”更合适,在这种情况下,我推荐一个数组,char abc[3]和fread()也许?