2201_75525666 2023-02-14 12:29 采纳率: 100%
浏览 42
已结题

关于#c语言#的问题:#include <stdio.h>

为什么再次输入数据后,输出时会多一个空数据。

img

img

img

#include<stdio.h>
#include<stdlib.h>
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<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);
        }
    }
}
void menu()
{
    printf("1.添加学生信息\n");
    printf("2.浏览学生信息\n");
}

  • 写回答

4条回答 默认 最新

  • zmy1127 2023-02-14 16:32
    关注

    问题可能出现在文件操作部分,因为你在写入学生信息到文件时,使用的是循环 for(m=0;m<=i;m++),这里应该改为 for(m=0;m<i;m++),因为 i 表示输入的学生信息数量,所以最后一个元素的下标应该是 i-1,而不是 i。这样就可以避免输出多余的空数据了。
    望采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月15日
  • 已采纳回答 2月15日
  • 创建了问题 2月14日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测