飞到宇宙 2022-12-27 16:19 采纳率: 100%
浏览 79
已结题

在vscode里面为什么下面的结构体里只能包含3个结构而不能实现下面的5个?

1.以下是代码,可复制到visual studio code试运行,其中第155行是文件地址需要自行修改。问为什么scanf和printf里面只能写三个数据,而不能是下面的5个?如果要有5个该怎么修改代码?

img

img

2.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
#define LEN sizeof(struct Member)
struct Member
{
    int memnum;
    char name[50];
    long long idnum;
    long long telnum;
    float remain;
    struct Member *next;
};
void  SaveNode( struct  Member  *head, char *filename)
{
    struct  Member *p;
    if (head ==NULL)
    {
        printf("print nothing,data is NULL\n");
        return;
    }
    FILE *fp;
    fp=fopen(filename,"w");
    if (fp==NULL)
    {
        printf("error to write !");
        return;
    }
    p=head;
    do
    {
        fprintf(fp,"%d,%lld,%lld,%.2f,%s\n", p->memnum,p->idnum,p->telnum,p->remain, p->name);
        p=p->next;
    }
    while(p !=NULL);
    printf("save node datas to <%s>....Ok\n",filename);
    fclose(fp);
}
void PrintNode(struct  Member  *head)
{
   struct  Member *p=head;
   int n=0;
   if (head==NULL)
   {
       printf("\n List is NULL\n");
       return;
   }
   do
   {
        printf("%2d---%d,%lld,%lld,%.2f,%s\n", ++n,p->memnum,p->idnum,p->telnum,p->remain, p->name);
        p=p->next;
   }
    while(p !=NULL);
}
void PrintNode2(struct  Member  *head,long thenum)
{
   struct  Member *p=head;
   int n=0;
   if (head==NULL)
   {
       printf("\n List is NULL\n");
       return;
   }
   do
   {
      if(p->memnum==thenum) printf("%2d---%d,%lld,%lld,%.2f,%s\n", ++n,p->memnum,p->idnum,p->telnum,p->remain, p->name);
        p=p->next;
   }
    while(p !=NULL);
}
struct Member *AddNewNode(struct Member *head,struct Member *newNode)
{
    struct Member *p=head;
    if (head==NULL)
    {
        head=newNode;
        newNode->next=NULL;
        return head;
    }
    while (p->next!=NULL)
    {
        p=p->next;
    }
    p->next=newNode;
    newNode->next=NULL;
    return head;
}
struct Member *AddNewNodeFromFile(struct Member *head,char *filename)
{
    struct Member *p;
    FILE *fp;
    printf("Get data from file: %s...\n",filename);
    fp=fopen(filename,"r");
    if (fp==NULL)
    {
        printf("open file error!\n");
        return head;
    }
    p=( struct Member *) malloc(LEN);
    while(fscanf(fp,"%d,%lld,%lld,%.2f,%s",&p->memnum,&p->idnum,&p->telnum,&p->remain,p->name)!=EOF)
    {
        head=AddNewNode(head,p);
        p=( struct Member *) malloc(LEN);
    }
    fclose(fp);
    return head;
}
struct Member *AddNewNodeFromKeyboard(struct Member *head)
{
    struct Member *p;
    for (;;)
    {
        p=( struct Member *) malloc(LEN);
        printf("input new datas (End:0,0):\n");
        scanf("%d,%lld,%lld,%.2f,%s",&p->memnum,&p->idnum,&p->telnum,&p->remain,p->name);
        if (p->memnum==0)
        {
            free(p);
            break;
        }
        head=AddNewNode(head,p);
    }
    return head;
}
struct Member *FreeNodeSpace(struct Member *head)
{
    struct Member *p1,*p2;
    p1=head;
    while(p1!=NULL)
    {
        p2=p1->next;
        free(p1);
        p1=p2;
    }
    return NULL;
}
void DisplayMenu()
{
    printf("\n=====[ver 1.0 Menu]=============\n");
    printf("[A]-Display Current all Nodes\n");
    printf("[B]-Add New Node Datas\n");
    printf("[C]-reLoad Node Datas From File\n");
    printf("[D]-Save Node Datas to File\n");
    printf("[E]-Display a Node\n");
    printf("[Q]-Quit\n");
    printf("=================================\n");
}
int main(void)
{
    struct Member *nodehead=NULL;
    char readFilename[56]="C:\\D    C program\\address of homework\\MemberQuantity.txt";
    char saveFilename[30]="";
    long thenum;
    system("cls");
    nodehead=AddNewNodeFromFile(nodehead,readFilename);
    PrintNode(nodehead);
    for(;;)
    {
        DisplayMenu();
        switch(getch())
        {
            case 'A':
            case 'a':
                PrintNode(nodehead);
                break;
            case 'B':
            case 'b':
                nodehead=AddNewNodeFromKeyboard(nodehead);
                PrintNode(nodehead);
                break;
            case 'C':
            case 'c':
                nodehead= FreeNodeSpace(nodehead);
                nodehead=AddNewNodeFromFile(nodehead,readFilename);
                PrintNode(nodehead);
                break;
            case 'D':
            case 'd':
                printf("input the filename (data.txt):");
                gets(saveFilename);
                if (strlen(saveFilename)==0)strcpy(saveFilename,readFilename);
                SaveNode(nodehead, saveFilename);
                break;
            case 'E':
            case 'e':
                printf("Input the num:");
                scanf("%ld",&thenum);
                PrintNode2(nodehead,thenum);
                break;
            case 'Q':
            case 'q':
                printf("\nbye!\n");
                return(0);
        }
        fflush(stdin);
    }
return 0;
}

  • 写回答

4条回答 默认 最新

  • 於黾 2022-12-27 16:27
    关注

    没明白你要问什么,你代码里所有的输入输出都是5个数据呀
    另,你的id如果太大,可以考虑也用字符串来存,没必要非搞数值型

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

报告相同问题?

问题事件

  • 系统已结题 1月4日
  • 已采纳回答 12月27日
  • 修改了问题 12月27日
  • 创建了问题 12月27日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题