Fresh.587 2022-03-12 12:50 采纳率: 88%
浏览 41
已结题

在主函数之前定义了一个静态变量,主函数里输出是乱码是怎么回事?

程序头定义的NUM在main函数里输出乱码是因为什么

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define MAX 6
typedef struct node
{
    char num[15];
    char name[10];
    float price;
}ElemType;
typedef ElemType *Triplet;
typedef int Status;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
static int NUM=0;
void Print(Triplet);
Status InitTriplet(Triplet *T)

{
    int n=1;
    char str1[15]="0";
    char str2[15]="0";
    (*T)=(ElemType*)malloc(MAX*sizeof(ElemType));
    srand ((unsigned)time(NULL));
    if((*T)==NULL)
        return OVERFLOW;
        printf("请输入图书的书号,书名和价格(数据之间用空格分隔)");
        scanf("%14s%9s%f",&(*T)[n].num[0],&(*T)[n].name[0],&(*T)[n].price);
        while(strcmp((*T)[n].num,str1)!=0||strcmp((*T)[n].name,str2)!=0||(*T)[n].price!=0){

            n++;
            NUM++;
            printf("请输入图书的书号,书名和价格(数据之间用空格分隔)");
        scanf("%14s%9s%f",&(*T)[n].num[0],&(*T)[n].name[0],&(*T)[n].price);
        }
    return OK;
}
Status DestroyTriplet(Triplet T)

{
    free(T);
    T=NULL;
    return OK;
}
void Descending(Triplet T)
{
    float jiage;
    int i,j;
    for(i=1;i<=NUM-1;i++)
        for(j=1;j<=NUM-i;j++)
            if(T[j+1].price>T[j].price)
            {
                jiage=T[j].price;
                T[j].price=T[j+1].price;
                T[j+1].price=jiage;
            }

}
void Pricemodify(Triplet T)

{
    int i;
    float sum,average;
    sum=0;
    average=0;
    for(i=1;i<=NUM;i++)
    {
        sum+=T[i].price;
    }
    average=sum/(NUM*1.00);
    printf("%.2f",average);
    for(i=1;i<=NUM;i++)
    {
        if(T[i].price<average)
            T[i].price+=T[i].price*0.2;
        else T[i].price+=T[i].price*0.1;
    }

}
void Print(Triplet T)

{
    int i;
    for(i=1;i<=NUM;i++)
    {
        printf("%14s %9s %.2f",T[i].num,T[i].name,T[i].price);
        printf("\n");
    }

}
void main()

{
    Triplet T=NULL;
    ElemType e;
    int select;
    printf("输入三个数,建立一个三元组:\n");
    if(InitTriplet(&T)==OVERFLOW)
        printf("分配失败,退出程序!");
    else
        do{
            printf("\n****************************\n");
            printf("****\t1:打印图书信息\t\t\t****\n");
            printf("****\t2:打印按价格降序后的图书信息\t\t\t****\n");
            printf("****\t3:打印价格按平均价格修改后的图书信息\t\t\t****\n");
            printf("****\t0:结束\t\t\t****\n");
            printf("\n****************************\n");
            scanf("%d",&select);
            switch (select)

            {
            case 1:
                    printf("图书信息表为:\n");
                    printf("%d",&NUM);
                    printf("\n");
                    Print(T);
                    break;
            case 2:
                printf("按价格降序排列后的图书信息表为:\n");
                Descending(T);
                Print(T);
                break;
            case 3:
                printf("价格按平均价格修改后的图书信息为:\n");
                Pricemodify(T);
                Print(T);
                break;
            case 0:
                printf("操作结束!\n");
                break;
            default:
                printf("输入选择错误!\n");
            }
        }while(select!=0);
        DestroyTriplet(T);
}
  • 写回答

2条回答 默认 最新

  • Code_流苏 C/C++领域优质创作者 2022-03-12 18:02
    关注

    img


    不太清楚这个 0 0 0 是做什么的?

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

报告相同问题?

问题事件

  • 系统已结题 3月20日
  • 已采纳回答 3月12日
  • 创建了问题 3月12日

悬赏问题

  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 arduino控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题