为什么再次输入数据后,输出时会多一个空数据。
#include
#include
void tj();
void yl();
void menu();
struct number
{
char no[20];
char name[20];
char address[20];
char phone[20];
}s[100];
int main()
{
int i;
menu();
scanf("%d",&i);
getchar();
switch(i)
{
case 1:tj();break;
case 2:yl();break;
}
}
void tj()
{
int i=0,m;
FILE *fp;
char ch;
fp=fopen("C:/Users/陈/Desktop/student.dat.txt","r");
ch=fgetc(fp);
if(ch==NULL)
{
printf("打开失败");
}
else
{
fclose(fp);
printf("输入Y继续输入,输入N退出\n");
scanf("%c",&ch);
getchar();
while(ch=='Y')
{
printf("学号");
gets(s[i].no);
printf("姓名");
gets(s[i].name);
printf("地址");
gets(s[i].address);
printf("电话号码");
gets(s[i].phone);
i++;
printf("输入Y继续输入,输入N退出\n");
scanf("%c",&ch);
getchar();
}
fp=fopen("C:/Users/陈/Desktop/student.dat.txt","a");
ch=fgetc(fp);
if(ch==NULL)
{
printf("打开失败");
}
else
{
for(m=0;m<=i;m++)
{
fwrite(&s[m],sizeof(s),1,fp);
}
fclose(fp);
}
}
}
void yl()
{
FILE *fp;
char ch;
int i=0,m;
fp=fopen("C:/Users/陈/Desktop/student.dat.txt","r");
ch=fgetc(fp);
if(ch==NULL)
{
printf("未找到学生信息");
}
else
{
fseek(fp,0,SEEK_SET);
while(!feof(fp))
{
ch=fgetc(fp);
if(feof(fp))
{
break;
}
fseek(fp,-1,1);
fread(&s[i],sizeof(s),1,fp);
i++;
}
fclose(fp);
for(m=0;m-1;m++)
{
printf("学号%s\n",s[m].no);
printf("姓名%s\n",s[m].name);
printf("地址%s\n",s[m].address);
printf("电话号码%s\n",s[m].phone);
}
}
}
void menu()
{
printf("1.添加学生信息\n");
printf("2.浏览学生信息\n");
}
问题可能出现在文件操作部分,因为你在写入学生信息到文件时,使用的是循环 for(m=0;m<=i;m++),这里应该改为 for(m=0;m<i;m++),因为 i 表示输入的学生信息数量,所以最后一个元素的下标应该是 i-1,而不是 i。这样就可以避免输出多余的空数据了。
望采纳
你是说最后的空行吗?
for(m=0;m<i-1;m++)
{
printf("学号%s\n",s[m].no);
printf("姓名%s\n",s[m].name);
printf("地址%s\n",s[m].address);
printf("电话号码%s",s[m].phone);
if(m!=i-2)
printf("\n");
}
在添加学生信息时,程序在最后一个学生信息输入完后,会将最后一个输入的回车符(即按下Enter键的字符)也读入了程序,导致输出时会多一行空行。可以在读取输入Y/N的字符后,再加上一句getchar()语句,将多余的回车符读入,以避免这个问题。例如:
printf("输入Y继续输入,输入N退出\n");
scanf("%c",&ch);
getchar(); // 读取多余的回车符
while(ch=='Y')
{
// ...
在输出学生信息时,也可以在每次输出后再加上一个换行符,即在printf语句的末尾加上\n,这样输出每个学生信息时,每个信息之间就会有一个空行,使输出更清晰。例如:
for(m=0;m<i-1;m++)
{
printf("学号%s\n",s[m].no);
printf("姓名%s\n",s[m].name);
printf("地址%s\n",s[m].address);
printf("电话号码%s\n",s[m].phone);
printf("\n"); // 输出一个空行
}