C中不同的数据类型

Posted

技术标签:

【中文标题】C中不同的数据类型【英文标题】:data types different in C 【发布时间】:2020-08-04 18:17:13 【问题描述】:

我们如何在 C 中声明并行数组。此外,如何在单个数组中添加多个数据类型。例如,我想在同一个数组中声明 int 和 char 数据类型

#include <stdio.h>

int main()
    

     
     
     double linetotal= qty*price;
     printf("line total =%lf\n",linetotal);
     double subtotal = line total - discount ;

    
      
    
     
    
    
    
    
    
    

【问题讨论】:

这行不通:scanf("%s",&amp;name); 因为name 只是一个字符。 scanf("%s",&amp;name);scanf("%f",&amp;quantity);scanf("%f",&amp;price); 的格式说明符类型也错误。 @FredLarson 但这对我有用... 不,只是看起来。这就是未定义行为的本质。它可以看起来像它在工作,但实际上你有一颗定时炸弹等着引爆。 您遇到或将会遇到的另一个问题是scanf leaving newline characters in the buffer。 @FredLarson 是的,谢谢,我注意到了。我可以添加一个空格,以便 scanf 将忽略换行符,对吗?顺便说一句,你能帮我完成剩下的代码吗? 【参考方案1】:

现在检查解决方案。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NUM_CODE 10
const char *CODE[NUM_CODE] = "B100","B122","B134","B138","B145","B160","B165","B178","B186","B194";
double PRICE[NUM_CODE]=12.8,18.7,20.5,11.5,25.5,20.55,25.65,14.85,22.2,24.25;
int main()

    char name[20];
    
    printf("Enter buyer name: ");
    scanf("%s",name);

    int entry;

    printf("Enter number of entries for the invoice: ");
    scanf("%d",&entry);
    
    char code[10];
    int quantity;
    double price,linetotal=0;
    int i; 
    for(i=1;i<=entry;i++)
    
        printf("Enter  Code: ");
        scanf("%s",code);
        printf("Enter Quantity: ");
        scanf("%d",&quantity);
        printf("Enter Unit Price: ");
        scanf("%lf",&price);
    
        int j;
        int flag=0;
        for(j=1;j<=NUM_CODE;j++)
            // how do i print values like B100 without getting errors//
            printf("%s ",CODE[j-1]);

            //  how to match the user input with parallel arrays?//
            if(strcmp(CODE[j-1],code)==0 && PRICE[j-1]==price)
                //If correct code and price found do
                printf("\nValid Code and price found\n");
                //set the flag and break from the loop
                flag=1;
                break;
            
        
        if(flag==0)
            //Exit the program with invalid entry
            printf("\nInvalid Code and price found\n");
            printf("The program will close now...\n");
            exit(1);
        
        
        //  how do calculate line total,and subtotal after discount//
        // discount is 10% if line total is greater than Rs5000//
        linetotal = price * quantity + linetotal;
        printf("\n");
    
    double subtotal;
    if(linetotal>5000)
        subtotal = 0.9*linetotal;
    
    else if(linetotal>=1000 && linetotal<=5000)
        subtotal = 0.95*linetotal;
    
    else
        subtotal = linetotal;
    

    printf("Discount: %0.2lf%%\nTotal Price: %lf\n",((linetotal-subtotal)/linetotal)*100,subtotal);

    return 0;

【讨论】:

行总计(客户购买的总和)和小计应使用数量和单价计算。如果小计大于 5000 卢比,那么他们将对小计提供 10% 的折扣。如果小计在 1000 美元到 5000 美元之间,那么他们会给小计 5% 的折扣。最后,发票应显示折扣金额,总价必须由客户支付。 好的,现在知道了。 哦,您可以使用 if-else 块进行错误检查。 @tiara 记住...如果这个答案对你有帮助 - 给它一个赞成票。如果这个答案解决了您的问题 - 接受它。 :-) “并行数组”几乎总是一种反模式。比 N 个并行数组更好的是一个 struct 数组,其中结构具有 N 个属性。

以上是关于C中不同的数据类型的主要内容,如果未能解决你的问题,请参考以下文章

c语言 不同数据类型间的混合运算

指向C中不同数据类型的指针

在 C 函数中返回不同的数据类型

C语言中,不同的数据类型对数据的处理方式是不是相同?

c语言 不同数据类型间的混合运算

如何在 C 中取消设置变量以允许稍后使用具有不同数据类型的相同名称?