printf("\t%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n", stu[i].no, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].avg, stu[i].sum); 什么意思
时间: 2023-05-21 10:01:56 浏览: 65
这是一个 C 语言中的 printf 函数调用。它会在标准输出(通常是控制台窗口)中输出一行文本。
具体来说,它会输出一个制表符(\t),然后是一个整数(%d),再是一个制表符,然后是一个字符串(%s),再是三个浮点数(%.1f),最后是一个浮点数和一个换行符(\n)。这些输出项之间用制表符隔开。
stu 数组是一个结构体数组,它的每个元素都有一些属性,包括 no、name、score 和 avg、sum 等。其中,no 是一个整数,name 是一个字符串,score 是一个浮点数数组,avg 是一个浮点数,sum 是一个浮点数。
在调用 printf 函数时,通过使用 . 语法,可以访问 stu 数组中第 i 个元素的属性。例如,stu[i].no 表示第 i 个元素的 no 属性,stu[i].name 表示第 i 个元素的 name 属性,以此类推。
所以,总的来说,这个 printf 函数调用的意思是:在标准输出中输出第 i 个元素的 no、name、score、avg 和 sum 属性,并格式化为特定的样式,最后换行。
相关问题
void printList(struct Node* headNode) { struct Node* pMove = headNode->next; printf("书名\t价格\t作者\t数量\n"); while(pMove != NULL) { printf("%s\t%.1f\t%s\t%d\n",pMove->data.name,pMove->data.price,pMove->data.author,pMove->data.num); pMove = pMove->next; } }
这段代码是用来实现一个链表的遍历,打印出链表中每个节点的数据信息。其中,struct Node 是链表的节点结构体,包含了一个 data 成员,存储了每个节点的数据信息,以及一个 next 成员,指向下一个节点的指针。headNode 是链表的头节点指针,指向第一个节点。
函数的主要逻辑是通过一个指针 pMove 不断地遍历链表,直到遍历到链表的末尾,即 pMove 指向 NULL。每次遍历到一个节点,就打印出该节点存储的数据信息,然后将 pMove 指向下一个节点,继续遍历。最终,整个链表的数据信息都被打印出来了。
注意,函数中的 printf 语句使用了格式化输出,%s 表示输出一个字符串,%.1f 表示输出一个浮点数并保留一位小数,%d 表示输出一个整数。
#include<stdio.h> #include<string.h> typedef struct nodelink { long num; char name[20]; int Chinese; int Math; int English; float aver; }stu; int main() { stu b[10]; FILE *pf; pf=fopen("stud.txt","a"); stu a[10]; for(int i=0;i<3;i++) { printf("请输入第%d个学生的学号,姓名,语文成绩,数学成绩,英语成绩:\n", i + 1); scanf("%ld", &a[i].num); getchar(); fgets(a[i].name, 20, stdin); a[i].name[strlen(a[i].name) - 1] = '\0'; scanf("%d%d%d", &a[i].Chinese, &a[i].Math, &a[i].English); a[i].aver=(a[i].Chinese+a[i].Math+a[i].English)/3.0; fprintf(pf,"%ld\t%s\t%d\t%d\t%d\t%.1f\n",a[i].num,a[i].name,a[i].Chinese,a[i].Math,a[i].English,a[i].aver); } for(int i=0;i<3;i++) { fscanf(pf,"%ld\t%s\t%d\t%d\t%d\t%.1f\n",&b[i].num,b[i].name,&b[i].Chinese,&b[i].Math,&b[i].English,&b[i].aver); printf("%ld\t%s\t%d\t%d\t%d\t%.1f\n",b[i].num,b[i].name,b[i].Chinese,b[i].Math,b[i].English,b[i].aver); } fclose(pf); FILE *pf1; pf1=fopen("studsort.txt","a"); stu k; for(int i=0;i<3;i++) for(int j=i;j<3;j++) { if(b[i].aver>b[j].aver) { k=b[i]; b[i]=b[j]; b[j]=k; } } for(int i=0;i<3;i++) { fprintf(pf1,"%ld\t%s\t%d\t%d\t%d\t%.1f\n",b[i].num,b[i].name,b[i].Chinese,b[i].Math,b[i].English,b[i].aver); } fclose(pf1); return 0; }错误修改
#include<stdio.h>
#include<string.h>
typedef struct nodelink
{
long num;
char name[20];
int Chinese;
int Math;
int English;
float aver;
}stu;
int main()
{
stu a[10];
FILE *pf;
pf=fopen("stud.txt","w"); // 修改为写入模式
for(int i=0;i<3;i++)
{
printf("请输入第%d个学生的学号,姓名,语文成绩,数学成绩,英语成绩:\n", i + 1);
scanf("%ld", &a[i].num);
getchar();
fgets(a[i].name, 20, stdin);
a[i].name[strlen(a[i].name) - 1] = '\0';
scanf("%d%d%d", &a[i].Chinese, &a[i].Math, &a[i].English);
a[i].aver=(a[i].Chinese+a[i].Math+a[i].English)/3.0;
fprintf(pf,"%ld\t%s\t%d\t%d\t%d\t%.1f\n",a[i].num,a[i].name,a[i].Chinese,a[i].Math,a[i].English,a[i].aver);
}
fclose(pf);
FILE *pf1;
pf1=fopen("stud.txt","r"); // 修改为读取模式
stu b[10]; // b 数组定义位置修改到文件读取后
for(int i=0;i<3;i++)
{
fscanf(pf1,"%ld\t%s\t%d\t%d\t%d\t%f\n",&b[i].num,b[i].name,&b[i].Chinese,&b[i].Math,&b[i].English,&b[i].aver);
printf("%ld\t%s\t%d\t%d\t%d\t%.1f\n",b[i].num,b[i].name,b[i].Chinese,b[i].Math,b[i].English,b[i].aver);
}
fclose(pf1);
FILE *pf2;
pf2=fopen("studsort.txt","w"); // 修改为写入模式
stu k;
for(int i=0;i<3;i++)
for(int j=i;j<3;j++)
{
if(b[i].aver>b[j].aver)
{
k=b[i];
b[i]=b[j];
b[j]=k;
}
}
for(int i=0;i<3;i++)
{
fprintf(pf2,"%ld\t%s\t%d\t%d\t%d\t%.1f\n",b[i].num,b[i].name,b[i].Chinese,b[i].Math,b[i].English,b[i].aver);
}
fclose(pf2);
return 0;
}