gpt4 book ai didi

c - 如何将 feof 与 while 循环一起使用?

转载 作者:太空宇宙 更新时间:2023-11-04 04:23:34 24 4
gpt4 key购买 nike

我想获得期中和期末成绩的学生姓名并将它们写入 txt 文件,但是当我使用循环时,它永远不会获得学生姓名。它总是给它一个错过。如何将 feof 与循环一起使用?我想获得期中和期末成绩的学生姓名,并根据获得的分数计算平均值,并且它必须始终获得姓名和分数,直到用户按下文件末尾。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<conio.h>

void main()
{
FILE *Points;

char namesOfStudents[10];
int pointsOfStudents[1][2];
double AverageOfStudents[1];
int i=0,j=1;
int numberOfStudents;

Points = fopen("C:\\Users\\Toshiba\\Desktop\\PointsOfStudent.txt", "a+");
fprintf(Points, "Name\t\t 1.Grade\t2.Grade\t\tAverage\n");
/* printf("How many students will you enter: ");
scanf("%d",&numberOfStudents);*/

//while (!feof(Points))

printf("Please enter new students name: ");
gets(namesOfStudents);
printf("\nPlease enter new students first point: ");
scanf("%d",&pointsOfStudents[0][0]);
printf("\nPlease enter new students second point: ");
scanf("%d",&pointsOfStudents[0][1]);


for (; i < strlen(namesOfStudents); i++)
{
fprintf(Points, "%c", namesOfStudents[i]); //To write
student name to file

}
fprintf(Points,"\t\t ");

fprintf(Points,"%d\t\t",pointsOfStudents[0][0]); //to write
student's first point
fprintf(Points,"%d\t\t",pointsOfStudents[0][1]); //to write
student's second point

fprintf(Points,"%d\n",(pointsOfStudents[0][0]+pointsOfStudents[0]
[1])/2); //to calculate and write average
system("cls");

fclose(Points);

system("Pause");
}

最佳答案

几件事:

首先,NEVER NEVER NEVER NEVER NEVER 使用 gets - 它很危险,它在您的代码中引入故障点和/或巨大的安全漏洞,并且自 2011 版语言标准起,它已从标准库中删除。使用 fgets相反:

fgets( nameOfStudents, sizeof nameOfStudents, stdin );

其次,while( !feof( fp ) )总是错的。来自 fp 的输入,它会过于频繁地循环一次。输出到 fp , 没有意义。

您可以使用 fgets 的结果控制你的循环:

while ( fgets( nameOfStudents, sizeof nameOfStudents, stdin ) )
{
...
}

当您完成从终端输入数据时,使用 CtrlZCtrlD (取决于您的平台)。

第三,main返回 int , 不是 void ;使用

int main( void )

相反。

最后,改变

for (; i < strlen(namesOfStudents); i++)
{
fprintf(Points, "%c", namesOfStudents[i]); //To write student name to file
}

fprintf( Points, "%s", nameOfStudents );

将学生姓名写入文件。

还有其他问题,但进行这些更改,看看是否有帮助。

关于c - 如何将 feof 与 while 循环一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43891868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com