fprintf(fpout, "%-16s \t\t\t关键字\t\t\n",arr); 和fprintf(fpout, "%-16s \t\t关键字\t\n",arr); 有什么区别
时间: 2024-04-21 14:20:38 浏览: 186
这两个语句是使用C语言中的fprintf函数将字符串arr按照指定格式输出到文件中。它们的区别在于输出格式中的\t和\n的位置不同。
第一个语句的输出格式为"%-16s \t\t\t关键字\t\t\n",其中:
- %-16s表示输出一个长度为16的字符串,左对齐。
- \t表示插入一个制表符,用于在输出中产生水平制表。
- \n表示插入一个换行符,用于在输出中产生换行。
第二个语句的输出格式为"%-16s \t\t关键字\t\n",其中:
- %-16s表示输出一个长度为16的字符串,左对齐。
- \t表示插入一个制表符,用于在输出中产生水平制表。
- \n表示插入一个换行符,用于在输出中产生换行。
所以两者的区别在于第一个语句在关键字后面有两个制表符和两个换行符,而第二个语句只有一个制表符和一个换行符。
相关问题
题目:函数的功能是对参数p传送的首地址,n为元素个数的双精度 型数组按降序排序。#include<stdio.h> #include<stdlib.h> void fun(double *,int); void SaveRes(void); void fun(double *p,int n) { int i,j; double t; for(i=0;i<n-1;i++) { for(j=1;j<n;j++) { if((*(p+i))<(*(p+j))) { t=*(p+i); *(p+i)=*(p+j); *(p+j)=t; } } } } int main(void) { double a[10]={0.45,-0.97,0.56,0.13,0.66,-0.83,0.78,-0.19,0.46,-0.23}; int i; fun(a,10); printf("After sort\n"); for(i=0;i<10;i++) { printf("%6.2lf\n",a[i]); } SaveRes(); return 0; } void SaveRes(void) { FILE *fpIn,*fpOut; double a[12]; int i; fpIn = fopen("in0202.dat","r"); if(fpIn==NULL) { printf("File open error!"); exit(1); } fpOut = fopen("out0202.dat","w"); if(fpOut==NULL) { printf("File open error!"); exit(1); } for(i=0;i<12;i++) { fscanf(fpIn,"%lf",&a[i]); } fun(a,12); for(i=0;i<12;i++) { fprintf(fpOut,"%6.2lf",a[i]); } fclose(fpIn); fclose(fpOut); }
这段代码的功能是将一个双精度型数组按照降序排序,并将结果输出到屏幕和文件中。主函数中定义了一个双精度型数组a,并将其作为参数传递给函数fun进行排序。排序完成后,使用循环将排序后的结果输出到屏幕上。最后调用SaveRes函数,该函数打开in0202.dat文件并读取其中的12个双精度型数据到数组a中,再调用函数fun对数组a进行排序并将排序后的结果输出到out0202.dat文件中。
代码修改:题目:函数的功能是对参数p传送的首地址,n为元素个数的双精度 型数组按降序排序。#include<stdio.h> #include<stdlib.h> void fun(double *,int); void SaveRes(void); void fun(double *p,int n) { int i,j; double t; for(i=0;i<n-1;i++) { for(j=1;j<n;j++) { if((*(p+i))<(*(p+j))) { t=*(p+i); *(p+i)=*(p+j); *(p+j)=t; } } } } int main(void) { double a[10]={0.45,-0.97,0.56,0.13,0.66,-0.83,0.78,-0.19,0.46,-0.23}; int i; fun(a,10); printf("After sort\n"); for(i=0;i<10;i++) { printf("%6.2lf\n",a[i]); } SaveRes(); return 0; } void SaveRes(void) { FILE *fpIn,*fpOut; double a[12]; int i; fpIn = fopen("in0202.dat","r"); if(fpIn==NULL) { printf("File open error!"); exit(1); } fpOut = fopen("out0202.dat","w"); if(fpOut==NULL) { printf("File open error!"); exit(1); } for(i=0;i<12;i++) { fscanf(fpIn,"%lf",&a[i]); } fun(a,12); for(i=0;i<12;i++) { fprintf(fpOut,"%6.2lf",a[i]); } fclose(fpIn); fclose(fpOut); }
这段代码本身没有问题,但是函数SaveRes中输出到文件的数据没有换行符,因此所有的数据都写在了同一行上,不易于阅读。修改方法如下:
将 fprintf(fpOut,"%6.2lf",a[i]); 修改为 fprintf(fpOut,"%6.2lf\n",a[i]);,即增加一个换行符,每行输出一个数据,方便查看。
修改后的代码如下:
```c
#include<stdio.h>
#include<stdlib.h>
void fun(double *,int);
void SaveRes(void);
void fun(double *p,int n)
{
int i,j;
double t;
for(i=0;i<n-1;i++)
{
for(j=1;j<n;j++)
{
if((*(p+i))<(*(p+j)))
{
t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
}
}
}
}
int main(void)
{
double a[10]={0.45,-0.97,0.56,0.13,0.66,-0.83,0.78,-0.19,0.46,-0.23};
int i;
fun(a,10);
printf("After sort\n");
for(i=0;i<10;i++)
{
printf("%6.2lf\n",a[i]);
}
SaveRes();
return 0;
}
void SaveRes(void)
{
FILE *fpIn,*fpOut;
double a[12];
int i;
fpIn = fopen("in0202.dat","r");
if(fpIn==NULL)
{
printf("File open error!");
exit(1);
}
fpOut = fopen("out0202.dat","w");
if(fpOut==NULL)
{
printf("File open error!");
exit(1);
}
for(i=0;i<12;i++)
{
fscanf(fpIn,"%lf",&a[i]);
}
fun(a,12);
for(i=0;i<12;i++)
{
fprintf(fpOut,"%6.2lf\n",a[i]);
}
fclose(fpIn);
fclose(fpOut);
}
```
阅读全文