我有一个带有{ABCDEFGHI“的文件archivo3.txt
,我通过fgetc
分别读取了前三个字符(不同的printf
)并且可以正常工作(显示了41、42、43) ,当我尝试执行相同操作但仅使用一个printf
时就会出现问题。
在这种情况下,值从右到左显示(43,42,41)。有人知道会发生什么吗?
我的代码是:
#include<stdio.h>
#include<stdlib.h>
int main(){
FILE*app_f=fopen("archivo3.txt", "rb");
if(app_f==NULL){
printf("error al abrir el archivo");
exit(1);
}else{
fseek(app_f,0, SEEK_SET);
printf("caracteres %02X\n", fgetc(app_f));
printf("caracteres %02X\n", fgetc(app_f));
printf("caracteres %02X\n", fgetc(app_f));
printf("\n--------------\n");
fseek(app_f,0, SEEK_SET);
printf("caracter %02X, %02X, %02X\n", fgetc(app_f), fgetc(app_f), fgetc(app_f));
}
return 0;
}
答案 0 :(得分:0)
参数的评估顺序未在任何标准中定义,因此编译器之间可能会有所不同。看来您的编译器正在从最后到第一计算表达式,而不是相反。另一个编译器可能会以不同的顺序进行操作。
因此,最安全的做法是不假定将评估printf参数的顺序,并相应地编写代码。请参阅下面的代码段。
有关更多信息,请参见this more thorough question
#include<stdio.h>
#include<stdlib.h>
int main(){
chars = char[3];
FILE*app_f=fopen("archivo3.txt", "rb");
if(app_f==NULL){
printf("error al abrir el archivo");
exit(1);
}else{
fseek(app_f,0, SEEK_SET);
chars[0] = fgetc(app_f);
chars[1] = fgetc(app_f);
chars[2] = fgetc(app_f);
printf("caracteres %02X\n", chars[0]);
printf("caracteres %02X\n", chars[1]);
printf("caracteres %02X\n", chars[2]);
printf("\n--------------\n");
fseek(app_f,0, SEEK_SET);
printf("caracter %02X, %02X, %02X\n", chars[0], chars[1], chars[2]);
}
return 0;
}